public MainViewModel(IWindowManager manager, SearchViewModel search, AboutViewModel about, SettingsViewModel settings, DownloadViewModel download)
        {
            Manager    = manager;
            VMSearch   = search;
            VMAbout    = about;
            VMSettings = settings;
            VMDownload = download;

            VMSearch.MainView   = this;
            VMSettings.MainView = this;

            VMSettings.ChangeTheme(int.Parse(Config.ThemeIndex()));
        }
        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));
                    }
                }
            }
        }