Пример #1
0
 public static void BroadcastTrackIfNeeded(BackgroundAudioPlayer player, List <AudioObj> playlist = null, PlaybackSettings settings = null, bool allowCache = false, bool bypassChecks = false)
 {
     try
     {
         if (!bypassChecks && (player.PlayerState != Microsoft.Phone.BackgroundAudio.PlayState.Playing || (DateTime.Now - AudioTrackHelper._lastTimeBroadcastAttempt).TotalSeconds < 3.0))
         {
             return;
         }
         AudioTrackHelper._lastTimeBroadcastAttempt = DateTime.Now;
         if (settings == null)
         {
             settings = PlaylistManager.ReadPlaybackSettings(allowCache);
             if (!settings.Broadcast)
             {
                 return;
             }
         }
         AudioTrack track = player.Track;
         if (track == null || track.GetTagId() == null)
         {
             return;
         }
         AudioTrackHelper.EnsureAppGlobalStateInitialized();
         AudioService.Instance.StatusSet("", track.GetTagId(), (Action <BackendResult <long, ResultCode> >)(res => {}));
     }
     catch (Exception ex)
     {
         Logger.Instance.Error("Broadcast track failed", ex);
     }
 }
Пример #2
0
 public static void RefetchTrack(AudioTrack track, Action <AudioTrack> callback)
 {
     if (track != null && track.Source != null)
     {
         Uri currentSource = track.Source;
         AudioTrackHelper.EnsureAppGlobalStateInitialized();
         AudioService  instance = AudioService.Instance;
         List <string> ids      = new List <string>();
         ids.Add(track.GetTagId());
         Action <BackendResult <List <AudioObj>, ResultCode> > callback1 = (Action <BackendResult <List <AudioObj>, ResultCode> >)(res =>
         {
             if (res.ResultCode == ResultCode.Succeeded && res.ResultData != null && (res.ResultData.Count > 0 && currentSource.OriginalString != res.ResultData[0].url))
             {
                 callback(AudioTrackHelper.CreateTrack(res.ResultData[0]));
             }
             else
             {
                 callback(null);
             }
         });
         instance.GetAudio(ids, callback1);
     }
     else
     {
         callback(null);
     }
 }
Пример #3
0
 private void RefetchTrack(AudioTrack track, Action <AudioTrack> callback)
 {
     if (track != null && track.Source != null)
     {
         Uri           currentSource = track.Source;
         AudioService  instance      = AudioService.Instance;
         List <string> ids           = new List <string>();
         ids.Add(track.GetTagId());
         Action <BackendResult <List <AudioObj>, ResultCode> > callback1 = (Action <BackendResult <List <AudioObj>, ResultCode> >)(res =>
         {
             if (res.ResultCode == ResultCode.Succeeded && res.ResultData != null && (res.ResultData.Count > 0 && currentSource.OriginalString != res.ResultData[0].url))
             {
                 Execute.ExecuteOnUIThread((Action)(() => callback(AudioTrackHelper.CreateTrack(res.ResultData[0]))));
             }
             else
             {
                 //Action closure_0 = null;
                 Execute.ExecuteOnUIThread(/*closure_0 ??*/ (/*closure_0 =*/ (Action)(() => callback(null))));
             }
         });
         instance.GetAudio(ids, callback1);
     }
     else
     {
         callback(null);
     }
 }
Пример #4
0
        public void Handle(AudioTrackEdited message)
        {
            AudioObj fromBackgroundAudio = this.GetCurrentTrackFromBackgroundAudio();

            if (fromBackgroundAudio != null && message.OwnerId == fromBackgroundAudio.owner_id && message.Id == fromBackgroundAudio.id)
            {
                fromBackgroundAudio.artist = message.Artist;
                fromBackgroundAudio.title  = message.Title;
            }
            AudioTrack track     = BGAudioPlayerWrapper.Instance.Track;
            long?      nullable1 = track != null ? new long?(track.GetTagOwnerId()) : new long?();
            string     str       = track != null?track.GetTagId() : null;

            if (str != null && ((IEnumerable <char>)str).Contains <char>('_'))
            {
                str = str.Substring(str.IndexOf('_') + 1);
            }
            if (track != null)
            {
                long?nullable2      = nullable1;
                long valueOrDefault = nullable2.GetValueOrDefault();
                if ((message.OwnerId == valueOrDefault ? (nullable2.HasValue ? 1 : 0) : 0) != 0 && message.Id.ToString() == str)
                {
                    track.BeginEdit();
                    track.Artist = message.Artist;
                    track.Title  = message.Title;
                    track.EndEdit();
                }
            }
            this.NotifyPropertyChanged <string>((Expression <Func <string> >)(() => this.ArtistName));
            this.NotifyPropertyChanged <string>((Expression <Func <string> >)(() => this.TrackName));
            this.NotifyPropertyChanged <string>((Expression <Func <string> >)(() => this.CurrentTrackStr));
        }
Пример #5
0
        private void FetchArtwork()
        {
            AudioTrack track1 = BGAudioPlayerWrapper.Instance.Track;

            if (track1 == null)
            {
                return;
            }
            string tag = track1.GetTagId();

            if (this._fetchingArtworkForTrackid == tag)
            {
                return;
            }
            this._fetchingArtworkForTrackid = tag;
            AudioService.Instance.GetAlbumArtwork(track1.Artist + " " + track1.Title, (Action <BackendResult <AlbumArtwork, ResultCode> >)(res =>
            {
                this._fetchingArtworkForTrackid = "";
                if (res.ResultCode != ResultCode.Succeeded)
                {
                    return;
                }
                Execute.ExecuteOnUIThread((Action)(() =>
                {
                    AudioTrack track2 = BGAudioPlayerWrapper.Instance.Track;
                    if (track2 == null || !(track2.GetTagId() == tag))
                    {
                        return;
                    }
                    this._trackIdOfArtwork = tag;
                    this._artwork = res.ResultData.ImageUri;
                    this.NotifyPropertyChanged <string>((Expression <Func <string> >)(() => this.Artwork));
                }));
            }));
        }
Пример #6
0
 public static long GetTagOwnerId(this AudioTrack track)
 {
     return(long.Parse(track.GetTagId().Split('_')[0]));
 }
Пример #7
0
 private static bool AreDifferentTracks(AudioTrack track, AudioTrack previousTrack)
 {
     return((track != null || previousTrack != null) && (track != null && previousTrack == null || track == null && previousTrack != null || !(track.GetTagId() == previousTrack.GetTagId())));
 }
Пример #8
0
        public static AudioObj GetNextAudio(BackgroundAudioPlayer player, bool next, out bool startedNewCycle, PlaybackSettings settings = null, bool allowCache = false)
        {
            startedNewCycle = false;
            Playlist        playlist = PlaylistManager.LoadTracksFromIsolatedStorage(allowCache);
            List <AudioObj> tracks   = playlist.Tracks;

            if (tracks.Count == 1)
            {
                startedNewCycle = true;
            }
            if (settings == null)
            {
                settings = PlaylistManager.ReadPlaybackSettings(allowCache);
            }
            tracks.FirstOrDefault <AudioObj>();
            int        num1  = 0;
            AudioTrack track = player.Track;

            if (track != null)
            {
                AudioObj audioObj = tracks.FirstOrDefault <AudioObj>((Func <AudioObj, bool>)(t => t.UniqueId == track.GetTagId()));
                num1 = tracks.IndexOf(audioObj);
                if (settings.Shuffle)
                {
                    num1 = playlist.ShuffledIndexes.IndexOf(num1);
                }
            }
            int num2  = num1;
            int index = !next ? num2 - 1 : num2 + 1;

            if (index < 0)
            {
                startedNewCycle = true;
                index           = tracks.Count <AudioObj>() - 1;
            }
            if (index >= tracks.Count)
            {
                startedNewCycle = true;
                index           = 0;
            }
            if (tracks.Count <= 0 || index >= tracks.Count)
            {
                return(null);
            }
            if (settings.Shuffle)
            {
                index = playlist.ShuffledIndexes[index];
            }
            return(tracks[index]);
        }
Пример #9
0
        private AudioObj GetCurrentTrackFromBackgroundAudio()
        {
            if (this._current != null)
            {
                return(this._current);
            }
            List <AudioObj> tracks = PlaylistManager.LoadTracksFromIsolatedStorage(true).Tracks;
            AudioTrack      bTrack = BGAudioPlayerWrapper.Instance.Track;

            if (bTrack == null)
            {
                return((AudioObj)null);
            }
            return(tracks.FirstOrDefault <AudioObj>((Func <AudioObj, bool>)(t => t.UniqueId == bTrack.GetTagId())));
        }
Пример #10
0
 public void AddTrack()
 {
     if (this._addingTrack)
     {
         return;
     }
     this._addingTrack = true;
     this.NotifyPropertyChanged <double>((Expression <Func <double> >)(() => this.CanAddOpacity));
     try
     {
         List <AudioObj> tracks = PlaylistManager.LoadTracksFromIsolatedStorage(true).Tracks;
         AudioTrack      bTrack = BGAudioPlayerWrapper.Instance.Track;
         if (bTrack == null)
         {
             return;
         }
         AudioObj current = tracks.FirstOrDefault <AudioObj>((Func <AudioObj, bool>)(t => t.UniqueId == bTrack.GetTagId()));
         this.SetInProgress(true, "");
         AudioService.Instance.AddAudio(current.owner_id, current.aid, (Action <BackendResult <long, ResultCode> >)(res =>
         {
             this.SetInProgress(false, "");
             this._addingTrack = false;
             this.NotifyPropertyChanged <double>((Expression <Func <double> >)(() => this.CanAddOpacity));
             if (res.ResultCode != ResultCode.Succeeded)
             {
                 return;
             }
             AudioPlayerViewModel._addedTracks.Add(current.UniqueId);
             AudioObj audioObj = StreamUtils.CloneThroughSerialize <AudioObj>(current);
             audioObj.owner_id = AppGlobalStateManager.Current.LoggedInUserId;
             audioObj.aid      = res.ResultData;
             this.NotifyPropertyChanged <bool>((Expression <Func <bool> >)(() => this.CanAddTrack));
             this.NotifyPropertyChanged <Visibility>((Expression <Func <Visibility> >)(() => this.AddedVisibility));
             this.NotifyPropertyChanged <Visibility>((Expression <Func <Visibility> >)(() => this.CanAddVisibility));
             EventAggregator.Current.Publish((object)new AudioTrackAddedRemoved()
             {
                 Added = true,
                 Audio = audioObj
             });
         }));
     }
     catch (Exception ex)
     {
         Logger.Instance.Error("Failed to add track", ex);
     }
 }