| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 | using MediaBrowser.Common.Extensions;using MediaBrowser.Controller;using MediaBrowser.Controller.Configuration;using MediaBrowser.Controller.Entities;using MediaBrowser.Controller.Library;using MediaBrowser.Controller.Social;using MediaBrowser.Model.Social;using System;using System.Threading.Tasks;namespace MediaBrowser.Server.Implementations.Social{    public class SharingManager : ISharingManager    {        private readonly SharingRepository _repository;        private readonly IServerConfigurationManager _config;        private readonly ILibraryManager _libraryManager;        private readonly IServerApplicationHost _appHost;        public SharingManager(SharingRepository repository, IServerConfigurationManager config, ILibraryManager libraryManager, IServerApplicationHost appHost)        {            _repository = repository;            _config = config;            _libraryManager = libraryManager;            _appHost = appHost;        }        public async Task<SocialShareInfo> CreateShare(string itemId, string userId)        {            if (string.IsNullOrWhiteSpace(itemId))            {                throw new ArgumentNullException("itemId");            }            if (string.IsNullOrWhiteSpace(userId))            {                throw new ArgumentNullException("userId");            }            var item = _libraryManager.GetItemById(itemId);            if (item == null)            {                throw new ResourceNotFoundException();            }            var externalUrl = _appHost.GetSystemInfo().WanAddress;            if (string.IsNullOrWhiteSpace(externalUrl))            {                throw new InvalidOperationException("No external server address is currently available.");            }            var info = new SocialShareInfo            {                Id = Guid.NewGuid().ToString("N"),                ExpirationDate = DateTime.UtcNow.AddDays(_config.Configuration.SharingExpirationDays),                ItemId = itemId,                UserId = userId            };            AddShareInfo(info);                        await _repository.CreateShare(info).ConfigureAwait(false);            return info;        }        private string GetTitle(BaseItem item)        {            return item.Name;        }        public SocialShareInfo GetShareInfo(string id)        {            var info = _repository.GetShareInfo(id);            AddShareInfo(info);            return info;        }        private void AddShareInfo(SocialShareInfo info)        {            var externalUrl = _appHost.GetSystemInfo().WanAddress;            info.ImageUrl = externalUrl + "/Social/Shares/Public/" + info.Id + "/Image";            info.Url = externalUrl + "/web/shared.html?id=" + info.Id;            var item = _libraryManager.GetItemById(info.ItemId);            if (item != null)            {                info.Overview = item.Overview;                info.Name = GetTitle(item);            }        }        public Task DeleteShare(string id)        {            return _repository.DeleteShare(id);        }    }}
 |