示例#1
0
        /// <summary>
        /// Returns a listing of all files in a music directory. Typically used to get list of albums for an artist, or list of songs for an album.
        /// </summary>
        /// <param name="id">A string which uniquely identifies the music folder. Obtained by calls to getIndexes or getMusicDirectory.</param>
        /// <returns>MusicFolder object containing info for the specified directory</returns>
        public static MusicFolder GetMusicDirectory(string id)
        {
            Dictionary <string, string> theParameters = new Dictionary <string, string>
            {
                { "id", id }
            };

            Stream theStream = MakeGenericRequest("getMusicDirectory", theParameters);

            StreamReader sr = new StreamReader(theStream);

            string result = sr.ReadToEnd();

            XmlDocument myXML = new XmlDocument();

            myXML.LoadXml(result);

            MusicFolder theFolder = new MusicFolder("ArtistFolder", id);

            if (myXML.ChildNodes[1].Name == "subsonic-response")
            {
                if (myXML.ChildNodes[1].FirstChild.Name == "directory")
                {
                    theFolder.Name = myXML.ChildNodes[1].FirstChild.Attributes["name"].Value;
                    theFolder.Id   = myXML.ChildNodes[1].FirstChild.Attributes["id"].Value;

                    int i = 0;
                    for (i = 0; i < myXML.ChildNodes[1].FirstChild.ChildNodes.Count; i++)
                    {
                        bool isDir = Boolean.Parse(myXML.ChildNodes[1].FirstChild.ChildNodes[i].Attributes["isDir"].Value);

                        if (isDir)
                        {
                            try
                            {
                                theFolder.AddFolder(MusicFolder.FromXml(myXML.ChildNodes[1].FirstChild.ChildNodes[i]));
                            }
                            catch (Exception e)
                            {
                                //todo log
                            }
                        }
                        else
                        {
                            try
                            {
                                theFolder.AddSong(Song.FromXml(myXML.ChildNodes[1].FirstChild.ChildNodes[i]));
                            }
                            catch (Exception)
                            {
                                //todo log
                            }
                        }
                    }
                }
            }

            return(theFolder);
        }
        public MusicFolder FindFolder(string theFolderName)
        {
            MusicFolder theFolder = _Folders.Find(
                delegate(MusicFolder fldr)
            {
                return(fldr.Name == theFolderName);
            }
                );

            return(theFolder);
        }
        /// <summary>
        /// Returns a listing of all files in a music directory. Typically used to get list of albums for an artist, or list of songs for an album.
        /// </summary>
        /// <param name="id">A string which uniquely identifies the music folder. Obtained by calls to getIndexes or getMusicDirectory.</param>
        /// <returns>MusicFolder object containing info for the specified directory</returns>
        public static MusicFolder GetMusicDirectory(string id)
        {
            Dictionary <string, string> theParameters = new Dictionary <string, string>();

            theParameters.Add("id", id);
            Stream theStream = MakeGenericRequest("getMusicDirectory", theParameters);

            StreamReader sr = new StreamReader(theStream);

            string result = sr.ReadToEnd();

            XmlDocument myXML = new XmlDocument();

            myXML.LoadXml(result);

            MusicFolder theFolder = new MusicFolder("ArtistFolder", id);

            if (myXML.ChildNodes[1].Name == "subsonic-response")
            {
                if (myXML.ChildNodes[1].FirstChild.Name == "directory")
                {
                    theFolder.Name = myXML.ChildNodes[1].FirstChild.Attributes["name"].Value;
                    theFolder.id   = myXML.ChildNodes[1].FirstChild.Attributes["id"].Value;

                    int i = 0;
                    for (i = 0; i < myXML.ChildNodes[1].FirstChild.ChildNodes.Count; i++)
                    {
                        bool   isDir = bool.Parse(myXML.ChildNodes[1].FirstChild.ChildNodes[i].Attributes["isDir"].Value);
                        string title = myXML.ChildNodes[1].FirstChild.ChildNodes[i].Attributes["title"].Value;
                        string theId = myXML.ChildNodes[1].FirstChild.ChildNodes[i].Attributes["id"].Value;

                        if (isDir)
                        {
                            theFolder.AddFolder(title, theId);
                        }
                        else
                        {
                            theFolder.AddSong(title, theId);
                        }
                    }
                }
            }

            return(theFolder);
        }
示例#4
0
        public static IEnumerable <Song> ListSongsByAlbumId(string albumId)
        {
            MusicFolder albumContens = Subsonic.GetMusicDirectory(albumId);

            return(albumContens.Songs);
        }
示例#5
0
        public static IEnumerable <string> GetAlbumIds(string artistId)
        {
            MusicFolder folderContents = Subsonic.GetMusicDirectory(artistId);

            return(folderContents.Folders.Select(mf => mf.Id));
        }
示例#6
0
			/// <summary>
			/// Returns an indexed structure of all artists
			/// </summary>
			/// <param name="musicFolderId" required="no">If specified, only return artists in the music folder with the given ID. See getMusicFolders</param>
			/// <param name="ifModifiedSince" required="no">If specified, only return a result if the artist collection has changed since the given time (in milliseconds since 1 Jan 1970).</param>
			/// <returns></returns>
			public async Task<MusicFolder> getIndexes(string musicFolderId = null, string ifModifiedSince = null)
			{
				Dictionary<string, string> parameters = new Dictionary<string, string>();
				 if (!string.IsNullOrEmpty(musicFolderId))
					parameters.Add("musicFolderId", musicFolderId);

				 if (!string.IsNullOrEmpty(ifModifiedSince))
					parameters.Add("ifModifiedSince", ifModifiedSince);

				Stream theStream = await this.MakeGenericRequest("getIndexes", parameters);
				

				StreamReader sr = new StreamReader(theStream);

				string result = sr.ReadToEnd();

				result = result.Replace(responseHead, "").Replace(responseFoot, "");

				XElement indexes = XElement.Parse(result);

				MusicFolder Indexes = new MusicFolder("Root","-1");

				Indexes.Folders.AddRange((from sh in indexes.Elements("shortcut")
												select new MusicFolder 
												{
													id = (string)sh.Attribute("id"),
													Name = (string)sh.Attribute("name"),
													ItemType = SubsonicItem.SubsonicItemType.Folder 

												}).ToList());

				IEnumerable<XElement> ind = indexes.Elements("index");

				Indexes.Folders.AddRange((from art in ind.Elements("artist")
											select new MusicFolder 
											{
												id = (string)art.Attribute("id"),
												Name = (string)art.Attribute("name"),
												ItemType = SubsonicItem.SubsonicItemType.Folder 
											}).ToList());



				Indexes.Songs.AddRange((from nm in indexes.Elements("child")
									select new Song
									{
										Id = (string)nm.Attribute("id"),
										Name = (string)nm.Attribute("title"),
										Album = (string)nm.Attribute("album"),
										Artist = (string)nm.Attribute("artist"),
										Parent = (string)nm.Attribute("parent"),
										CoverArt = (string)nm.Attribute("coverArt"),
										Created = (string)nm.Attribute("created"),
										Duration = (string)nm.Attribute("duration"),
										BitRate = (string)nm.Attribute("bitRate"),
										Track = (string)nm.Attribute("track"),
										Year = (string)nm.Attribute("year"),
										Genre = (string)nm.Attribute("genre"),
										Size = (string)nm.Attribute("size"),
										Suffix = (string)nm.Attribute("suffix"),
										ContentType = (string)nm.Attribute("contentType")
										
									}).ToList());

				return Indexes;
			}
示例#7
0
			public async Task<MusicFolder> search3(string query, string artistCount = null, string artistOffset = null, string albumCount = null, string albumOffset = null, string songCount = null, string songOffset = null)
			{
				Dictionary<string, string> parameters = new Dictionary<string, string>();
				parameters.Add("query", query);
				if (!string.IsNullOrEmpty(artistCount))
					parameters.Add("artistCount", artistCount);
				if (!string.IsNullOrEmpty(artistOffset))
					parameters.Add("artistOffset", artistOffset);
				if (!string.IsNullOrEmpty(albumCount))
					parameters.Add("albumCount", albumCount);
				if (!string.IsNullOrEmpty(albumOffset))
					parameters.Add("albumOffset", albumOffset);
				if (!string.IsNullOrEmpty(songCount))
					parameters.Add("songCount", songCount);
				if (!string.IsNullOrEmpty(songOffset))
					parameters.Add("songOffset", songOffset);

				Stream theStream = await this.MakeGenericRequest("search3", parameters);
				

				StreamReader sr = new StreamReader(theStream);

				string result = sr.ReadToEnd();

				result = result.Replace(responseHead, "").Replace(responseFoot, "");

				XElement Xel = XElement.Parse(result);
				MusicFolder SearchResult = new MusicFolder();
				SearchResult.Artists.AddRange((from nm in Xel.Elements("artist")
											   select new Artist
											   {
												   Id = (string)nm.Attribute("id"),
												   Name = (string)nm.Attribute("name"),
												   CoverArt = (string)nm.Attribute("coverArt"),
												   AlbumCount = (string)nm.Attribute("albumCount")
											   }).ToList());
				SearchResult.Albums.AddRange((from nm in Xel.Elements("album")
											  select new Album
											  {
												  id = (string)nm.Attribute("id"),
												  Name = (string)nm.Attribute("name"),
												  CoverArt = (string)nm.Attribute("coverArt"),
												  SongCount = (string)nm.Attribute("songCount"),
												  Created = (string)nm.Attribute("created"),
												  Duration = (string)nm.Attribute("duration"),
												  Artist = (string)nm.Attribute("artist"),
												  ArtistId = (string)nm.Attribute("artistId")
											  }).ToList());
				SearchResult.Songs.AddRange((from nm in Xel.Elements("song")
											 select new Song
											 {
												 Id = (string)nm.Attribute("id"),
												 Name = (string)nm.Attribute("title"),
												 Album = (string)nm.Attribute("album"),
												 Artist = (string)nm.Attribute("artist"),
												 Parent = (string)nm.Attribute("parent"),
												 CoverArt = (string)nm.Attribute("coverArt"),
												 Created = (string)nm.Attribute("created"),
												 Duration = (string)nm.Attribute("duration"),
												 BitRate = (string)nm.Attribute("bitRate"),
												 Track = (string)nm.Attribute("track"),
												 Year = (string)nm.Attribute("year"),
												 Genre = (string)nm.Attribute("genre"),
												 Size = (string)nm.Attribute("size"),
												 Suffix = (string)nm.Attribute("suffix"),
												 ContentType = (string)nm.Attribute("contentType"),
												 AlbumId = (string)nm.Attribute("albumId"),
												 ArtistId = (string)nm.Attribute("artistId")
											 }).ToList());

				return SearchResult;
			}
示例#8
0
			public async Task<MusicFolder> getStarred2()
			{
				Dictionary<string, string> parameters = new Dictionary<string, string>();

				Stream theStream = await this.MakeGenericRequest("getStarred2", parameters);
				

				StreamReader sr = new StreamReader(theStream);

				string result = sr.ReadToEnd();

				result = result.Replace(responseHead, "").Replace(responseFoot, "");

				XElement Xel = XElement.Parse(result);
				MusicFolder starred = new MusicFolder();
				starred.Artists.AddRange((from nm in Xel.Elements("artist")
										  select new Artist
										  {
											  Id = (string)nm.Attribute("id"),
											  Name = (string)nm.Attribute("name")
										  }).ToList());
				starred.Albums.AddRange((from nm in Xel.Elements("album")
										 select new Album
										 {
											 id = (string)nm.Attribute("id"),
											 Name = (string)nm.Attribute("name"),
											 CoverArt = (string)nm.Attribute("coverArt"),
											 SongCount = (string)nm.Attribute("songCount"),
											 Created = (string)nm.Attribute("created"),
											 Duration = (string)nm.Attribute("duration"),
											 Artist = (string)nm.Attribute("artist"),
											 ArtistId = (string)nm.Attribute("artistId"),
											 starred = (string)nm.Attribute("starred")
										 }).ToList());
				starred.Songs.AddRange((from nm in Xel.Elements("song")
										select new Song
										{
											Id = (string)nm.Attribute("id"),
											Name = (string)nm.Attribute("title"),
											Album = (string)nm.Attribute("album"),
											Artist = (string)nm.Attribute("artist"),
											Parent = (string)nm.Attribute("parent"),
											CoverArt = (string)nm.Attribute("coverArt"),
											Created = (string)nm.Attribute("created"),
											Duration = (string)nm.Attribute("duration"),
											BitRate = (string)nm.Attribute("bitRate"),
											Track = (string)nm.Attribute("track"),
											Year = (string)nm.Attribute("year"),
											Genre = (string)nm.Attribute("genre"),
											Size = (string)nm.Attribute("size"),
											Suffix = (string)nm.Attribute("suffix"),
											ContentType = (string)nm.Attribute("contentType"),
											AlbumId = (string)nm.Attribute("albumId"),
											ArtistId = (string)nm.Attribute("artistId"),
											Starred = (string)nm.Attribute("starred")
										}).ToList());

				return starred;
			}
示例#9
0
			public void AddFolder(string name, string id)
			{
				MusicFolder newFolder = new MusicFolder(name, id);
				_Folders.Add(newFolder);
			}
示例#10
0
			/// <summary>
			/// Returns a listing of all files in a music directory. Typically used to get list of albums for an artist, or list of songs for an album.
			/// </summary>
			/// <param name="id" required="yes">A string which uniquely identifies the music folder. Obtained by calls to getIndexes or getMusicDirectory.</param>
			/// <returns>A music folder</returns>
			public async Task<MusicFolder> getMusicDirectory(string id)
			{
				Dictionary<string, string> parameters = new Dictionary<string, string>();
		
				parameters.Add("id", id);			

				Stream theStream = await this.MakeGenericRequest("getMusicDirectory", parameters);
				

				StreamReader sr = new StreamReader(theStream);

				string result = sr.ReadToEnd();

				result = result.Replace(responseHead, "").Replace(responseFoot, "");

				XElement XDirectory = XElement.Parse(result);

				MusicFolder Directory = new MusicFolder((string)XDirectory.Attribute("name"),(string)XDirectory.Attribute("id"));

				Directory.Folders.AddRange((from dir in XDirectory.Elements("child")
							where dir.Attribute("isDir").Value == "true"
							select new MusicFolder{
								id = (string)dir.Attribute("id"),
								Name = (string)dir.Attribute("name")
							}).ToList());

				Directory.Songs.AddRange((from nm in XDirectory.Elements("child")
										  where nm.Attribute("isDir").Value == "false"
											select new Song 
											{

												Id = (string)nm.Attribute("id"),
												Name = (string)nm.Attribute("title"),
												Album = (string)nm.Attribute("album"),
												Artist = (string)nm.Attribute("artist"),
												Parent = (string)nm.Attribute("parent"),
												CoverArt = (string)nm.Attribute("coverArt"),
												Created = (string)nm.Attribute("created"),
												Duration = (string)nm.Attribute("duration"),
												BitRate = (string)nm.Attribute("bitRate"),
												Track = (string)nm.Attribute("track"),
												Year = (string)nm.Attribute("year"),
												Genre = (string)nm.Attribute("genre"),
												Size = (string)nm.Attribute("size"),
												Suffix = (string)nm.Attribute("suffix"),
												ContentType = (string)nm.Attribute("contentType"),
												AlbumId = (string)nm.Attribute("albumId"),
												ArtistId = (string)nm.Attribute("artistId")

											}).ToList());

				return Directory;
			}
示例#11
0
 public void AddFolder(MusicFolder f)
 {
     _Folders.Add(f);
 }
示例#12
0
        /// <summary>
        /// Returns a listing of all files in a music directory. Typically used to get list of albums for an artist, or list of songs for an album.
        /// </summary>
        /// <param name="id">A string which uniquely identifies the music folder. Obtained by calls to getIndexes or getMusicDirectory.</param>
        /// <returns>MusicFolder object containing info for the specified directory</returns>
        public static MusicFolder GetMusicDirectory(string id)
        {
            Dictionary<string, string> theParameters = new Dictionary<string, string>
            {
                {"id", id}
            };

            Stream theStream = MakeGenericRequest("getMusicDirectory", theParameters);

            StreamReader sr = new StreamReader(theStream);

            string result = sr.ReadToEnd();

            XmlDocument myXML = new XmlDocument();
            myXML.LoadXml(result);

            MusicFolder theFolder = new MusicFolder("ArtistFolder", id);

            if (myXML.ChildNodes[1].Name == "subsonic-response")
            {
                if (myXML.ChildNodes[1].FirstChild.Name == "directory")
                {
                    theFolder.Name = myXML.ChildNodes[1].FirstChild.Attributes["name"].Value;
                    theFolder.Id = myXML.ChildNodes[1].FirstChild.Attributes["id"].Value;

                    int i = 0;
                    for (i = 0; i < myXML.ChildNodes[1].FirstChild.ChildNodes.Count; i++)
                    {
                        bool isDir = Boolean.Parse(myXML.ChildNodes[1].FirstChild.ChildNodes[i].Attributes["isDir"].Value);

                        if (isDir)
                        {
                            try
                            {
                                theFolder.AddFolder(MusicFolder.FromXml(myXML.ChildNodes[1].FirstChild.ChildNodes[i]));
                            }
                            catch (Exception e)
                            {
                                //todo log
                            }
                        }
                        else
                        {
                            try
                            {
                                theFolder.AddSong(Song.FromXml(myXML.ChildNodes[1].FirstChild.ChildNodes[i]));
                            }
                            catch (Exception)
                            {
                                //todo log
                            }
                        }
                    }
                }
            }

            return theFolder;
        }
示例#13
0
        public MusicFolder FindFolder(string theFolderName)
        {
            MusicFolder theFolder = _Folders.Find(fldr => fldr.Name == theFolderName);

            return(theFolder);
        }
示例#14
0
 public void AddFolder(MusicFolder f)
 {
     _Folders.Add(f);
 }
示例#15
0
        public void AddFolder(string name, string id)
        {
            MusicFolder newFolder = new MusicFolder(name, id);

            _Folders.Add(newFolder);
        }
示例#16
0
        /// <summary>
        /// Returns a listing of all files in a music directory. Typically used to get list of albums for an artist, or list of songs for an album.
        /// </summary>
        /// <param name="id">A string which uniquely identifies the music folder. Obtained by calls to getIndexes or getMusicDirectory.</param>
        /// <returns>MusicFolder object containing info for the specified directory</returns>
        public static MusicFolder GetMusicDirectory(string id)
        {
            Dictionary<string, string> theParameters = new Dictionary<string, string>();
            theParameters.Add("id", id);
            Stream theStream = MakeGenericRequest("getMusicDirectory", theParameters);

            StreamReader sr = new StreamReader(theStream);

            string result = sr.ReadToEnd();

            XmlDocument myXML = new XmlDocument();
            myXML.LoadXml(result);

            MusicFolder theFolder = new MusicFolder("ArtistFolder", id);

            if (myXML.ChildNodes[1].Name == "subsonic-response")
            {
                if (myXML.ChildNodes[1].FirstChild.Name == "directory")
                {
                    theFolder.Name = myXML.ChildNodes[1].FirstChild.Attributes["name"].Value;
                    theFolder.id = myXML.ChildNodes[1].FirstChild.Attributes["id"].Value;

                    int i = 0;
                    for (i = 0; i < myXML.ChildNodes[1].FirstChild.ChildNodes.Count; i++)
                    {
                        bool isDir = bool.Parse(myXML.ChildNodes[1].FirstChild.ChildNodes[i].Attributes["isDir"].Value);
                        string title = myXML.ChildNodes[1].FirstChild.ChildNodes[i].Attributes["title"].Value;
                        string theId = myXML.ChildNodes[1].FirstChild.ChildNodes[i].Attributes["id"].Value;

                        if (isDir)
                            theFolder.AddFolder(title, theId);
                        else
                            theFolder.AddSong(title, theId);
                    }
                }
            }

            return theFolder;
        }