Пример #1
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);
            }
        }