예제 #1
0
 public async void PlaybackEnded(PlaybackEndedEvent data)
 {
     await Task.Run(() => ProccesPlaybackEnded(data));
 }
예제 #2
0
        async Task ProccesPlaybackEnded(PlaybackEndedEvent data)
        {
            try
            {
                if (data.Position < 3)
                {
                    return;
                }
                var song = Database.Main.GetObject <Song, TempSong>(data.SongId);
                if (song == null)
                {
                    return;
                }
                if (!string.IsNullOrWhiteSpace(song?.Id))
                {
                    song.LastPlayed = (long)(DateTime.Now - new System.DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds;
                    song.PlayedCount++;
                    Database.Main.Update(song);
                }
                var track = Database.Main.GetObject <Track, TempTrack>(data.TrackId);

                if (track == null)
                {
                    track = await MusicManager.Shared.GetTrack(data.SongId);

                    if (track == null)
                    {
                        LogManager.Shared.Report(new Exception("Null track during Record Track. This should not happen!!!"));
                        return;
                    }
                    data.TrackId = track.Id;
                }
                track.PlayCount++;
                Database.Main.Update(track);
                data.Duration    = track.Duration;
                data.ServiceType = track.ServiceType;

                LogManager.Shared.LogPlay(song);
                Task <bool>         lastFmTask = null;
                Task <bool>         recordPlayTask;
                List <Task <bool> > tasks = new List <Task <bool> >();
                if (Settings.LastFmEnabled)
                {
                    tasks.Add(lastFmTask = SubmitScrobbleToLastFm(song, data.Position, data.Duration));
                }
                if (Settings.TwitterEnabled)
                {
                    SubmitScrobbleToTwitter(song);
                }
                tasks.Add(recordPlayTask = MusicManager.Shared.RecordPlayback(data));
                await Task.WhenAll(tasks);

                data.Scrobbled = lastFmTask?.Result ?? false;
                data.Submitted = recordPlayTask?.Result ?? false;
                if (!data.Submitted || (!data.Scrobbled) && Settings.LastFmEnabled)
                {
                    data.Save();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
예제 #3
0
 public override async Task <bool> RecordPlayack(PlaybackEndedEvent data)
 {
     //App.ShowNotImplmented();
     return(true);
 }