public void DownloadTrack() { string Errlabel = ""; //GetStream Progress.StatusMsg = "GetStream..."; StreamUrl TidalStream = TidalTool.getStreamUrl(TidalTrack.ID.ToString(), Quality, out Errlabel); if (Errlabel.IsNotBlank()) { goto ERR_RETURN; } //Get path FilePath = TidalTool.getTrackPath(OutputDir, TidalAlbum, TidalTrack, TidalStream.Url, AddHyphen, TidalPlaylist); //Get contributors ObservableCollection <Contributor> pContributors = TidalTool.getTrackContributors(TidalTrack.ID.ToString(), out Errlabel); //Download Progress.StatusMsg = "Start..."; for (int i = 0; i < 100 && Progress.GetStatus() != ProgressHelper.STATUS.CANCLE; i++) { if ((bool)DownloadFileHepler.Start(TidalStream.Url, FilePath, Timeout: 5 * 1000, UpdateFunc: UpdateDownloadNotify, ErrFunc: ErrDownloadNotify, Proxy:TidalTool.PROXY)) { //Decrypt if (!TidalTool.DecryptTrackFile(TidalStream, FilePath)) { Errlabel = "Decrypt failed!"; goto ERR_RETURN; } if (OnlyM4a) { string sNewName; if (!TidalTool.ConvertMp4ToM4a(FilePath, out sNewName)) { Errlabel = "Convert mp4 to m4a failed!"; ErrlabelHeight = 15; } else { FilePath = sNewName; } } //SetMetaData if (TidalAlbum == null && TidalTrack.Album != null) { string sErrcode = null; TidalAlbum = TidalTool.getAlbum(TidalTrack.Album.ID.ToString(), out sErrcode); } string sLabel = TidalTool.SetMetaData(FilePath, TidalAlbum, TidalTrack, TidalTool.getAlbumCoverPath(OutputDir, TidalAlbum), pContributors); if (sLabel.IsNotBlank()) { Errlabel = "Set metadata failed!"; goto ERR_RETURN; } Progress.SetStatus(ProgressHelper.STATUS.COMPLETE); return; } } Errlabel = "Download failed!"; ERR_RETURN: if (Progress.GetStatus() == ProgressHelper.STATUS.CANCLE) { return; } ErrlabelHeight = 15; Progress.SetStatus(ProgressHelper.STATUS.ERROR); Progress.Errmsg = Errlabel; }
public void DownloadTrack() { string Errlabel = ""; //GetStream Progress.StatusMsg = "GetStream..."; StreamUrl TidalStream = TidalTool.getStreamUrl(TidalTrack.ID.ToString(), Quality, out Errlabel); if (Errlabel.IsNotBlank()) { goto ERR_RETURN; } //Get path FilePath = TidalTool.getTrackPath(OutputDir, TidalAlbum, TidalTrack, TidalStream.Url, AddHyphen, TidalPlaylist, artistBeforeTitle: ArtistBeforeTitle); //Check if song is downloaded already string CheckName = OnlyM4a ? FilePath.Replace(".mp4", ".m4a") : FilePath; if (CheckExist && System.IO.File.Exists(CheckName)) { Progress.Update(100, 100); Progress.SetStatus(ProgressHelper.STATUS.COMPLETE); return; } //Get contributors ObservableCollection <Contributor> pContributors = TidalTool.getTrackContributors(TidalTrack.ID.ToString(), out Errlabel); //To chinese if (ToChinese) { CloudMusicAlbum cloalbum = Chinese.matchAlbum(TidalAlbum.Title, TidalAlbum.Artist.Name); string chnname = Chinese.convertSongTitle(TidalTrack.Title, cloalbum); if (chnname != TidalTrack.Title) { FilePath = TidalTool.getTrackPath(OutputDir, TidalPlaylist != null ? null : TidalAlbum, TidalTrack, TidalStream.Url, AddHyphen, TidalPlaylist, chnname, artistBeforeTitle: ArtistBeforeTitle); TidalTrack.Title = chnname; } } //Download Progress.StatusMsg = "Start..."; for (int i = 0; i < 100 && Progress.GetStatus() != ProgressHelper.STATUS.CANCLE; i++) { if ((bool)DownloadFileHepler.Start(TidalStream.Url, FilePath, Timeout: 5 * 1000, UpdateFunc: UpdateDownloadNotify, ErrFunc: ErrDownloadNotify, Proxy:TidalTool.PROXY)) { //Decrypt if (!TidalTool.DecryptTrackFile(TidalStream, FilePath)) { Errlabel = "Decrypt failed!"; goto ERR_RETURN; } if (OnlyM4a) { string sNewName; if (!TidalTool.ConvertMp4ToM4a(FilePath, out sNewName)) { Errlabel = "Convert mp4 to m4a failed!"; goto ERR_RETURN; } else { FilePath = sNewName; } } //SetMetaData if (TidalAlbum == null && TidalTrack.Album != null) { string sErrcode = null; TidalAlbum = TidalTool.getAlbum(TidalTrack.Album.ID.ToString(), out sErrcode); } string sLabel = TidalTool.SetMetaData(FilePath, TidalAlbum, TidalTrack, TidalTool.getAlbumCoverPath(OutputDir, TidalAlbum), pContributors); if (sLabel.IsNotBlank()) { Errlabel = "Set metadata failed!"; goto ERR_RETURN; } Progress.SetStatus(ProgressHelper.STATUS.COMPLETE); return; } } Errlabel = "Download failed!"; ERR_RETURN: if (Progress.GetStatus() == ProgressHelper.STATUS.CANCLE) { return; } ErrlabelHeight = 15; Progress.SetStatus(ProgressHelper.STATUS.ERROR); Progress.Errmsg = Errlabel; }
public void Download() { string Errlabel = ""; //GetStream Progress.StatusMsg = "GetStream..."; StreamUrl TidalStream = TidalTool.getStreamUrl(TidalTrack.ID.ToString(), Quality, out Errlabel); if (Errlabel.IsNotBlank() || TidalStream == null) { goto ERR_RETURN; } if (TidalStream.Codec != "ac4" && TidalStream.Codec != "mha1") { if (Quality >= eSoundQuality.LOSSLESS) { if (TidalStream.Url.Contains(".m4a") || TidalStream.Url.Contains(".mp4")) { StreamUrl TidalStream2 = TidalTool.getStreamUrl2(TidalTrack.ID.ToString(), Quality, out Errlabel); if (Errlabel.IsBlank() && TidalStream2 != null) { TidalStream = TidalStream2; } Errlabel = ""; } } } Codec = TidalStream.Codec; Progress.StatusMsg = "GetStream success..."; //Get path FilePath = TidalTool.getTrackPath(OutputDir, TidalAlbum, TidalTrack, TidalStream.Url, AddHyphen, TidalPlaylist, artistBeforeTitle: ArtistBeforeTitle, addexplicit: AddExplict, addYear: AddYear, useTrackNumber: UseTrackNumber); //Check if song is downloaded already string CheckName = OnlyM4a ? FilePath.Replace(".mp4", ".m4a") : FilePath; if (CheckExist && System.IO.File.Exists(CheckName)) { Progress.UpdateInt(100, 100); Progress.SetStatus(ProgressHelper.STATUS.COMPLETE); goto CALL_RETURN; } //Get contributors Progress.StatusMsg = "GetContributors..."; ObservableCollection <Contributor> pContributors = TidalTool.getTrackContributors(TidalTrack.ID.ToString(), out Errlabel); //Download Progress.StatusMsg = "Start..."; for (int i = 0; i < 100 && Progress.GetStatus() != ProgressHelper.STATUS.CANCLE; i++) { if ((bool)DownloadFileHepler.Start(TidalStream.Url, FilePath, Timeout: 5 * 1000, UpdateFunc: UpdateDownloadNotify, ErrFunc: ErrDownloadNotify, Proxy: TidalTool.PROXY)) { //Decrypt if (!TidalTool.DecryptTrackFile(TidalStream, FilePath)) { Errlabel = "Decrypt failed!"; goto ERR_RETURN; } if (OnlyM4a && Path.GetExtension(FilePath).ToLower().IndexOf("mp4") >= 0) { if (TidalStream.Codec != "ac4" && TidalStream.Codec != "mha1") { string sNewName; if (!Config.IsFFmpegExist()) { Errlabel = "Convert mp4 to m4a failed!(FFmpeg is not exist!)"; goto ERR_RETURN; } if (!TidalTool.ConvertMp4ToM4a(FilePath, out sNewName)) { Errlabel = "Convert mp4 to m4a failed!(No reason, Please feedback!)"; goto ERR_RETURN; } else { FilePath = sNewName; } } } //SetMetaData if (TidalAlbum == null && TidalTrack.Album != null) { string sErrcode = null; TidalAlbum = TidalTool.getAlbum(TidalTrack.Album.ID.ToString(), out sErrcode); } string sLabel = TidalTool.SetMetaData(FilePath, TidalAlbum, TidalTrack, TidalTool.getAlbumCoverPath(OutputDir, TidalAlbum, AddYear), pContributors); if (sLabel.IsNotBlank()) { Errlabel = "Set metadata failed!" + sLabel; goto ERR_RETURN; } Progress.SetStatus(ProgressHelper.STATUS.COMPLETE); goto CALL_RETURN; } } Errlabel = "Download failed!"; ERR_RETURN: if (Progress.GetStatus() == ProgressHelper.STATUS.CANCLE) { goto CALL_RETURN; } Progress.SetStatus(ProgressHelper.STATUS.ERROR); Progress.Errmsg = Errlabel; CALL_RETURN: TellParentOver(); }