private void HandleScrobble(IPlayerSlotController psc, bool starting) { try { IPlayerContext pc = PlayerContext.GetPlayerContext(psc); if (pc == null) { return; } bool removePsc = HandleTasks(psc, starting); AbstractScrobble scrobbleData; TraktScrobbleStates state; if (TryCreateScrobbleData(psc, pc, starting, out scrobbleData, out state)) { ServiceRegistration.Get <ILogger>().Debug("Trakt.tv: [{5}] {0}, Duration {1}, Percent {2}, PSC.Duration {3}, PSC.ResumePosition {4}", scrobbleData.Title, scrobbleData.Duration, scrobbleData.Progress, _progressUpdateWorks[psc].Duration, _progressUpdateWorks[psc].ResumePosition, state); TraktMovieScrobble movie = scrobbleData as TraktMovieScrobble; if (movie != null) { TraktAPI.ScrobbleMovieState(movie, state); } TraktEpisodeScrobble episode = scrobbleData as TraktEpisodeScrobble; if (episode != null) { TraktAPI.ScrobbleEpisodeState(episode, state); } } if (removePsc) { lock (_syncObj) _progressUpdateWorks.Remove(psc); } } catch (ThreadAbortException) { } catch (Exception ex) { ServiceRegistration.Get <ILogger>().Error("Trakt.tv: Exception while scrobbling", ex); } }