예제 #1
0
        static void ReadFileImage(iTunesAlbum folder, iTunesSong song)
        {
            if (folder.HasImage)
            {
                return;
            }

            string uncFilePath = GetUncFileName(song.Path);


            string folderPath = ResolveImage(uncFilePath, "folder", false);

            if (System.IO.File.Exists(folderPath))
            {
                folder.PrimaryImagePath = folderPath;
            }

            string backPath = ResolveImage(uncFilePath, "backdrop", true);

            if (System.IO.File.Exists(backPath))
            {
                folder.BackdropImagePath = backPath;
            }

            backPath = ResolveImage(Directory.GetParent(Path.GetDirectoryName(uncFilePath)).FullName, "backdrop", false);
            if (System.IO.File.Exists(backPath))
            {
                if (folder.Parent != null)
                {
                    folder.Parent.BackdropImagePath = backPath;
                }
            }
        }
예제 #2
0
        private static iTunesSong BuildSong(iTunesArtist childArtistFolder, iTunesAlbum childAlbumFolder, Dictionary <string, string> data)
        {
            iTunesSong newSong = new iTunesSong();

            newSong.SongName = data["Name"];
            newSong.Name     = data["Name"];
            newSong.Path     = GetUncFileName(data["Location"]);
            newSong.Id       = newSong.Path.GetMD5();
            childAlbumFolder.Songs.Add(newSong);
            childAlbumFolder.Parent = childArtistFolder;
            return(newSong);
        }
예제 #3
0
        public static iTunesMusicLibrary GetDetailsFromXml(iTunesMusicLibrary existingLibrary)
        {
            string path = Settings.Instance.iTunesLibraryXMLPath;

            if (!File.Exists(path))
            {
                throw new FileNotFoundException("iTunesLibraryXMLPath " + path + " not found!");
            }

            XPathDocument  doc = new XPathDocument(path);
            XPathNavigator nav = doc.CreateNavigator();

            // Move to plist, then master library and tracks
            nav.MoveToChild("plist", "");
            nav.MoveToChild("dict", "");
            nav.MoveToChild("dict", "");
            Dictionary <string, iTunesArtist> dictionaryArtist      = new Dictionary <string, iTunesArtist>();
            Dictionary <string, iTunesAlbum>  dictionaryAlbum       = new Dictionary <string, iTunesAlbum>();
            Dictionary <string, iTunesAlbum>  dictionaryUniqueAlbum = new Dictionary <string, iTunesAlbum>();
            Dictionary <string, iTunesGenre>  dictionaryGenre       = new Dictionary <string, iTunesGenre>();
            iTunesArtist childArtistFolder;
            iTunesAlbum  childAlbumFolder;
            iTunesGenre  childGenreFolder = null;
            iTunesAlbum  childUniqueAlbumFolder;

            // Move to first track info
            bool success = nav.MoveToChild("dict", "");
            //int count = 0;
            // Read each song until we have enough or no more
            iTunesMusicLibrary folder;

            if (existingLibrary == null)
            {
                folder = new iTunesMusicLibrary();
            }
            else
            {
                folder = existingLibrary;
                ClearCache(folder);
            }

            folder.LastUpdate = DateTime.Now;

            while (success)
            {
                success = nav.MoveToFirstChild();

                // Read each piece of information about the song
                Dictionary <string, string> data = new Dictionary <string, string>();
                while (success)
                {
                    string key = nav.Value;
                    nav.MoveToNext();
                    data[key] = nav.Value;
                    success   = nav.MoveToNext();
                }

                if (!data.ContainsKey("Name"))
                {
                    data.Add("Name", "");
                }
                if (!data.ContainsKey("Artist"))
                {
                    data.Add("Artist", "");
                }
                if (!data.ContainsKey("Album"))
                {
                    data.Add("Album", "");
                }
                if (!data.ContainsKey("Genre"))
                {
                    data.Add("Genre", "");
                }

                string uncPath = GetUncFileName(data["Location"]);

                if (string.IsNullOrEmpty(data["Artist"]) || string.IsNullOrEmpty(data["Album"]))
                {
                    success = NewElement(nav, success);
                    continue;
                }
#if !DEBUG
                else if (!File.Exists(uncPath))
                {
                    Logger.ReportError(string.Format("MusicPlugin, file {0} does not exist, not added to iTunes Library", uncPath));
                    success = NewElement(nav, success);
                    continue;
                }
#endif
                else if (!MusicHelper.IsMusic(uncPath))
                {
                    Logger.ReportError(string.Format("MusicPlugin, file {0} is not supported, not added to iTunes Library", uncPath));
                    success = NewElement(nav, success);
                    continue;
                }

                childGenreFolder = BuildGenre(dictionaryGenre, childGenreFolder, folder, data);

                childArtistFolder = BuildArtist(dictionaryArtist, childGenreFolder, folder, data);

                childAlbumFolder = BuildAlbum(dictionaryAlbum, childArtistFolder, data);

                iTunesSong newSong = BuildSong(childArtistFolder, childAlbumFolder, data);

                ReadFileImage(childAlbumFolder, newSong);

                if (dictionaryUniqueAlbum.ContainsKey(data["Album"]))
                {
                    childUniqueAlbumFolder = dictionaryUniqueAlbum[data["Album"]];
                }
                else
                {
                    childUniqueAlbumFolder           = new iTunesAlbum();
                    childUniqueAlbumFolder.Name      = data["Album"];
                    childUniqueAlbumFolder.AlbumName = data["Album"];
                    childUniqueAlbumFolder.Id        = childUniqueAlbumFolder.AlbumName.GetMD5();
                    folder.Albums.Add(childUniqueAlbumFolder);
                    dictionaryUniqueAlbum.Add(data["Album"], childUniqueAlbumFolder);
                }
                childUniqueAlbumFolder.Songs.Add(newSong);
                childUniqueAlbumFolder.PrimaryImagePath  = childAlbumFolder.PrimaryImagePath;
                childUniqueAlbumFolder.BackdropImagePath = childAlbumFolder.BackdropImagePath;

                success = NewElement(nav, success);
            }

            if (Settings.Instance.ShowPlaylistAsFolder)
            {
                AddSpecialMusicFolder(folder);
            }

            return(folder);
        }