public void TestWatchedIsFiredCorrectly() { var stat = new PlaybackStatus(); stat.WasPlayedChanged += new EventHandler<EventArgs>(stat_OnWatchedChanged); played = stat.WasPlayed; stat.PlayCount = 1; Assert.IsTrue(played); stat.PlayCount = 0; Assert.IsFalse(played); }
public void TestPersistance() { var stat = new PlaybackStatus(); stat.LastPlayed = DateTime.Now; stat.PlayCount = 99; stat.PlaylistPosition = 2; stat.PositionTicks = 1000; stat.Id = Guid.NewGuid(); stat.Save(); var stat2 = Kernel.Instance.ItemRepository.RetrievePlayState(stat.Id); Assert.AreEqual(stat.Id, stat2.Id); Assert.AreEqual(stat.LastPlayed, stat2.LastPlayed); Assert.AreEqual(stat.PlayCount, stat2.PlayCount); Assert.AreEqual(stat.PlaylistPosition, stat2.PlaylistPosition); Assert.AreEqual(stat.PositionTicks, stat2.PositionTicks); }
public void TestPlayStateStorage() { PlaybackStatus state = new PlaybackStatus(); state.Id = Guid.NewGuid(); state.LastPlayed = DateTime.Now; state.PlayCount = 10; state.PlaylistPosition = 1; state.LastPlayed = DateTime.Now; SqliteItemRepository repository = GetRepo(); repository.SavePlayState(state); repository.FlushWriter(); var clone = repository.RetrievePlayState(state.Id); Assert.AreEqual(state.Id, clone.Id); Assert.AreEqual(state.LastPlayed, clone.LastPlayed); Assert.AreEqual(state.PlayCount, clone.PlayCount); Assert.AreEqual(state.PlaylistPosition, clone.PlaylistPosition); Assert.AreEqual(state.LastPlayed, clone.LastPlayed); }
public void SavePlayState(PlaybackStatus playState) { playbackStatus[playState.Id] = playState; }
public void Play(PlaybackStatus playstate, bool resume) { this.PlayState = playstate; this.Prepare(resume); if (this is PlayableCollection && (this.PlayableItems == null || this.PlayableItems.Count() < 1)) { Microsoft.MediaCenter.MediaCenterEnvironment ev = Microsoft.MediaCenter.Hosting.AddInHost.Current.MediaCenterEnvironment; ev.Dialog(Application.CurrentInstance.StringData("NoContentDial"), Application.CurrentInstance.StringData("Playstr"), Microsoft.MediaCenter.DialogButtons.Ok, 500, true); } else { PlayInternal(resume); } }
internal void EnsurePlayStateChangesBoundToUI() { if (playstate == null) { Media media = baseItem as Media; if (media != null) { playstate = media.PlaybackStatus; // if we want any chance to reclaim memory we are going to have to use // weak event handlers playstate.WasPlayedChanged += new EventHandler<EventArgs>(PlaybackStatusPlayedChanged); PlaybackStatusPlayedChanged(this, null); } } }
public void ResetPlayState() { //this will force it to re-load playstate = null; }
/// <summary> /// All we do now is check in with the server and let it figure everything else out /// </summary> public void UpdatePlayState(Media media, PlaybackStatus playstate, bool isPaused, bool saveToDataStore) { if (saveToDataStore) { ReportPlaybackProgress(media.ApiId, playstate.PositionTicks, isPaused, currentPlaybackController.IsStreaming); } }
/// <summary> /// All we do now is check in with the server and let it figure everything else out /// </summary> public void UpdatePlayState(Media media, PlaybackStatus playstate, bool isPaused, bool saveToDataStore) { if (saveToDataStore) { ReportPlaybackProgress(media.ApiId, playstate.PositionTicks, isPaused); } }
public PlaybackStatus Create(Guid id) { PlaybackStatus mine = new PlaybackStatus(); mine.Id = id; return mine; }
public void SavePlayState(PlaybackStatus playState) { }
/// <summary> /// This is a helper to update Playstate for an item. /// It honors all of the various resume options within configuration. /// Play count will be incremented if the last played date doesn't match what's currently in the object /// </summary> public void UpdatePlayState(Media media, PlaybackStatus playstate, int playlistPosition, long positionTicks, long? duration, DateTime datePlayed, bool saveToDataStore) { // Increment play count if dates don't match bool incrementPlayCount = !playstate.LastPlayed.Equals(datePlayed); // The player didn't report the duration, see if we have it in metadata if ((!duration.HasValue || duration == 0) && media.Files.Count() == 1) { // We need duration to pertain only to one file // So if there are multiple files don't bother with this // since we have no way of breaking it down duration = TimeSpan.FromMinutes(media.RunTime).Ticks; } // If we know the duration then enforce MinResumePct, MaxResumePct and MinResumeDuration if (duration.HasValue && duration > 0) { // Enforce MinResumePct/MaxResumePct if (positionTicks > 0) { decimal pctIn = Decimal.Divide(positionTicks, duration.Value) * 100; // Don't track in very beginning if (pctIn < Config.Instance.MinResumePct) { positionTicks = 0; if (playlistPosition == 0) { // Assume we're at the very beginning so don't even mark it watched. incrementPlayCount = false; } } // If we're at the end, assume completed if (pctIn > Config.Instance.MaxResumePct || positionTicks >= duration) { positionTicks = 0; // Either advance to the next playlist position, or reset it back to 0 if (playlistPosition < (media.Files.Count() - 1)) { playlistPosition++; } else { playlistPosition = 0; } } } // Enforce MinResumeDuration if ((duration / TimeSpan.TicksPerMinute) < Config.Instance.MinResumeDuration) { positionTicks = 0; } } // If resume is disabled reset positions to 0 if (!MediaBrowser.Library.Kernel.Instance.ConfigData.EnableResumeSupport) { positionTicks = 0; playlistPosition = 0; } playstate.PositionTicks = positionTicks; playstate.PlaylistPosition = playlistPosition; if (incrementPlayCount) { playstate.LastPlayed = datePlayed; playstate.PlayCount++; } if (saveToDataStore) { string sDuration = duration.HasValue ? (TimeSpan.FromTicks(duration.Value).ToString()) : "0"; //Logger.ReportVerbose("Playstate saved for {0} at {1}, duration: {2}, playlist position: {3}", media.Name, TimeSpan.FromTicks(positionTicks), sDuration, playlistPosition); Kernel.Instance.SavePlayState(media, playstate); } }
public void Play(PlaybackStatus playstate, bool resume) { this.PlayState = playstate; this.Prepare(resume); this.PlayInternal(resume); }