private void AddAlbum(Album album) { string CoverPath = TidalTool.getAlbumCoverPath(Config.OutputDir(), album); FileHelper.Write(album.CoverData, true, CoverPath); foreach (Track item in album.Tracks) { DLItemList.Add(new DownloadItem(DLItemList.Count + 1, item, null, album: album)); } foreach (Video item in album.Videos) { DLItemList.Add(new DownloadItem(DLItemList.Count + 1, null, item, album: album)); } }
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 DownloadTrack() { //GetStream Progress.StatusMsg = "GetStream..."; string Errlabel = ""; StreamUrl TidalStream = TidalTool.getStreamUrl(TidalTrack.ID.ToString(), Quality, out Errlabel); if (Errlabel.IsNotBlank()) { goto ERR_RETURN; } FilePath = TidalTool.getAlbumTrackPath(OutputDir, TidalAlbum, TidalTrack, TidalStream.Url); //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)) { //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 string sLabel = TidalTool.SetMetaData(FilePath, TidalAlbum, TidalTrack, TidalTool.getAlbumCoverPath(OutputDir, TidalAlbum)); 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); //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 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(); }
public TaskViewModel(object data, DownloadViewModel parent) { VMParent = parent; if (data.GetType() == typeof(Album)) { Album album = (Album)data; Title = album.Title; BasePath = TidalTool.getAlbumFolder(Config.OutputDir(), album, Config.AddYear()); Desc = string.Format("by {0}-{1} Tracks-{2} Videos-{3}", album.Artist.Name, TimeHelper.ConverIntToString(album.Duration), album.NumberOfTracks, album.NumberOfVideos); Cover = AIGS.Common.Convert.ConverByteArrayToBitmapImage(album.CoverData); if (Config.SaveCovers()) { string CoverPath = TidalTool.getAlbumCoverPath(Config.OutputDir(), album, Config.AddYear()); FileHelper.Write(album.CoverData, true, CoverPath); } for (int i = 0; album.Tracks != null && i < album.Tracks.Count; i++) { if (album.Tracks[i].WaitDownload) { ItemList.Add(new TrackTask(album.Tracks[i], ItemList.Count + 1, RecieveDownloadOver, album)); } } for (int i = 0; album.Videos != null && i < album.Videos.Count; i++) { if (album.Videos[i].WaitDownload) { ItemList.Add(new VideoTask(album.Videos[i], ItemList.Count + 1, RecieveDownloadOver, album)); } } } else if (data.GetType() == typeof(Video)) { Video video = (Video)data; Title = video.Title; BasePath = TidalTool.getVideoFolder(Config.OutputDir()); Desc = string.Format("by {0}-{1}", video.Artist.Name, TimeHelper.ConverIntToString(video.Duration)); Cover = AIGS.Common.Convert.ConverByteArrayToBitmapImage(video.CoverData); if (video.WaitDownload) { ItemList.Add(new VideoTask(video, 1, RecieveDownloadOver)); } } else if (data.GetType() == typeof(Artist)) { Artist artist = (Artist)data; Title = artist.Name; BasePath = TidalTool.getArtistFolder(Config.OutputDir(), artist); Desc = string.Format("by {0} Albums-{1}", artist.Name, artist.Albums.Count); Cover = AIGS.Common.Convert.ConverByteArrayToBitmapImage(artist.CoverData); foreach (var item in artist.Albums) { if (!item.WaitDownload) { continue; } for (int i = 0; item.Tracks != null && i < item.Tracks.Count; i++) { ItemList.Add(new TrackTask(item.Tracks[i], ItemList.Count + 1, RecieveDownloadOver, item)); } for (int i = 0; item.Videos != null && i < item.Videos.Count; i++) { ItemList.Add(new VideoTask(item.Videos[i], ItemList.Count + 1, RecieveDownloadOver, item)); } } } else if (data.GetType() == typeof(Playlist)) { Playlist plist = (Playlist)data; Title = plist.Title; BasePath = TidalTool.getPlaylistFolder(Config.OutputDir(), plist); Desc = string.Format("{0} Tracks-{1} Videos-{2}", TimeHelper.ConverIntToString(plist.Duration), plist.NumberOfTracks, plist.NumberOfVideos); Cover = AIGS.Common.Convert.ConverByteArrayToBitmapImage(plist.CoverData); for (int i = 0; plist.Tracks != null && i < plist.Tracks.Count; i++) { if (plist.Tracks[i].WaitDownload) { ItemList.Add(new TrackTask(plist.Tracks[i], ItemList.Count + 1, RecieveDownloadOver, null, plist)); } } for (int i = 0; plist.Videos != null && i < plist.Videos.Count; i++) { if (plist.Videos[i].WaitDownload) { ItemList.Add(new VideoTask(plist.Videos[i], ItemList.Count + 1, RecieveDownloadOver, null, plist)); } } } }