예제 #1
0
        /// <summary>
        /// Get Local Artist Artwork, check for custom folder or artwork in the same folder as the music video
        /// </summary>
        /// <param name="artistInfo"></param>
        /// <returns></returns>
        public bool GetArtistArt(DBArtistInfo artistInfo)
        {
            logger.Debug("In Method GetArtistArt(DBArtistInfo artistInfo)");

            if (artistInfo == null)
            {
                return(false);
            }

            // if we already have a artist move on for now
            if (artistInfo.ArtFullPath.Trim().Length > 0)
            {
                return(false);
            }

            bool found = false;

            // If a custom artfolder is specified the search
            if (mvCentralCore.Settings.SearchCustomFolderForArtistArt)
            {
                found = getArtistArtFromCustomArtistArtFolder(artistInfo);
                logger.Debug("Sucessfully added fanart from custom folder: {0}", artistInfo.ArtFullPath);
            }// Look for Artwork in same folder as video
            if (!found)
            {
                found = getArtistArtFromArtistArtFolder(artistInfo);
            }
            // Look for artwork in the ..\thumbs\mvCentral\Artists\FullSize folder
            if (!found)
            {
                found = getOldArtistArt(artistInfo);
            }

            return(found);
        }
예제 #2
0
 private void ArtistActions(Action.ActionType actionType)
 {
     if ((actionType == Action.ActionType.ACTION_MUSIC_PLAY) || (actionType == Action.ActionType.ACTION_PLAY) || (actionType == Action.ActionType.ACTION_PAUSE))
     {
         if ((actionType == Action.ActionType.ACTION_MUSIC_PLAY) || (actionType == Action.ActionType.ACTION_PLAY) || (actionType == Action.ActionType.ACTION_PAUSE && !g_Player.HasVideo))
         {
             DBArtistInfo       currArtist        = DBArtistInfo.Get(facadeLayout.SelectedListItem.Label);
             List <DBTrackInfo> allTracksByArtist = DBTrackInfo.GetEntriesByArtist(currArtist);
             AddToPlaylist(allTracksByArtist, true, mvCentralCore.Settings.ClearPlaylistOnAdd, mvCentralCore.Settings.GeneratedPlaylistAutoShuffle);
         }
     }
     else if (actionType == Action.ActionType.REMOTE_0 ||
              actionType == Action.ActionType.REMOTE_1 ||
              actionType == Action.ActionType.REMOTE_2 ||
              actionType == Action.ActionType.REMOTE_3 ||
              actionType == Action.ActionType.REMOTE_4 ||
              actionType == Action.ActionType.REMOTE_5 ||
              actionType == Action.ActionType.REMOTE_6 ||
              actionType == Action.ActionType.REMOTE_7 ||
              actionType == Action.ActionType.REMOTE_8 ||
              actionType == Action.ActionType.REMOTE_9)
     {
         DoSpell(actionType);
     }
     else
     {
         _currentView = MvView.Artist;
         artistID     = facadeLayout.SelectedListItem.ItemId;
         logger.Debug("Calling loadCurrent from ArtistActions");
         loadCurrent();
     }
 }
예제 #3
0
        /// <summary>
        /// Get Artist Artwork from the Artist Artwork folder.
        /// </summary>
        /// <param name="mvArtistObject"></param>
        /// <returns></returns>
        private bool getArtistArtFromArtistArtFolder(DBArtistInfo mvArtistObject)
        {
            string artistArtFolderPath = string.Empty;

            logger.Debug("In Method getArtistArtFromArtistArtFolder(DBArtistInfo mv)");
            if (mvArtistObject == null)
            {
                return(false);
            }

            // grab a list of possible filenames for the artist based on the user pattern
            string        pattern   = mvCentralCore.Settings.ArtistArtworkFilenamePattern;
            List <string> filenames = getPossibleNamesFromPattern(pattern, mvArtistObject);

            // check the ArtistArt folder for the user patterned ArtistArt
            artistArtFolderPath = mvCentralCore.Settings.ArtistArtFolder;
            FileInfo newArtistArt = getFirstFileFromFolder(artistArtFolderPath, filenames);

            if (newArtistArt != null && newArtistArt.Exists)
            {
                mvArtistObject.ArtFullPath = newArtistArt.FullName;
                logger.Info("Loaded artistart from " + newArtistArt.FullName);
                return(true);
            }
            return(false);
        }
예제 #4
0
        // generate a filename for a artist art. should be unique based on the source hash
        private static string GenerateFilename(DBArtistInfo mv, string source)
        {
            string artFolder = MusicVideosCore.Settings.ArtistArtFolder;
            string safeName  = mv.Artist.Replace(' ', '.').ToValidFilename();

            return(artFolder + "\\{" + safeName + "} [" + source.GetHashCode() + "].jpg");
        }
예제 #5
0
        /// <summary>
        /// Get the track details
        /// </summary>
        /// <param name="mvSignature"></param>
        /// <returns></returns>
        public List <DBTrackInfo> GetTrackDetail(MusicVideoSignature mvSignature)
        {
            List <DBTrackInfo> results = new List <DBTrackInfo>();

            if (mvSignature == null)
            {
                return(results);
            }

            lock (lockList)
            {
                DBTrackInfo mv = getMusicVideoTrack(mvSignature.Artist, mvSignature.Album, mvSignature.Track);
                if (mv != null)
                {
                    if (mv.ArtistInfo.Count == 0)
                    {
                        DBArtistInfo d4 = new DBArtistInfo();
                        d4.Artist = mvSignature.Artist;
                        mv.ArtistInfo.Add(d4);
                    }
                    results.Add(mv);
                }
            }

            return(results);
        }
예제 #6
0
        public static ArtistArt FromUrl(string title, string url, out ImageLoadResults status)
        {
            DBArtistInfo mv = new DBArtistInfo();

            mv.Artist = title;
            return(FromUrl(mv, url, false, out status));
        }
예제 #7
0
        public static ArtistArt FromUrl(string title, string url, bool ignoreRestrictions, out ImageLoadResults status)
        {
            DBArtistInfo mv = new DBArtistInfo();

            mv.Artist = title;
            return(FromUrl(mv, url, ignoreRestrictions, out status));
        }
예제 #8
0
 public UpdateResults UpdateTrack(DBTrackInfo mv)
 {
     if (mv == null)
     {
         return(UpdateResults.FAILED);
     }
     lock (LockList)
     {
         DBArtistInfo db1 = DBArtistInfo.Get(mv);
         if (db1 != null)
         {
             mv.ArtistInfo[0] = db1;
         }
         if (mv.ArtistInfo.Count > 0)
         {
             mv.ArtistInfo[0].PrimarySource = mv.PrimarySource;
             mv.ArtistInfo[0].Commit();
         }
         DBAlbumInfo db2 = DBAlbumInfo.Get(mv);
         if (db2 != null)
         {
             mv.AlbumInfo[0] = db2;
         }
         if (mv.AlbumInfo.Count > 0)
         {
             foreach (DBAlbumInfo db3 in mv.AlbumInfo)
             {
                 db3.PrimarySource = mv.PrimarySource;
                 db3.Commit();
             }
         }
     }
     return(UpdateResults.SUCCESS);
 }
예제 #9
0
        public CreateAlbumForTrack(DBTrackInfo trackToAdd)
        {
            InitializeComponent();
            DBArtistInfo theArtist = DBArtistInfo.Get(trackToAdd);

            tbArtistName.Text = theArtist.Artist;
            tbTrackName.Text  = trackToAdd.Track;
        }
예제 #10
0
        /// <summary>
        /// Play tracks by selected Genre
        /// </summary>
        private void playByGenre()
        {
            GUIDialogMenu dlgMenu = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);

            if (dlgMenu != null)
            {
                dlgMenu.Reset();
                dlgMenu.SetHeading(mvCentralUtils.PluginName() + " - " + Localization.SmartPlaylistOptions);

                List <DBGenres> genreList = DBGenres.GetAll();
                genreList.Sort(delegate(DBGenres p1, DBGenres p2) { return(p1.Genre.CompareTo(p2.Genre)); });

                foreach (DBGenres genre in genreList)
                {
                    if (genre.Enabled)
                    {
                        dlgMenu.Add(genre.Genre);
                    }
                }
                dlgMenu.DoModal(GetID);

                if (dlgMenu.SelectedLabel == -1) // Nothing was selected
                {
                    return;
                }

                //dlgMenu.SelectedLabelText
                PlayList playlist = Player.playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_MVCENTRAL);
                playlist.Clear();
                List <DBArtistInfo> allArtists = DBArtistInfo.GetAll();

                foreach (DBArtistInfo artist in allArtists)
                {
                    if (tagMatched(dlgMenu.SelectedLabelText, artist))
                    {
                        logger.Debug("Matched Artist {0} with Tag {1}", artist.Artist, dlgMenu.SelectedLabelText);
                        List <DBTrackInfo> theTracks = DBTrackInfo.GetEntriesByArtist(artist);
                        foreach (DBTrackInfo artistTrack in theTracks)
                        {
                            playlist.Add(new PlayListItem(artistTrack));
                        }
                    }
                }
                Player.playlistPlayer.CurrentPlaylistType = PlayListType.PLAYLIST_MVCENTRAL;

                if (mvCentralCore.Settings.GeneratedPlaylistAutoShuffle)
                {
                    playlist.Shuffle();
                }

                Player.playlistPlayer.Play(0);
                if (mvCentralCore.Settings.AutoFullscreen)
                {
                    GUIWindowManager.ActivateWindow((int)GUIWindow.Window.WINDOW_FULLSCREEN_VIDEO);
                }
            }
        }
예제 #11
0
        private void setMusicVideoArtist(ref DBArtistInfo mv, string artistName, string artistmbid)
        {
            if (string.IsNullOrEmpty(artistName))
            {
                return;
            }
            logger.Debug("In Method: setMusicVideoArtist(ref DBArtistInfo mv, Artist: " + artistName + " MBID: " + artistmbid + ")");

            MusicDatabase m_db = null;

            try
            {
                m_db = MusicDatabase.Instance;
            }
            catch (Exception e)
            {
                logger.Error("setMusicVideoArtist: Music database init failed " + e.ToString());
                return;
            }

            var artistInfo = new MediaPortal.Music.Database.ArtistInfo();

            if (!m_db.GetArtistInfo(artistName, ref artistInfo))
            {
                return;
            }

            // Name
            mv.Artist = artistName;
            // MBID
            // mv.MdID =
            // Tags
            char[]   delimiters = new char[] { ',' };
            string[] tags       = artistInfo.Genres.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
            foreach (string tag in tags)
            {
                mv.Tag.Add(tag.Trim());
            }
            tags = artistInfo.Styles.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
            foreach (string tag in tags)
            {
                mv.Tag.Add(tag.Trim());
            }
            // Bio
            mv.bioSummary = artistInfo.AMGBio;
            mv.bioContent = artistInfo.AMGBio;
            // Additional
            mv.Born        = artistInfo.Born;
            mv.Genre       = artistInfo.Genres;
            mv.Styles      = artistInfo.Styles;
            mv.YearsActive = artistInfo.YearsActive;
            // Image URL
            if (!string.IsNullOrEmpty(artistInfo.Image) && !mv.ArtUrls.Contains(artistInfo.Image))
            {
                mv.ArtUrls.Add(artistInfo.Image);
            }
        }
예제 #12
0
        /// <summary>
        /// Update missing Artist information
        /// </summary>
        /// <param name="mv"></param>
        /// <param name="artistInfo"></param>
        private void UpdateMusicVideoArtist(ref DBArtistInfo mv, ArtistInfo artistInfo, string strArtistHTML)
        {
            if (mv.Formed.Trim() == string.Empty)
            {
                mv.Formed = mvCentralUtils.StripHTML(artistInfo.Formed);
            }

            if (mv.Disbanded.Trim() == string.Empty)
            {
                mv.Disbanded = mvCentralUtils.StripHTML(artistInfo.Disbanded);
            }

            if (mv.Born.Trim() == string.Empty)
            {
                mv.Born = mvCentralUtils.StripHTML(artistInfo.Born);
            }

            if (mv.Death.Trim() == string.Empty)
            {
                mv.Death = mvCentralUtils.StripHTML(artistInfo.Death);
            }

            if (mv.bioSummary.Trim() == string.Empty)
            {
                mv.bioSummary = getBioSummary(artistInfo.AMGBio, 50);
            }

            if (mv.bioContent.Trim() == string.Empty)
            {
                mv.bioContent = artistInfo.AMGBio;
            }

            if (mv.Genre.Trim() == string.Empty)
            {
                mv.Genre = artistInfo.Genres;
            }

            if (mv.Tones.Trim() == string.Empty)
            {
                mv.Tones = artistInfo.Tones;
            }

            if (mv.Styles.Trim() == string.Empty)
            {
                mv.Styles = artistInfo.Styles;
            }

            if (mv.YearsActive.Trim() == string.Empty)
            {
                mv.YearsActive = artistInfo.YearsActive;
            }
        }
예제 #13
0
 /// <summary>
 /// Set the Artist information, override existing information
 /// </summary>
 /// <param name="mv"></param>
 /// <param name="artistInfo"></param>
 private void SetMusicVideoArtist(ref DBArtistInfo mv, ArtistInfo artistInfo, string strArtistHTML)
 {
     // Now fill in the data
     mv.Formed      = mvCentralUtils.StripHTML(artistInfo.Formed);
     mv.Disbanded   = mvCentralUtils.StripHTML(artistInfo.Disbanded);
     mv.Born        = mvCentralUtils.StripHTML(artistInfo.Born);
     mv.Death       = mvCentralUtils.StripHTML(artistInfo.Death);
     mv.bioSummary  = getBioSummary(artistInfo.AMGBio, 50);
     mv.bioContent  = artistInfo.AMGBio;
     mv.Genre       = artistInfo.Genres;
     mv.Tones       = artistInfo.Tones;
     mv.Styles      = artistInfo.Styles;
     mv.YearsActive = artistInfo.YearsActive;
 }
예제 #14
0
        private void GenreActions(MediaPortal.GUI.Library.Action.ActionType actionType)
        {
            if ((actionType == Action.ActionType.ACTION_MUSIC_PLAY) || (actionType == Action.ActionType.ACTION_PLAY) || (actionType == Action.ActionType.ACTION_PAUSE))
            {
                if ((actionType == Action.ActionType.ACTION_MUSIC_PLAY) || (actionType == Action.ActionType.ACTION_PLAY) || (actionType == Action.ActionType.ACTION_PAUSE && !g_Player.HasVideo))
                {
                    List <DBArtistInfo> artistList     = new List <DBArtistInfo>();
                    List <DBArtistInfo> artistFullList = DBArtistInfo.GetAll();


                    logger.Debug("Checking for matches for Genre : " + facadeLayout.SelectedListItem.Label);
                    foreach (DBArtistInfo artistInfo in artistFullList)
                    {
                        if (tagMatched(facadeLayout.SelectedListItem.Label, artistInfo))
                        {
                            logger.Debug("Matched Artist {0} with Tag {1}", artistInfo.Artist, facadeLayout.SelectedListItem.Label);
                            if (!artistList.Contains(artistInfo))
                            {
                                artistList.Add(artistInfo);
                            }
                        }
                    }

                    if (mvCentralCore.Settings.ClearPlaylistOnAdd)
                    {
                        ClearPlaylist();
                    }

                    foreach (DBArtistInfo currArtist in artistList)
                    {
                        List <DBTrackInfo> artistTracks = DBTrackInfo.GetEntriesByArtist(currArtist);
                        AddToPlaylist(artistTracks, false, false, mvCentralCore.Settings.GeneratedPlaylistAutoShuffle);
                    }
                    Player.playlistPlayer.Play(0);
                    if (mvCentralCore.Settings.AutoFullscreen)
                    {
                        GUIWindowManager.ActivateWindow((int)GUIWindow.Window.WINDOW_FULLSCREEN_VIDEO);
                    }
                }
                else
                {
                    _currentView = MvView.Genres;
                    artistID     = facadeLayout.SelectedListItem.ItemId;
                    logger.Debug("Calling loadCurrent from GenreActions");
                    loadCurrent();
                }
            }
        }
예제 #15
0
        /// <summary>
        /// Get the Artist Artwork from Mediaportal folder
        /// </summary>
        /// <param name="mvArtistObject"></param>
        /// <returns></returns>
        private bool getMPArtistArt(DBArtistInfo mvArtistObject)
        {
            logger.Debug("In Method: getMPArtistArt(DBArtistInfo mvArtistObject)");
            bool found = false;

            string thumbFolder = Thumbs.MusicArtists;
            string cleanTitle  = MediaPortal.Util.Utils.MakeFileName(mvArtistObject.Artist);
            string filename    = thumbFolder + @"\" + cleanTitle + "L.jpg";

            if (File.Exists(filename))
            {
                found &= mvArtistObject.AddArtFromFile(filename);
            }
            logger.Debug("In Method: getMPArtistArt(DBArtistInfo mvArtistObject) filename: " + filename + " - " + found);
            return(found);
        }
예제 #16
0
파일: Sort.cs 프로젝트: RoChess/mvcentral
        public int Compare(GUIListItem x, GUIListItem y)
        {
            try
            {
                DBArtistInfo artistX = (DBArtistInfo)x.MusicTag;
                DBArtistInfo artistY = (DBArtistInfo)y.MusicTag;

                int rtn;

                switch (_sortField)
                {
                case SortingFields.DateAdded:
                    rtn = artistX.DateAdded.CompareTo(artistY.DateAdded);
                    break;


                // default to the title field
                case SortingFields.Artist:
                default:
                    rtn = artistX.SortBy.CompareTo(artistY.SortBy);
                    break;
                }

                // if both items are identical, fallback to using the Title
                if (rtn == 0)
                {
                    rtn = artistX.Artist.CompareTo(artistY.Artist);
                }

                // if both items are STILL identical, fallback to using the ID
                if (rtn == 0)
                {
                    rtn = artistX.ID.GetValueOrDefault(0).CompareTo(artistY.ID.GetValueOrDefault(0));
                }

                if (_sortDirection == SortingDirections.Descending)
                {
                    rtn = -rtn;
                }

                return(rtn);
            }
            catch
            {
                return(0);
            }
        }
예제 #17
0
        public static ArtistArt FromUrl(DBArtistInfo mv, string url, bool ignoreRestrictions, out ImageLoadResults status)
        {
            ImageSize minSize = null;
            ImageSize maxSize = new ImageSize();

            if (!ignoreRestrictions)
            {
                minSize        = new ImageSize();
                minSize.Width  = MusicVideosCore.Settings.MinimumArtistWidth;
                minSize.Height = MusicVideosCore.Settings.MinimumArtistHeight;
            }

            maxSize.Width  = MusicVideosCore.Settings.MaximumArtistWidth;
            maxSize.Height = MusicVideosCore.Settings.MaximumArtistHeight;

            bool redownload = MusicVideosCore.Settings.RedownloadArtistArtwork;

            ArtistArt newArtistart = new ArtistArt();

            newArtistart.Filename = GenerateFilename(mv, url);
            status = newArtistart.FromUrl(url, ignoreRestrictions, minSize, maxSize, redownload);

            switch (status)
            {
            case ImageLoadResults.SUCCESS:
                logger.Info("Added artist art for \"{0}\" from: {1}", mv.Artist, url);
                break;

            case ImageLoadResults.SUCCESS_REDUCED_SIZE:
                logger.Debug("Added resized artist art for \"{0}\" from: {1}", mv.Artist, url);
                break;

            case ImageLoadResults.FAILED_ALREADY_LOADED:
                logger.Debug("Artist art for \"{0}\" from the following URL is already loaded: {1}", mv.Artist, url);
                return(null);

            case ImageLoadResults.FAILED_TOO_SMALL:
                logger.Error("Downloaded artist art for \"{0}\" failed minimum resolution requirements: {1}", mv.Artist, url);
                return(null);

            case ImageLoadResults.FAILED:
                logger.Error("Failed downloading artist art for \"{0}\": {1}", mv.Artist, url);
                return(null);
            }

            return(newArtistart);
        }
예제 #18
0
        /// <summary>
        /// Get Local Artist Artwork, check for custom folder or artwork in the same folder as the music video
        /// </summary>
        /// <param name="artistInfo"></param>
        /// <returns></returns>
        public bool GetArtistArt(DBArtistInfo artistInfo)
        {
            if (artistInfo == null)
            {
                return(false);
            }
            logger.Debug("In Method: GetArtistArt(DBArtistInfo artistInfo)");

            // if we already have a artist move on for now
            if (artistInfo.ArtFullPath.Trim().Length > 0 && File.Exists(artistInfo.ArtFullPath.Trim()))
            {
                return(false);
            }

            // Look for Artwork in Mediaportal folder
            return(getMPArtistArt(artistInfo));
        }
예제 #19
0
        /// <summary>
        /// Play by Selected Tag
        /// </summary>
        private void playByTag()
        {
            GUIDialogMenu dlgMenu = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);

            if (dlgMenu != null)
            {
                dlgMenu.Reset();
                dlgMenu.SetHeading(mvCentralUtils.PluginName() + " - " + Localization.SmartPlaylistOptions);
                foreach (string artistTag in artistTags)
                {
                    dlgMenu.Add(artistTag);
                }
                dlgMenu.DoModal(GetID);

                if (dlgMenu.SelectedLabel == -1) // Nothing was selected
                {
                    return;
                }

                //dlgMenu.SelectedLabelText
                PlayList playlist = Player.playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_MVCENTRAL);
                playlist.Clear();
                List <DBArtistInfo> allArtists = DBArtistInfo.GetAll();
                foreach (DBArtistInfo artist in allArtists)
                {
                    if (artist.Tag.Contains(dlgMenu.SelectedLabelText))
                    {
                        List <DBTrackInfo> theTracks = DBTrackInfo.GetEntriesByArtist(artist);
                        foreach (DBTrackInfo artistTrack in theTracks)
                        {
                            playlist.Add(new PlayListItem(artistTrack));
                        }
                    }
                }
                Player.playlistPlayer.CurrentPlaylistType = PlayListType.PLAYLIST_MVCENTRAL;
                playlist.Shuffle();
                Player.playlistPlayer.Play(0);
                if (mvCentralCore.Settings.AutoFullscreen)
                {
                    GUIWindowManager.ActivateWindow((int)GUIWindow.Window.WINDOW_FULLSCREEN_VIDEO);
                }
            }
        }
예제 #20
0
 private void AlbumActions(MediaPortal.GUI.Library.Action.ActionType actionType)
 {
     if ((actionType == Action.ActionType.ACTION_MUSIC_PLAY) || (actionType == Action.ActionType.ACTION_PLAY) || (actionType == Action.ActionType.ACTION_PAUSE))
     {
         if ((actionType == Action.ActionType.ACTION_MUSIC_PLAY) || (actionType == Action.ActionType.ACTION_PLAY) || (actionType == Action.ActionType.ACTION_PAUSE && !g_Player.HasVideo))
         {
             DBArtistInfo       currArtist       = DBArtistInfo.Get(facadeLayout.SelectedListItem.Label);
             List <DBTrackInfo> allTracksOnAlbum = DBTrackInfo.GetEntriesByAlbum((DBAlbumInfo)facadeLayout.SelectedListItem.MusicTag);
             AddToPlaylist(allTracksOnAlbum, true, mvCentralCore.Settings.ClearPlaylistOnAdd, mvCentralCore.Settings.GeneratedPlaylistAutoShuffle);
         }
         else
         {
             _currentView = MvView.Artist;
             artistID     = facadeLayout.SelectedListItem.ItemId;
             logger.Debug("Calling loadCurrent from AlbumActions");
             loadCurrent();
         }
     }
 }
예제 #21
0
        /// <summary>
        /// Get the Artist Artwork using the old Method
        /// </summary>
        /// <param name="mvArtistObject"></param>
        /// <returns></returns>
        private bool getOldArtistArt(DBArtistInfo mvArtistObject)
        {
            logger.Debug("In Method getOldArtistArt(DBArtistInfo mv)");
            bool found = false;

            string        artistartFolderPath = mvCentralCore.Settings.ArtistArtFolder;
            DirectoryInfo artistartFolder     = new DirectoryInfo(artistartFolderPath);

            string safeName          = mvArtistObject.Artist.Replace(' ', '.').ToValidFilename();
            Regex  oldArtistArtRegex = new Regex("^{?" + Regex.Escape(safeName) + "}? \\[-?\\d+\\]\\.(jpg|png)");

            foreach (FileInfo currFile in artistartFolder.GetFiles())
            {
                if (oldArtistArtRegex.IsMatch(currFile.Name))
                {
                    found &= mvArtistObject.AddArtFromFile(currFile.FullName);
                }
            }
            return(found);
        }
예제 #22
0
        /// <summary>
        /// get the artist details
        /// </summary>
        /// <param name="mv"></param>
        /// <returns></returns>
        public DBTrackInfo GetArtistDetail(DBTrackInfo mv)
        {
            // ****************** Additional Artist Info Processing ******************
            // Check and update Artist details from additional providers
            DBArtistInfo artInfo = new DBArtistInfo();

            artInfo = mv.ArtistInfo[0];

            foreach (DBSourceInfo artistExtraInfo in artistDetailSources)
            {
                if (artInfo.PrimarySource != artistExtraInfo.Provider)
                {
                    artInfo = artistExtraInfo.Provider.GetArtistDetail(mv).ArtistInfo[0];
                    artInfo.PrimarySource = artistExtraInfo;
                }
            }
            mv.ArtistInfo[0] = artInfo;

            return(mv);
        }
예제 #23
0
        public bool GetArtistArt(DBArtistInfo mvArtistObject)
        {
            if (mvArtistObject == null)
            {
                return(false);
            }

            int artistartAdded = 0;
            int count          = 0;
            // grab artistart loading settings
            int maxArtistArts = mvCentralCore.Settings.MaxArtistArts;

            lock (mvArtistObject)
            {
                if (mvArtistObject.ArtUrls != null)
                {
                    foreach (string a2 in mvArtistObject.ArtUrls)
                    {
                        if (mvArtistObject.AlternateArts.Count >= maxArtistArts)
                        {
                            break;
                        }

                        if (mvArtistObject.AddArtFromURL(a2) == ImageLoadResults.SUCCESS)
                        {
                            artistartAdded++;
                        }

                        count++;
                    }
                }
                if (artistartAdded > 0)
                {
                    return(true);
                }
            }

            // if we get here we didn't manage to find a proper backdrop
            // so return false
            return(false);
        }
예제 #24
0
        public static ArtistArt FromUrl(DBArtistInfo mv, string url, bool ignoreRestrictions, out ImageLoadResults status)
        {
            ImageSize minSize = null;
            ImageSize maxSize = new ImageSize();

            if (!ignoreRestrictions) {
                minSize = new ImageSize();
                minSize.Width = MusicVideosCore.Settings.MinimumArtistWidth;
                minSize.Height = MusicVideosCore.Settings.MinimumArtistHeight;
            }

            maxSize.Width = MusicVideosCore.Settings.MaximumArtistWidth;
            maxSize.Height = MusicVideosCore.Settings.MaximumArtistHeight;

            bool redownload = MusicVideosCore.Settings.RedownloadArtistArtwork;

            ArtistArt newArtistart = new ArtistArt();
            newArtistart.Filename = GenerateFilename(mv, url);
            status = newArtistart.FromUrl(url, ignoreRestrictions, minSize, maxSize, redownload);

            switch (status) {
                case ImageLoadResults.SUCCESS:
                    logger.Info("Added artist art for \"{0}\" from: {1}", mv.Artist, url);
                    break;
                case ImageLoadResults.SUCCESS_REDUCED_SIZE:
                    logger.Debug("Added resized artist art for \"{0}\" from: {1}", mv.Artist, url);
                    break;
                case ImageLoadResults.FAILED_ALREADY_LOADED:
                    logger.Debug("Artist art for \"{0}\" from the following URL is already loaded: {1}", mv.Artist, url);
                    return null;
                case ImageLoadResults.FAILED_TOO_SMALL:
                    logger.Error("Downloaded artist art for \"{0}\" failed minimum resolution requirements: {1}", mv.Artist, url);
                    return null;
                case ImageLoadResults.FAILED:
                    logger.Error("Failed downloading artist art for \"{0}\": {1}", mv.Artist, url);
                    return null;
            }

            return newArtistart;
        }
예제 #25
0
        public UpdateResults UpdateTrack(DBTrackInfo mv)
        {
            // Have we anything to update?
            if (mv == null)
            {
                return(UpdateResults.FAILED);
            }

            logger.Debug("In Method: UpdateTrack(DBTrackInfo mv)");

            lock (lockObj)
            {
                // Update the Artist
                var artistData = DBArtistInfo.Get(mv);
                if (artistData != null)
                {
                    mv.ArtistInfo[0] = artistData;
                }

                if (mv.ArtistInfo.Count > 0)
                {
                    mv.ArtistInfo[0].PrimarySource = mv.PrimarySource;
                    mv.ArtistInfo[0].Commit();
                }
                // Update the Album
                var albumData = DBAlbumInfo.Get(mv);
                if (albumData != null)
                {
                    mv.AlbumInfo[0] = albumData;
                }

                if (mv.AlbumInfo.Count > 0)
                {
                    mv.AlbumInfo[0].PrimarySource = mv.PrimarySource;
                    mv.AlbumInfo[0].Commit();
                }
            }
            return(UpdateResults.SUCCESS);
        }
예제 #26
0
        /// <summary>
        /// get the artist details and update missing data from this source
        /// </summary>
        /// <param name="mv"></param>
        /// <returns></returns>
        public DBTrackInfo GetArtistDetail(DBTrackInfo mv)
        {
            string strArtistHtml;
            string strArtistUrl;

            // Get details of the artist
            string artist = mv.ArtistInfo[0].Artist;

            if (GetArtistHTML(artist, out strArtistHtml, out strArtistUrl))
            {
                var artistInfo = AMGHTMLParser.ParseArtistHTML(strArtistHtml, artist);
                //var artistInfo = new MusicArtistInfo();
                if (artistInfo != null)
                {
                    artistInfo.Artist = artist;
                    DBArtistInfo mv1 = (DBArtistInfo)mv.ArtistInfo[0];
                    UpdateMusicVideoArtist(ref mv1, artistInfo, strArtistHtml);
                }
            }

            return(mv);
        }
예제 #27
0
        /// <summary>
        /// Get Artist Artwork
        /// </summary>
        /// <param name="mvArtistObject"></param>
        /// <returns></returns>
        public bool GetArtistArt(DBArtistInfo mvArtistObject)
        {
            XmlNodeList xml;

            // Get the images
            // If we have a MBID for this Artist use this to retrive the image otherwise fall back to keyword search
            if (string.IsNullOrEmpty(mvArtistObject.MdID.Trim()))
            {
                xml = getXML(SearchArtistImage, APIKey, mvArtistObject.Artist);
            }
            else
            {
                xml = getXML(SearchArtistImageMBID, APIKey, mvArtistObject.MdID);
            }

            // If we reveived nothing back, bail out
            if (xml == null)
            {
                return(false);
            }

            XmlNode root = xml.Item(0).ParentNode;
            // Get image nodes
            XmlNodeList images         = root.SelectNodes(@"/search/images/image");
            int         artistartAdded = 0;

            // Loop though each nodce and add it
            foreach (XmlNode imageNode in images)
            {
                XmlNode imageIDNode = imageNode.SelectSingleNode("id");
                if (mvArtistObject.AddArtFromURL(string.Format(DownloadImage, APIKey, imageIDNode.InnerText)) == ImageLoadResults.SUCCESS)
                {
                    artistartAdded++;
                }
            }
            return(artistartAdded > 0);
        }
예제 #28
0
        /// <summary>
        /// Get Artist Artwork
        /// </summary>
        /// <param name="mvArtistObject"></param>
        /// <returns></returns>
        public bool GetArtistArt(DBArtistInfo mvArtistObject)
        {
            if (string.IsNullOrEmpty(mvArtistObject.MdID.Trim()))
            {
                return(false);
            }
            logger.Debug("In Method: GetArtistArt(DBArtistInfo mvArtistObject)");

            // Get the images
            // If we have a MBID for this Artist use this to retrive the image otherwise fall back to keyword search
            var html = getJSON(SearchArtistImage, APIKey, mvArtistObject.MdID.Trim());

            // If we reveived nothing back, bail out
            if (string.IsNullOrEmpty(html))
            {
                return(false);
            }

            int artistartAdded = 0;
            var URLList        = new List <string>();

            URLList = ExtractURL("artistthumb", html);
            if (URLList != null)
            {
                foreach (string _url in URLList)
                {
                    var _fileURL = _url.Substring(checked (_url.IndexOf("|") + 1));
                    if (mvArtistObject.AddArtFromURL(_fileURL) == ImageLoadResults.SUCCESS)
                    {
                        artistartAdded++;
                    }
                }
            }

            return(artistartAdded > 0);
        }
예제 #29
0
        /// <summary>
        /// Get the Artist, Album Details
        /// </summary>
        /// <param name="mv"></param>
        /// <returns></returns>
        public bool GetDetails(DBBasicInfo mv)
        {
            string strArtistHTML;
            string strAlbumHTML;
            string strArtistURL;

            ReportProgress(string.Empty);

            // Get details of the artist
            if (mv.GetType() == typeof(DBArtistInfo))
            {
                string artist = ((DBArtistInfo)mv).Artist;
                ReportProgress("Getting Artist...");
                if (GetArtistHTML(artist, out strArtistHTML, out strArtistURL))
                {
                    var artistInfo = AMGHTMLParser.ParseArtistHTML(strArtistHTML, artist);

                    if (artistInfo != null)
                    {
                        artistInfo.Artist = artist;
                        DBArtistInfo mv1 = (DBArtistInfo)mv;
                        SetMusicVideoArtist(ref mv1, artistInfo, strArtistHTML);
                        GetArtistArt((DBArtistInfo)mv);
                        ReportProgress("Done...");
                        return(true);
                    }
                }
                return(false);
            }
            // get details of the album
            if (mv.GetType() == typeof(DBAlbumInfo))
            {
                string             album     = ((DBAlbumInfo)mv).Album;
                List <DBTrackInfo> trackList = DBTrackInfo.GetEntriesByAlbum((DBAlbumInfo)mv);
                DBArtistInfo       artist    = DBArtistInfo.Get(trackList[0]);

                if (GetAlbumHTML(artist.Artist, album, out strAlbumHTML))
                {
                    var albumInfo = AMGHTMLParser.ParseAlbumHTML(strAlbumHTML, album, artist.Artist);
                    if (albumInfo != null)
                    {
                        albumInfo.Artist = album;
                        DBAlbumInfo mv1 = (DBAlbumInfo)mv;
                        SetMusicVideoAlbum(ref mv1, albumInfo);
                    }
                }
                return(false);
            }

            // get details of the track
            if (mv.GetType() == typeof(DBTrackInfo))
            {
                if (((DBTrackInfo)mv).LocalMedia[0].IsDVD)
                {
                    string track = ((DBTrackInfo)mv).Track;
                    GetDVDDetails((DBTrackInfo)mv);
                    return(true);
                }
                else
                {
                    string track = ((DBTrackInfo)mv).Track;
                    GetTrackDetails((DBTrackInfo)mv);
                    return(true);
                }
            }

            return(true);
        }
예제 #30
0
 // generate a filename for a artist art. should be unique based on the source hash
 private static string GenerateFilename(DBArtistInfo mv, string source)
 {
     string artFolder = MusicVideosCore.Settings.ArtistArtFolder;
     string safeName = mv.Artist.Replace(' ', '.').ToValidFilename();
     return artFolder + "\\{" + safeName + "} [" + source.GetHashCode() + "].jpg";
 }
예제 #31
0
 public static ArtistArt FromUrl(DBArtistInfo mv, string url, out ImageLoadResults status)
 {
     return(FromUrl(mv, url, false, out status));
 }
예제 #32
0
 public static ArtistArt FromUrl(string title, string url, bool ignoreRestrictions, out ImageLoadResults status)
 {
     DBArtistInfo mv = new DBArtistInfo();
     mv.Artist = title;
     return FromUrl(mv, url, ignoreRestrictions, out status);
 }
예제 #33
0
 public static ArtistArt FromFile(DBArtistInfo mv, string path)
 {
     throw new NotImplementedException();
 }
예제 #34
0
 public static ArtistArt FromFile(DBArtistInfo mv, string path)
 {
     throw new NotImplementedException();
 }
예제 #35
0
 public static ArtistArt FromUrl(string title, string url, out ImageLoadResults status)
 {
     DBArtistInfo mv = new DBArtistInfo();
     mv.Artist = title;
     return FromUrl(mv, url, false, out status);
 }
예제 #36
0
 public static ArtistArt FromUrl(DBArtistInfo mv, string url, out ImageLoadResults status)
 {
     return FromUrl(mv, url, false, out status);
 }