Пример #1
0
        public void Select(ListItem item)
        {
            if (item == null)
            {
                return;
            }
            object actionObj;
            object mediaItemObj;

            if (!item.AdditionalProperties.TryGetValue(Consts.KEY_MEDIA_ITEM_ACTION, out actionObj) || !item.AdditionalProperties.TryGetValue(Consts.KEY_MEDIA_ITEM, out mediaItemObj))
            {
                return;
            }

            IMediaItemAction action    = actionObj as IMediaItemAction;
            MediaItem        mediaItem = mediaItemObj as MediaItem;

            if (action == null || mediaItem == null)
            {
                return;
            }

            try
            {
                ContentDirectoryMessaging.MediaItemChangeType changeType;
                if (action.Process(mediaItem, out changeType) && changeType != ContentDirectoryMessaging.MediaItemChangeType.None)
                {
                    ContentDirectoryMessaging.SendMediaItemChangedMessage(mediaItem, changeType);
                }
            }
            catch (Exception ex)
            {
                ServiceRegistration.Get <ILogger>().Error("Error executing MediaItemAction '{0}':", ex, action.GetType());
            }
        }
Пример #2
0
 void UpdateCurrentlyImportingSharesProgresses(IDictionary <Guid, int> currentlyImportingSharesProgresses)
 {
     foreach (var progress in currentlyImportingSharesProgresses)
     {
         ContentDirectoryMessaging.SendShareImportProgressMessage(progress.Key, progress.Value);
     }
 }
Пример #3
0
        public async Task <bool> MarkAsWatched(MediaItem mediaItem)
        {
            bool       result           = false;
            SetWatched setWatchedAction = new SetWatched();

            if (await setWatchedAction.IsAvailableAsync(mediaItem))
            {
                try
                {
                    var processResult = await setWatchedAction.ProcessAsync(mediaItem);

                    if (processResult.Success && processResult.Result != ContentDirectoryMessaging.MediaItemChangeType.None)
                    {
                        ContentDirectoryMessaging.SendMediaItemChangedMessage(mediaItem, processResult.Result);
                        result = true;
                    }
                    else
                    {
                        GetLogger().Error("FlagMover: Marking media item '{0}' as watched failed:", mediaItem.GetType());
                    }
                }
                catch (Exception ex)
                {
                    GetLogger().Error("FlagMover: Exception occurred while marking media item '{0}' as watched. Message: {1}", mediaItem.GetType(), ex.Message);
                }
            }
            else
            {
                GetLogger().Warn("FlagMover: The SetWatched action is not available for '{0}'. Already marked as watched?", mediaItem.GetType());
            }

            return(result);
        }
Пример #4
0
        public async Task <bool> MarkAsWatched(MediaItem mediaItem)
        {
            bool       result           = false;
            SetWatched setWatchedAction = new SetWatched();

            if (await setWatchedAction.IsAvailableAsync(mediaItem))
            {
                try
                {
                    var processResult = await setWatchedAction.ProcessAsync(mediaItem);

                    if (processResult.Success && processResult.Result != ContentDirectoryMessaging.MediaItemChangeType.None)
                    {
                        ContentDirectoryMessaging.SendMediaItemChangedMessage(mediaItem, processResult.Result);
                        GetLogger().Info("Marking media item '{0}' as watched", mediaItem.GetType());
                        result = true;
                    }
                }
                catch (Exception ex)
                {
                    GetLogger().Error("Marking media item '{0}' as watched failed:", mediaItem.GetType(), ex);
                    result = false;
                }
            }

            return(result);
        }
Пример #5
0
        public bool MarkAsWatched(MediaItem mediaItem)
        {
            bool       result           = false;
            SetWatched setWatchedAction = new SetWatched();

            if (setWatchedAction.IsAvailable(mediaItem))
            {
                try
                {
                    ContentDirectoryMessaging.MediaItemChangeType changeType;
                    if (setWatchedAction.Process(mediaItem, out changeType) && changeType != ContentDirectoryMessaging.MediaItemChangeType.None)
                    {
                        ContentDirectoryMessaging.SendMediaItemChangedMessage(mediaItem, changeType);
                        result = true;
                    }
                    else
                    {
                        GetLogger().Error("FlagMover: Marking media item '{0}' as watched failed:", mediaItem.GetType());
                    }
                }
                catch (Exception ex)
                {
                    GetLogger().Error("FlagMover: Exception occurred while marking media item '{0}' as watched. Message: {1}", mediaItem.GetType(), ex.Message);
                }
            }
            else
            {
                GetLogger().Warn("FlagMover: The SetWatched action is not available for '{0}'. Already marked as watched?", mediaItem.GetType());
            }

            return(result);
        }
Пример #6
0
        protected static void NotifyPlayback(MediaItem mediaItem, int playPercentage)
        {
            ISettingsManager      settingsManager = ServiceRegistration.Get <ISettingsManager>();
            PlayerManagerSettings settings        = settingsManager.Load <PlayerManagerSettings>();
            bool watched = playPercentage >= settings.WatchedPlayPercentage;

            if (watched)
            {
                playPercentage = 100;
            }

            IServerConnectionManager scm = ServiceRegistration.Get <IServerConnectionManager>();
            IContentDirectory        cd  = scm.ContentDirectory;

            // Server will update the PlayCount of MediaAspect in ML, this does not affect loaded items.
            if (cd != null)
            {
                cd.NotifyPlayback(mediaItem.MediaItemId, watched);
            }

            // Update loaded item also, so changes will be visible in GUI without reloading
            if (!mediaItem.UserData.ContainsKey(UserDataKeysKnown.KEY_PLAY_PERCENTAGE))
            {
                mediaItem.UserData.Add(UserDataKeysKnown.KEY_PLAY_PERCENTAGE, "0");
            }
            mediaItem.UserData[UserDataKeysKnown.KEY_PLAY_PERCENTAGE] = playPercentage.ToString();

            IUserManagement userProfileDataManagement = ServiceRegistration.Get <IUserManagement>();

            if (userProfileDataManagement.IsValidUser)
            {
                userProfileDataManagement.UserProfileDataManagement.SetUserMediaItemData(userProfileDataManagement.CurrentUser.ProfileId, mediaItem.MediaItemId,
                                                                                         UserDataKeysKnown.KEY_PLAY_PERCENTAGE, playPercentage.ToString());
            }

            if (watched)
            {
                // Update loaded item also, so changes will be visible in GUI without reloading
                int currentPlayCount;
                if (MediaItemAspect.TryGetAttribute(mediaItem.Aspects, MediaAspect.ATTR_PLAYCOUNT, 0, out currentPlayCount))
                {
                    MediaItemAspect.SetAttribute(mediaItem.Aspects, MediaAspect.ATTR_PLAYCOUNT, ++currentPlayCount);
                }

                if (!mediaItem.UserData.ContainsKey(UserDataKeysKnown.KEY_PLAY_COUNT))
                {
                    mediaItem.UserData.Add(UserDataKeysKnown.KEY_PLAY_COUNT, "0");
                }
                currentPlayCount = Convert.ToInt32(mediaItem.UserData[UserDataKeysKnown.KEY_PLAY_COUNT]);
                currentPlayCount++;
                mediaItem.UserData[UserDataKeysKnown.KEY_PLAY_COUNT] = currentPlayCount.ToString();

                if (userProfileDataManagement.IsValidUser)
                {
                    userProfileDataManagement.UserProfileDataManagement.SetUserMediaItemData(userProfileDataManagement.CurrentUser.ProfileId, mediaItem.MediaItemId,
                                                                                             UserDataKeysKnown.KEY_PLAY_COUNT, currentPlayCount.ToString());
                }
            }
            ContentDirectoryMessaging.SendMediaItemChangedMessage(mediaItem, ContentDirectoryMessaging.MediaItemChangeType.Updated);
        }
Пример #7
0
        protected static async Task NotifyPlayback(MediaItem mediaItem, int playPercentage, double playDuration)
        {
            ISettingsManager      settingsManager = ServiceRegistration.Get <ISettingsManager>();
            PlayerManagerSettings settings        = settingsManager.Load <PlayerManagerSettings>();
            bool watched = playPercentage >= settings.WatchedPlayPercentage;

            if (watched && mediaItem.IsLastPart)
            {
                playPercentage = 100;
            }
            else if (watched && !mediaItem.IsLastPart)
            {
                playPercentage = 50;
            }

            IServerConnectionManager scm = ServiceRegistration.Get <IServerConnectionManager>();
            IContentDirectory        cd  = scm.ContentDirectory;

            if (cd != null)
            {
                IUserManagement userProfileDataManagement = ServiceRegistration.Get <IUserManagement>();
                if (userProfileDataManagement.IsValidUser)
                {
                    bool updatePlayDate = (watched || playDuration >= MINIMUM_WATCHED_SEC || playPercentage >= MINIMUM_WATCHED_PERCENT);
                    await cd.NotifyUserPlaybackAsync(userProfileDataManagement.CurrentUser.ProfileId, mediaItem.MediaItemId, playPercentage, updatePlayDate);
                }
                else
                {
                    await cd.NotifyPlaybackAsync(mediaItem.MediaItemId, watched);
                }
            }

            // Update loaded item also, so changes will be visible in GUI without reloading
            if (!mediaItem.UserData.ContainsKey(UserDataKeysKnown.KEY_PLAY_PERCENTAGE))
            {
                mediaItem.UserData.Add(UserDataKeysKnown.KEY_PLAY_PERCENTAGE, "0");
            }
            mediaItem.UserData[UserDataKeysKnown.KEY_PLAY_PERCENTAGE] = UserDataKeysKnown.GetSortablePlayPercentageString(playPercentage);

            if (watched)
            {
                // Update loaded item also, so changes will be visible in GUI without reloading
                int currentPlayCount;
                if (MediaItemAspect.TryGetAttribute(mediaItem.Aspects, MediaAspect.ATTR_PLAYCOUNT, 0, out currentPlayCount))
                {
                    MediaItemAspect.SetAttribute(mediaItem.Aspects, MediaAspect.ATTR_PLAYCOUNT, ++currentPlayCount);
                }

                if (!mediaItem.UserData.ContainsKey(UserDataKeysKnown.KEY_PLAY_COUNT))
                {
                    mediaItem.UserData.Add(UserDataKeysKnown.KEY_PLAY_COUNT, UserDataKeysKnown.GetSortablePlayCountString(0));
                }
                currentPlayCount = Convert.ToInt32(mediaItem.UserData[UserDataKeysKnown.KEY_PLAY_COUNT]);
                currentPlayCount++;
                mediaItem.UserData[UserDataKeysKnown.KEY_PLAY_COUNT] = UserDataKeysKnown.GetSortablePlayCountString(currentPlayCount);
            }
            ContentDirectoryMessaging.SendMediaItemChangedMessage(mediaItem, ContentDirectoryMessaging.MediaItemChangeType.Updated);
        }
Пример #8
0
 /// <summary>
 /// This method maintains the content directory's last importing shares state and generates the appropriate content directory messages.
 /// </summary>
 void UpdateCurrentlyImportingShares(ICollection<Guid> currentlyImportingShares)
 {
   if (currentlyImportingShares == null)
     currentlyImportingShares = new List<Guid>();
   ICollection<Guid> oldImportingShares = _currentlyImportingSharesProxy;
   ICollection<Guid> newImportingShares = currentlyImportingShares;
   _currentlyImportingSharesProxy = newImportingShares;
   foreach (Guid importingShare in newImportingShares.Where(importingShare => !oldImportingShares.Contains(importingShare)))
     ContentDirectoryMessaging.SendShareImportMessage(ContentDirectoryMessaging.MessageType.ShareImportStarted, importingShare);
   foreach (Guid oldShare in oldImportingShares.Where(oldShare => !newImportingShares.Contains(oldShare)))
     ContentDirectoryMessaging.SendShareImportMessage(ContentDirectoryMessaging.MessageType.ShareImportCompleted, oldShare);
 }
 protected void InvokeAction(IMediaItemAction action, MediaItem mediaItem)
 {
     try
     {
         ContentDirectoryMessaging.MediaItemChangeType changeType;
         if (action.Process(mediaItem, out changeType) && changeType != ContentDirectoryMessaging.MediaItemChangeType.None)
         {
             ContentDirectoryMessaging.SendMediaItemChangedMessage(mediaItem, changeType);
         }
     }
     catch (Exception ex)
     {
         ServiceRegistration.Get <ILogger>().Error("Error executing MediaItemAction '{0}':", ex, action.GetType());
     }
 }
Пример #10
0
        private async Task InvokeInternal(IMediaItemAction action, MediaItem mediaItem)
        {
            try
            {
                var result = await action.ProcessAsync(mediaItem);

                if (result.Success && result.Result != ContentDirectoryMessaging.MediaItemChangeType.None)
                {
                    ContentDirectoryMessaging.SendMediaItemChangedMessage(mediaItem, result.Result);
                }
            }
            catch (Exception ex)
            {
                ServiceRegistration.Get <ILogger>().Error("Error executing MediaItemAction '{0}':", ex, action.GetType());
            }
        }
Пример #11
0
            public override async Task <bool> ProcessAsync(ListItem item)
            {
                IMediaItemListItem mediaItem = item as IMediaItemListItem;

                if (mediaItem != null)
                {
                    var result = await _action.ProcessAsync(mediaItem.MediaItem);

                    if (result.Success)
                    {
                        if (result.Result != ContentDirectoryMessaging.MediaItemChangeType.None)
                        {
                            ContentDirectoryMessaging.SendMediaItemChangedMessage(mediaItem.MediaItem, result.Result);
                        }
                        return(true);
                    }
                }
                return(false);
            }
Пример #12
0
        private static void NotifyPlayback(MediaItem mediaItem)
        {
            IServerConnectionManager scm = ServiceRegistration.Get <IServerConnectionManager>();
            IContentDirectory        cd  = scm.ContentDirectory;

            // Server will update the PlayCount of MediaAspect in ML, this does not affect loaded items.
            if (cd != null)
            {
                cd.NotifyPlayback(mediaItem.MediaItemId);
            }

            // Update loaded item also, so changes will be visible in GUI without reloading
            int currentPlayCount;

            if (MediaItemAspect.TryGetAttribute(mediaItem.Aspects, MediaAspect.ATTR_PLAYCOUNT, 0, out currentPlayCount))
            {
                MediaItemAspect.SetAttribute(mediaItem.Aspects, MediaAspect.ATTR_PLAYCOUNT, ++currentPlayCount);
                ContentDirectoryMessaging.SendMediaItemChangedMessage(mediaItem, ContentDirectoryMessaging.MediaItemChangeType.Updated);
            }
        }
Пример #13
0
 static void OnRegisteredSharesChangeCounterChanged()
 {
   ContentDirectoryMessaging.SendRegisteredSharesChangedMessage();
 }
Пример #14
0
 static void OnContentDirectoryMIATypeRegistrationsChanged()
 {
   ContentDirectoryMessaging.SendMIATypesChangedMessage();
 }
Пример #15
0
 static void OnContentDirectoryPlaylistsChanged()
 {
   ContentDirectoryMessaging.SendPlaylistsChangedMessage();
 }