示例#1
0
        public void SongListMoveTo(MHzSongBase song)
        {
            var item = SelectItemBySHA256(song.SHA256);

            if (item == null)
            {
                return;
            }
            SongListMoveTo(item);
        }
示例#2
0
        private bool IsCurrentMHzItem(MHzSongBase song)
        {
            var item = SelectMHzItemBySHA256(song.SHA256);

            if (item == null)
            {
                return(false);
            }
            return(IsCurrentMHzItem(item));
        }
示例#3
0
 public bool RemoveItem(MHzSongBase song)
 {
     if (ServiceType == MusicServiceType.SongList)
     {
         return(RemovePlaybackItem(song));
     }
     else
     {
         return(RemoveMHzPlaybackItem(song));
     }
 }
示例#4
0
 public bool IsCurrent(MHzSongBase song)
 {
     if (ServiceType == MusicServiceType.SongList)
     {
         return(IsCurrentItem(song));
     }
     else
     {
         return(IsCurrentMHzItem(song));
     }
 }
示例#5
0
 public bool IsExistItem(MHzSongBase song)
 {
     if (ServiceType == MusicServiceType.SongList)
     {
         return(IsExistPlayItem(song));
     }
     else
     {
         return(IsExistMHzItem(song));
     }
 }
示例#6
0
 public void MoveToAnyway(MHzSongBase song)
 {
     if (ServiceType == MusicServiceType.SongList)
     {
         SongListMoveTo(song);
     }
     else
     {
         MHzListMoveTo(song);
     }
 }
示例#7
0
 public async Task <bool> InsertItemAsync(MHzSongBase song, int index = -1)
 {
     if (ServiceType == MusicServiceType.SongList)
     {
         return(await InsertMusicItemAsync(song, index));
     }
     else
     {
         return(await InsertMHzItemAsync(song, index));
     }
 }
示例#8
0
        public async Task <DownloadResult> DownloadMusicAsync(MHzSongBase song, DownloadNotifType notif_type, DownloadReportType report_type)
        {
            return
                (notif_type == DownloadNotifType.Null && report_type == DownloadReportType.Null ?
                 await DownloadMusicAsync(song, not_show : true, show_start : false, show_succ_notif : false, show_fail_notif : false) :

                 notif_type == DownloadNotifType.Null && report_type == DownloadReportType.NotShowButReportStart ?
                 await DownloadMusicAsync(song, not_show : true, show_start : true, show_succ_notif : false, show_fail_notif : false) :

                 notif_type == DownloadNotifType.Null && report_type == DownloadReportType.ShowListAndReportStart ?
                 await DownloadMusicAsync(song, not_show : false, show_start : true, show_succ_notif : false, show_fail_notif : false) :

                 notif_type == DownloadNotifType.Null && report_type == DownloadReportType.ShowListButNotReport ?
                 await DownloadMusicAsync(song, not_show : false, show_start : false, show_succ_notif : false, show_fail_notif : false) :

                 notif_type == DownloadNotifType.SuccessfullyNotification && report_type == DownloadReportType.Null ?
                 await DownloadMusicAsync(song, not_show : true, show_start : false, show_succ_notif : true, show_fail_notif : false) :

                 notif_type == DownloadNotifType.SuccessfullyNotification && report_type == DownloadReportType.NotShowButReportStart ?
                 await DownloadMusicAsync(song, not_show : true, show_start : true, show_succ_notif : true, show_fail_notif : false) :

                 notif_type == DownloadNotifType.SuccessfullyNotification && report_type == DownloadReportType.ShowListAndReportStart ?
                 await DownloadMusicAsync(song, not_show : false, show_start : true, show_succ_notif : true, show_fail_notif : false) :

                 notif_type == DownloadNotifType.SuccessfullyNotification && report_type == DownloadReportType.ShowListButNotReport ?
                 await DownloadMusicAsync(song, not_show : false, show_start : false, show_succ_notif : true, show_fail_notif : false) :

                 notif_type == DownloadNotifType.FailedNotification && report_type == DownloadReportType.Null ?
                 await DownloadMusicAsync(song, not_show : true, show_start : false, show_succ_notif : false, show_fail_notif : true) :

                 notif_type == DownloadNotifType.FailedNotification && report_type == DownloadReportType.NotShowButReportStart ?
                 await DownloadMusicAsync(song, not_show : true, show_start : true, show_succ_notif : false, show_fail_notif : true) :

                 notif_type == DownloadNotifType.FailedNotification && report_type == DownloadReportType.ShowListAndReportStart ?
                 await DownloadMusicAsync(song, not_show : false, show_start : true, show_succ_notif : false, show_fail_notif : true) :

                 notif_type == DownloadNotifType.FailedNotification && report_type == DownloadReportType.ShowListButNotReport ?
                 await DownloadMusicAsync(song, not_show : false, show_start : false, show_succ_notif : false, show_fail_notif : true) :

                 notif_type == DownloadNotifType.AllNotification && report_type == DownloadReportType.Null ?
                 await DownloadMusicAsync(song, not_show : true, show_start : false, show_succ_notif : true, show_fail_notif : true) :

                 notif_type == DownloadNotifType.AllNotification && report_type == DownloadReportType.NotShowButReportStart ?
                 await DownloadMusicAsync(song, not_show : true, show_start : true, show_succ_notif : true, show_fail_notif : true) :

                 notif_type == DownloadNotifType.AllNotification && report_type == DownloadReportType.ShowListAndReportStart ?
                 await DownloadMusicAsync(song, not_show : false, show_start : true, show_succ_notif : true, show_fail_notif : true) :

                 await DownloadMusicAsync(song, not_show : false, show_start : false, show_succ_notif : true, show_fail_notif : true));
        }
示例#9
0
        private async void AddButton_ClickAsync(object sender, RoutedEventArgs e)
        {
            var item = (sender as Button).CommandParameter as SongBase;

            if (item == null)
            {
                return;
            }
            var song    = new MHzSongBase(item);
            var succeed = await Service.InsertItemAsync(song);

            if (succeed)
            {
                ReportHelper.ReportAttentionAsync(GetUIString("Music_added"));
            }
        }
示例#10
0
        private async Task <bool> InsertMHzItemAsync(MHzSongBase song, int index = -1)
        {
            var find_index = MHzSongList.ToList().FindIndex(i => i.SHA256 == song.SHA256);

            if (find_index != -1)
            {
                return(true);
            }
            var item = await MusicServiceHelper.CreatePlayItemAsync(song);

            var retuenIndex = InsertMHzItem(item, index);

            MHzSongList.Insert(retuenIndex, song);
            RaisePropertyChanged("MHzSongList");
            return(retuenIndex == -1 ? false : true);
        }
示例#11
0
        public static async Task <MediaPlaybackItem> CreatePlayItemAsync(MHzSongBase song)
        {
            var succeed_img = Uri.TryCreate(song.Picture, UriKind.Absolute, out var img_url);

            if (!succeed_img)
            {
                img_url = new Uri("ms-appx:///Assets/star006.png");
            }
            return(await CreatePlayItemAsync(
                       url : song.Url,
                       img : img_url,
                       title : song.Title,
                       artist : song.Artist,
                       albumTitle : song.AlbumTitle,
                       albunmArtist : song.SingerShow,
                       para : AppResources.MusicIsCurrent = new MusicBoardParameter { AID = song.AID, SID = song.SID, SSID = song.SSID, SHA256 = song.SHA256, Url = song.Url, Song = song, }));
        }
示例#12
0
        public void MHzListMoveTo(MHzSongBase song)
        {
            if (IsCurrentMHzItem(song))
            {
                return;
            }
            var item = SelectMHzItemBySHA256(song.SHA256);

            if (item == null)
            {
                return;
            }
            var index = MHzChannelList.Items.ToList().FindIndex(i => i == item);

            if (index < 0)
            {
                return;
            }
            MHzChannelList.MoveTo((uint)index);
            PlayAnyway();
        }
示例#13
0
        private async void IndexList_ItemClickAsync(object sender, ItemClickEventArgs e)
        {
            var item = e.ClickedItem as SongBase;

            if (item == null)
            {
                return;
            }
            var succeedss = Service.ChangeServiceChoice(MusicServiceType.SongList);

            if (!succeedss)
            {
                return;
            }
            var song    = new MHzSongBase(item);
            var succeed = await Service.InsertItemAsync(song);

            if (!succeed)
            {
                return;
            }
            if (MainUpContentFrame.Content != null)
            {
                (MainUpContentFrame.Content as FM_SongBoardPage)?.UnregisterServiceEvents();
            }
            Service.SongListMoveTo();
            NavigateToBase?.Invoke(
                null,
                new MusicBoardParameter {
                SID       = item.SID,
                SSID      = item.SSID,
                AID       = item.AID,
                SHA256    = item.SHA256,
                Url       = item.Url,
                Song      = song,
                FrameType = FrameType.UpContent
            },
                GetFrameInstance(FrameType.UpContent),
                GetPageType(NavigateType.MusicBoard));
        }
示例#14
0
        private bool RemoveMHzPlaybackItem(MHzSongBase song)
        {
            var item = SelectMHzItemBySHA256(song.SHA256);

            if (item == null)
            {
                return(false);
            }
            if (IsCurrentMHzItem(item))
            {
                return(false);
            }
            var succeed = MHzChannelList.Items.Remove(item);

            if (!succeed)
            {
                return(succeed);
            }
            succeed = MHzSongList.Remove(song);
            RaisePropertyChanged("MHzSongList");
            return(succeed);
        }
示例#15
0
        private static async Task <bool> CreateBJSONMessageAsync(MHzSongBase song, StorageFolder folder, string filePath)
        {
            var mess_name = $"{MHzSongBaseHelper.GetIdentity(song)}.bjsonuwp";
            var mess      = default(StorageFile);

            try {
                mess = await folder.CreateFileAsync(mess_name, CreationCollisionOption.ReplaceExisting);
            } catch {
                return(false);
            }

            song.IsCached  = true;
            song.LocalPath = filePath;

            try {
                var bytes = default(byte[]);
                if (song is MHzSong)
                {
                    bytes = Encoding.UTF8.GetBytes(JsonHelper.ToJson(song as MHzSong));
                }
                else
                {
                    bytes = Encoding.UTF8.GetBytes(JsonHelper.ToJson(song));
                }
                using (var irandom = await mess.OpenAsync(FileAccessMode.ReadWrite)) {
                    var stream = irandom.AsStreamForWrite();
                    await stream.WriteAsync(bytes, 0, bytes.Length);

                    await stream.FlushAsync();
                }
            } catch (SerializationException) {
                return(false);
            }

            return(true);
        }
示例#16
0
        public async Task <DownloadResult> DownloadMusicAsync(MHzSongBase song, bool not_show = false, bool show_start = true, bool show_succ_notif = true, bool show_fail_notif = true)
        {
            var file = default(StorageFile);

            try {
                var folder = await GetBeansproutMusicFolderAsync();

                var filename = MHzSongBaseHelper.GetIdentity(song) + StorageHelper.MusicTemporaryExtension;
                file = await CreateFileInMusicFolderWithNameAsync(folder, filename);

                var fail_toast = ToastHelper.CreateToastNotificaion(
                    title: GetUIString("Download_Failed") + " : " + song.Title,
                    content: DateTime.Now.ToString("h:mm tt"),
                    imageUri: " -- ",
                    uri: " -- ",
                    logoOverride: song.Picture,
                    voice: "ms-appx:///Voice/yellsedtsr.mp3");

                var succeed_toast = ToastHelper.CreateToastNotificaion(
                    title: GetUIString("Download_Succeed") + " : " + song.Title,
                    content: DateTime.Now.ToString("h:mm tt"),
                    imageUri: " -- ",
                    uri: " -- ",
                    logoOverride: song.Picture,
                    voice: "ms-appx:///Voice/haizi.mp3");

                var group = BackgroundTransferGroup.CreateGroup(DoubanMusicGroup);
                group.TransferBehavior = BackgroundTransferBehavior.Serialized;

                var downloader = new BackgroundDownloader {
                    FailureToastNotification = show_succ_notif ? new Windows.UI.Notifications.ToastNotification(fail_toast) : null,
                    SuccessToastNotification = show_fail_notif ? new Windows.UI.Notifications.ToastNotification(succeed_toast) : null,
                    TransferGroup            = group,
                };

                var succeed_trans = Uri.TryCreate(song.Url, UriKind.Absolute, out var do_url);
                if (!succeed_trans)
                {
                    throw new DownloadCanNotRunException();
                }

                var operation = downloader.CreateDownload(do_url, file);
                operation.CostPolicy = BackgroundTransferCostPolicy.UnrestrictedOnly;

                if (show_start)
                {
                    ReportHelper.ReportAttentionAsync(GetUIString("Download_Start"));
                }

                if (!not_show)
                {
                    DownloadListAddNewItem(song, operation);
                    operation = await operation.StartAsync();
                }
                else
                {
                    var control = await operation.StartAsync();
                }

                var mess_succeed = await CreateBJSONMessageAsync(song, folder, file.Path);

                if (!mess_succeed)
                {
                    throw new JSONCanNotCreateException();
                }

                await file.RenameAsync(filename.Replace(StorageHelper.MusicTemporaryExtension, StorageHelper.MusicExtension), NameCollisionOption.ReplaceExisting);

                return(DownloadResult.Successfully);
            } catch (JSONCanNotCreateException) {
                await file.DeleteAsync();

                return(DownloadResult.Failed);
            } catch (DownloadCanNotRunException) {
                await file.DeleteAsync();

                return(DownloadResult.Failed);
            } catch (FileCannNotCreateException) {
                return(DownloadResult.Failed);
            } catch (FileExistException) {
                return(DownloadResult.FileExist);
            } catch (Exception e) {
                Debug.WriteLine(e.Message);
                return(DownloadResult.Failed);
            }
        }
示例#17
0
 public async void DownloadMusicNotWaitAsync(MHzSongBase song, DownloadNotifType notif_type, DownloadReportType report_type)
 {
     await DownloadMusicAsync(song, notif_type, report_type);
 }
示例#18
0
 private void DownloadListAddNewItem(MHzSongBase song, DownloadOperation operation)
 {
     DownloadList.Add(new KeyValuePair <DownloadOperationKey, DownloadOperationValue>(new DownloadOperationKey(song.SHA256, song.Title, song.SingerShow), new DownloadOperationValue(operation)));
 }
示例#19
0
        public bool IsExistMHzItem(MHzSongBase song)
        {
            var find_index = MHzSongList.ToList().FindIndex(i => i.SHA256 == song.SHA256);

            return(find_index == -1 ? false : true);
        }
示例#20
0
        private bool IsExistPlayItem(MHzSongBase song)
        {
            var find_index = SongList.ToList().FindIndex(i => i.SHA256 == song.SHA256);

            return(find_index == -1 ? false : true);
        }