void _userDataManager_UserDataSaved(object sender, UserDataSaveEventArgs e) { if (e.SaveReason == UserDataSaveReason.PlaybackProgress) { return; } lock (_syncLock) { if (UpdateTimer == null) { UpdateTimer = new Timer(UpdateTimerCallback, null, UpdateDuration, Timeout.Infinite); } else { UpdateTimer.Change(UpdateDuration, Timeout.Infinite); } List <string> keys; if (!_changedKeys.TryGetValue(e.UserId, out keys)) { keys = new List <string>(); _changedKeys[e.UserId] = keys; } keys.Add(e.Key); } }
private void UserManager_UserDataSaved(object sender, UserDataSaveEventArgs e) { if (e.SaveReason != UserDataSaveReason.UpdateUserRating) { return; } if (!e.Item.IsFavoriteOrLiked(e.User)) { return; } var config = Plugin.Instance.Configuration; if (!config.UserPostsOptIn.Contains(e.User.Id)) { return; } var type = e.Item.GetType(); var item = type.Name == "Episode" ? LibraryManager.GetItemById(e.Item.Parent.Parent.InternalId) : e.Item; var message = $"{e.User.Name} likes the {type.Name}: {e.Item.Name} "; message += type.Name == "Episode" ? $" from the series {item.Name}" : ""; var data = new Payload { message = message, url = $"{WanAddress}/emby/Items/{item.InternalId}/Images/Primary?maxHeight=1108&maxWidth=800&quality=90", endpoint = "me/photos" }; FacebookClient.PostToPage(data, Logger, HttpClient, config); }
void _userDataManager_UserDataSaved(object sender, UserDataSaveEventArgs e) { if (e.SaveReason == UserDataSaveReason.PlaybackFinished || e.SaveReason == UserDataSaveReason.TogglePlayed || e.SaveReason == UserDataSaveReason.UpdateUserRating) { SaveMetadataForItem(e.Item, ItemUpdateType.MetadataDownload); } }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void _userDataManager_UserDataSaved(object sender, UserDataSaveEventArgs e) { // ignore change events for any reason other than manually toggling played. if (e.SaveReason != UserDataSaveReason.TogglePlayed) { return; } var baseItem = e.Item as BaseItem; if (baseItem != null) { // determine if user has trakt credentials var traktUser = UserHelper.GetTraktUser(e.UserId.ToString()); // Can't progress if (traktUser == null || baseItem.Path == null || baseItem.LocationType == LocationType.Virtual || (!(baseItem is Movie) && !(baseItem is Episode))) { return; } foreach (var s in traktUser.TraktLocations.Where(s => baseItem.Path.StartsWith(s + Path.DirectorySeparatorChar))) { // We have a user and the item is in a trakt monitored location. _userDataManagerEventsHelper.ProcessUserDataSaveEventArgs(e, traktUser); } } }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void _userDataManager_UserDataSaved(object sender, UserDataSaveEventArgs e) { // ignore change events for any reason other than manually toggling played. if (e.SaveReason != UserDataSaveReason.TogglePlayed) { return; } var baseItem = e.Item as BaseItem; if (baseItem != null) { // determine if user has trakt credentials var traktUser = UserHelper.GetTraktUser(e.UserId.ToString()); // Can't progress if (traktUser == null || !_traktApi.CanSync(baseItem, traktUser)) { return; } // We have a user and the item is in a trakt monitored location. _userDataManagerEventsHelper.ProcessUserDataSaveEventArgs(e, traktUser); } }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnUserDataSaved(object sender, UserDataSaveEventArgs e) { // ignore change events for any reason other than manually toggling played. if (e.SaveReason != UserDataSaveReason.TogglePlayed) { return; } if (e.Item is BaseItem baseItem) { // determine if user has trakt credentials var traktUser = UserHelper.GetTraktUser(e.UserId); // Can't progress if (traktUser == null || !_traktApi.CanSync(baseItem, traktUser)) { return; } if (!traktUser.PostSetWatched && !traktUser.PostSetUnwatched) { // User doesn't want to post any status changes at all. return; } // We have a user who wants to post updates and the item is in a trakt monitored location. _userDataManagerEventsHelper.ProcessUserDataSaveEventArgs(e, traktUser); } }
private void OnUserDataSaved(object?sender, UserDataSaveEventArgs e) { if (e.SaveReason == UserDataSaveReason.PlaybackFinished || e.SaveReason == UserDataSaveReason.TogglePlayed || e.SaveReason == UserDataSaveReason.UpdateUserRating) { if (!string.IsNullOrWhiteSpace(_config.GetNfoConfiguration().UserId)) { _ = SaveMetadataForItemAsync(e.Item, ItemUpdateType.MetadataDownload); } } }
void UserDataSaved(object sender, UserDataSaveEventArgs e) { if (e.SaveReason == UserDataSaveReason.PlaybackProgress) { return; } var message = $"InfuseSync received user data for item '{e.Item.Name}' of type '{e.Item.GetClientTypeName()}' Guid '{e.Item.Id}'"; #if EMBY message += $" ItemID '{e.Item.GetClientId()}'"; #endif _logger.LogDebug(message); lock (_syncLock) { if (e.Item != null) { if (!Shared.ShouldSyncUpdatedItem(e.Item)) { return; } if (UpdateTimer == null) { UpdateTimer = new Timer( TimerCallback, null, UpdateDuration, Timeout.Infinite ); } else { UpdateTimer.Change(UpdateDuration, Timeout.Infinite); } #if EMBY var userId = e.User.Id; #else var userId = e.UserId; #endif if (!_changedItems.TryGetValue(userId, out var keys)) { keys = new List <BaseItem>(); _changedItems[userId] = keys; } keys.Add(e.Item); _logger.LogDebug($"InfuseSync will save user data for item {e.Item.Id} user {userId}"); } } }
void _userDataManager_UserDataSaved(object sender, UserDataSaveEventArgs e) { if (e.SaveReason == UserDataSaveReason.PlaybackFinished || e.SaveReason == UserDataSaveReason.TogglePlayed || e.SaveReason == UserDataSaveReason.UpdateUserRating) { var item = e.Item as BaseItem; if (!string.IsNullOrWhiteSpace(_config.GetNfoConfiguration().UserId)) { SaveMetadataForItem(item, ItemUpdateType.MetadataEdit); } } }
void _userDataManager_UserDataSaved(object sender, UserDataSaveEventArgs e) { if (e.SaveReason == UserDataSaveReason.PlaybackProgress) { return; } lock (_syncLock) { var testItem = e.Item; if (testItem != null) { if (!FilterItem(testItem, out var type)) { return; } if (UpdateTimer == null) { UpdateTimer = new Timer(UpdateTimerCallback, null, UpdateDuration, Timeout.Infinite); } else { UpdateTimer.Change(UpdateDuration, Timeout.Infinite); } if (!_changedItems.TryGetValue(e.UserId, out var keys)) { keys = new List <BaseItem>(); _changedItems[e.UserId] = keys; } keys.Add(e.Item); // Go up one level for indicators _itemRef.Add(new LibItem { Id = testItem.Id, ItemType = type, }); var parent = testItem.Parent; if (parent != null) { keys.Add(parent); } } } }
private void _userDataManager_UserDataSaved(object sender, UserDataSaveEventArgs e) { if (e.SaveReason == UserDataSaveReason.PlaybackFinished || e.SaveReason == UserDataSaveReason.UpdateUserRating || e.SaveReason == UserDataSaveReason.TogglePlayed) { if (Const.ListenForChangeItemTypes.Contains(e.Item.GetType())) { e.Item.IsFavorite = e.UserData.IsFavorite; e.Item.PlayCount = e.UserData.PlayCount; e.Item.LastPlayedDate = e.UserData.LastPlayedDate; e.Item.Played = e.UserData.Played; e.Item.Rating = e.UserData.Rating; _updatedItemsQueue.Enqueue(e.Item); } } }
public async Task AddEvent(UserConfig user, UserDataSaveEventArgs args) { if (args.Item is not Episode episode) { return; } var episodes = _episodes.FirstOrDefault(e => e.User.Equals(user)); if (episodes == default(MarkedEpisodes)) { episodes = new MarkedEpisodes { User = user }; _episodes.Add(episodes); } if (!episodes.CurrentSeriesId.Equals(episode.Series.Id)) { if (episodes.CurrentSeriesId != default) { await SendData(episodes); } episodes.CurrentSeriesId = episode.Series.Id; } if (args.UserData.Played) { episodes.SeenEpisodes.Add(episode); if (episodes.UnSeenEpisodes.Contains(episode)) { episodes.UnSeenEpisodes.Remove(episode); } } else { episodes.UnSeenEpisodes.Add(episode); if (episodes.SeenEpisodes.Contains(episode)) { episodes.SeenEpisodes.Remove(episode); } } Postpone(); }
void OnUserDataManagerUserDataSaved(object sender, UserDataSaveEventArgs e) { if (e.SaveReason == UserDataSaveReason.PlaybackProgress) { return; } lock (_syncLock) { if (_updateTimer == null) { _updateTimer = new Timer( UpdateTimerCallback, null, UpdateDuration, Timeout.Infinite); } else { _updateTimer.Change(UpdateDuration, Timeout.Infinite); } if (!_changedItems.TryGetValue(e.UserId, out List <BaseItem> keys)) { keys = new List <BaseItem>(); _changedItems[e.UserId] = keys; } keys.Add(e.Item); var baseItem = e.Item; // Go up one level for indicators if (baseItem != null) { var parent = baseItem.GetOwner() ?? baseItem.GetParent(); if (parent != null) { keys.Add(parent); } } } }
void _userDataManager_UserDataSaved(object sender, UserDataSaveEventArgs e) { if (e.SaveReason == UserDataSaveReason.PlaybackProgress) { return; } lock (_syncLock) { if (UpdateTimer == null) { UpdateTimer = _timerFactory.Create(UpdateTimerCallback, null, UpdateDuration, Timeout.Infinite); } else { UpdateTimer.Change(UpdateDuration, Timeout.Infinite); } List <IHasUserData> keys; if (!_changedItems.TryGetValue(e.UserId, out keys)) { keys = new List <IHasUserData>(); _changedItems[e.UserId] = keys; } keys.Add(e.Item); var baseItem = e.Item as BaseItem; // Go up one level for indicators if (baseItem != null) { var parent = baseItem.GetParent(); if (parent != null) { keys.Add(parent); } } } }
private async void OnUserDataSaved(object sender, UserDataSaveEventArgs e) { HookEvent evt; switch (e.SaveReason) { case UserDataSaveReason.TogglePlayed: evt = e.UserData.Played ? HookEvent.MarkPlayed : HookEvent.MarkUnplayed; break; case UserDataSaveReason.UpdateUserRating: evt = HookEvent.Rate; break; default: return; } var user = _userManager.GetUserById(e.UserId); await PlaybackEvent(evt, e.Item, null, user); }
void _userDataManager_UserDataSaved(object sender, UserDataSaveEventArgs e) { var userId = _config.GetNfoConfiguration().UserId; if (string.IsNullOrWhiteSpace(userId)) { return; } if (e.SaveReason == UserDataSaveReason.PlaybackFinished || e.SaveReason == UserDataSaveReason.TogglePlayed) { var item = e.Item as BaseItem; if (item != null) { if (!item.IsFolder && !(item is IItemByName)) { SaveMetadataForItem(item, ItemUpdateType.MetadataEdit); } } } }
private async void UserDataSavedHandler(object?sender, UserDataSaveEventArgs eventArgs) { try { if (eventArgs.Item is null) { return; } if (eventArgs.Item.IsThemeMedia) { // Don't report theme song or local trailer playback. return; } var user = _userManager.GetUserById(eventArgs.UserId); if (user is null) { return; } var dataObject = DataObjectHelpers .GetBaseDataObject(_applicationHost, NotificationType.UserDataSaved) .AddBaseItemData(eventArgs.Item) .AddUserItemData(eventArgs.UserData); dataObject["SaveReason"] = eventArgs.SaveReason.ToString(); dataObject["NotificationUsername"] = user.Username; dataObject["UserId"] = user.Id; await _webhookSender.SendNotification(NotificationType.UserDataSaved, dataObject, eventArgs.Item.GetType()) .ConfigureAwait(false); } catch (Exception ex) { _logger.LogWarning(ex, "Unable to send notification"); } }
/// <summary> /// Let last fm know when a user favourites or unfavourites a track /// </summary> private async void UserDataSaved(object sender, UserDataSaveEventArgs e) { //We only care about audio if (!(e.Item is Audio)) { return; } //We also only care about User rating changes if (!e.SaveReason.Equals(UserDataSaveReason.UpdateUserRating)) { return; } var lastfmUser = UserHelpers.GetUser(e.UserId); if (lastfmUser == null) { Plugin.Logger.Debug("Could not find user"); return; } if (string.IsNullOrWhiteSpace(lastfmUser.SessionKey)) { Plugin.Logger.Info("No session key present, aborting"); return; } var item = (Audio)e.Item; //Dont do if syncing if (Plugin.Syncing) { return; } await _lastfmApi.TrackLove(item, lastfmUser, e.UserData.IsFavorite); }
/// <summary> /// Let last fm know when a user favourites or unfavourites a track /// </summary> async void UserDataSaved(object sender, UserDataSaveEventArgs e) { // We only care about audio if (!(e.Item is Audio)) { return; } // We also only care about User rating changes if (!e.SaveReason.Equals(UserDataSaveReason.UpdateUserRating)) { return; } var lastfmUser = Utils.UserHelpers.GetUser(e.UserId); if (lastfmUser == null) { _logger.LogDebug("Could not find user"); return; } if (string.IsNullOrWhiteSpace(lastfmUser.SessionKey)) { _logger.LogInformation("No session key present, aborting"); return; } var item = e.Item as Audio; // Dont do if syncing if (Plugin.Syncing) { return; } await _apiClient.LoveTrack(item, lastfmUser, e.UserData.IsFavorite).ConfigureAwait(false); }
/// <summary> /// /// </summary> /// <param name="userDataSaveEventArgs"></param> /// <param name="traktUser"></param> public async Task ProcessUserDataSaveEventArgs(UserDataSaveEventArgs userDataSaveEventArgs, TraktUser traktUser, CancellationToken cancellationToken) { var userPackage = _userDataPackages.FirstOrDefault(e => e.TraktUser.Equals(traktUser)); if (userPackage == null) { userPackage = new UserDataPackage { TraktUser = traktUser }; _userDataPackages.Add(userPackage); } if (_timer == null) { _timer = new Timer(OnTimerCallback, null, TimeSpan.FromMilliseconds(5000), Timeout.InfiniteTimeSpan); } else { _timer.Change(TimeSpan.FromMilliseconds(5000), Timeout.InfiniteTimeSpan); } var movie = userDataSaveEventArgs.Item as Movie; if (movie != null) { if (userDataSaveEventArgs.UserData.Played) { userPackage.SeenMovies.Add(movie); if (userPackage.SeenMovies.Count >= 100) { await _traktApi.SendMoviePlaystateUpdates(userPackage.SeenMovies, userPackage.TraktUser, true, true, cancellationToken).ConfigureAwait(false); userPackage.SeenMovies = new List <Movie>(); } await MovieStatusUpdate(movie, userPackage.TraktUser, cancellationToken).ConfigureAwait(false); } else { userPackage.UnSeenMovies.Add(movie); if (userPackage.UnSeenMovies.Count >= 100) { await _traktApi.SendMoviePlaystateUpdates(userPackage.UnSeenMovies, userPackage.TraktUser, true, false, cancellationToken).ConfigureAwait(false); userPackage.UnSeenMovies = new List <Movie>(); } } return; } var episode = userDataSaveEventArgs.Item as Episode; if (episode == null) { return; } // If it's not the series we're currently storing, upload our episodes and reset the arrays if (!userPackage.CurrentSeriesId.Equals(episode.Series.Id)) { if (userPackage.SeenEpisodes.Any()) { await _traktApi.SendEpisodePlaystateUpdates(userPackage.SeenEpisodes, userPackage.TraktUser, true, true, cancellationToken).ConfigureAwait(false); userPackage.SeenEpisodes = new List <Episode>(); } if (userPackage.UnSeenEpisodes.Any()) { await _traktApi.SendEpisodePlaystateUpdates(userPackage.UnSeenEpisodes, userPackage.TraktUser, true, false, cancellationToken).ConfigureAwait(false); userPackage.UnSeenEpisodes = new List <Episode>(); } userPackage.CurrentSeriesId = episode.Series.Id; } if (userDataSaveEventArgs.UserData.Played) { userPackage.SeenEpisodes.Add(episode); await EpisodeStatusUpdate(episode, traktUser, cancellationToken).ConfigureAwait(false); } else { userPackage.UnSeenEpisodes.Add(episode); } }
/// <summary> /// /// </summary> /// <param name="userDataSaveEventArgs"></param> /// <param name="traktUser"></param> public void ProcessUserDataSaveEventArgs(UserDataSaveEventArgs userDataSaveEventArgs, TraktUser traktUser) { var userPackage = _userDataPackages.FirstOrDefault(e => e.TraktUser.Equals(traktUser)); if (userPackage == null) { userPackage = new UserDataPackage { TraktUser = traktUser }; _userDataPackages.Add(userPackage); } if (_timer == null) { _timer = new Timer(5000); _timer.Elapsed += TimerElapsed; } if (_timer.Enabled) { _timer.Stop(); _timer.Start(); } else { _timer.Start(); } var movie = userDataSaveEventArgs.Item as Movie; if (movie != null) { if (userDataSaveEventArgs.UserData.Played) { userPackage.SeenMovies.Add(movie); if (userPackage.SeenMovies.Count >= 100) { _traktApi.SendMoviePlaystateUpdates(userPackage.SeenMovies, userPackage.TraktUser, true, CancellationToken.None).ConfigureAwait(false); userPackage.SeenMovies = new List <Movie>(); } } else { userPackage.UnSeenMovies.Add(movie); if (userPackage.UnSeenMovies.Count >= 100) { _traktApi.SendMoviePlaystateUpdates(userPackage.UnSeenMovies, userPackage.TraktUser, false, CancellationToken.None).ConfigureAwait(false); userPackage.UnSeenMovies = new List <Movie>(); } } return; } var episode = userDataSaveEventArgs.Item as Episode; if (episode == null) { return; } // If it's not the series we're currently storing, upload our episodes and reset the arrays if (!userPackage.CurrentSeriesId.Equals(episode.Series.Id)) { if (userPackage.SeenEpisodes.Any()) { _traktApi.SendEpisodePlaystateUpdates(userPackage.SeenEpisodes, userPackage.TraktUser, true, CancellationToken.None).ConfigureAwait(false); userPackage.SeenEpisodes = new List <Episode>(); } if (userPackage.UnSeenEpisodes.Any()) { _traktApi.SendEpisodePlaystateUpdates(userPackage.UnSeenEpisodes, userPackage.TraktUser, false, CancellationToken.None).ConfigureAwait(false); userPackage.SeenEpisodes = new List <Episode>(); } userPackage.CurrentSeriesId = episode.Series.Id; } if (userDataSaveEventArgs.UserData.Played) { userPackage.SeenEpisodes.Add(episode); } else { userPackage.UnSeenEpisodes.Add(episode); } }