/// <summary> /// Get a cached songs details by searching the cache /// </summary> /// <param name="songID"></param> /// <returns></returns> public SongDetails Get(string songID) { var folder = Search(songID); if (folder == null) { if (Logger.logCache) { Logger.Log("Cache does not contain {0}", songID); } return(null); } var cachedfile = folder + "/" + songID; SongDetails details = JsonConvert.DeserializeObject <SongDetails>(File.ReadAllText(cachedfile + ".json")); details.albumArt = Image.FromFile(cachedfile + ".jpeg"); if (Logger.logCache) { Logger.Log("Read from cache: {0}/{1}", Path.GetFileName(folder), songID); } return(details); }
/// <summary> /// Loads a cached version of a file /// </summary> /// <param name="filepath"></param> /// <returns></returns> public SongDetails Load(string filepath, string songID) { string cachedfile = cachedir + Path.DirectorySeparatorChar + SanitizeFilename(Path.GetFileNameWithoutExtension(filepath)) + Path.DirectorySeparatorChar + SanitizeFilename(songID); if (File.Exists(cachedfile + ".json")) { //Read song details from json SongDetails details = JsonConvert.DeserializeObject <SongDetails>(File.ReadAllText(cachedfile + ".json")); //Read album art from jpeg details.albumArt = Image.FromFile(cachedfile + ".jpeg"); if (Logger.logCache) { Logger.Log("Read from cache: {0}/{1}", Path.GetFileName(filepath), songID); } //Return loaded object return(details); } else if (Logger.logCache) { Logger.Log("Cache for {0} does not contain {1}", SanitizeFilename(Path.GetFileNameWithoutExtension(filepath)), SanitizeFilename(songID)); } return(null); }
public void Initialize() { _ = SongDetails.Init().ContinueWith(async x => { this._songDetails = await x; this._init = true; }); }
public static SongDetails createAsong(Mp3_Container container, DataGridViewRow row) { SongDetails song = new SongDetails(row.Cells[1].Value.ToString(), row.Cells[3].Value.ToString(), null, row.Cells[4].Value.ToString(), row.Cells[7].Value.ToString(), row.Cells[2].Value.ToString(), int.Parse(row.Cells[9].Value.ToString()), long.Parse(row.Cells[8].Value.ToString()), row.Cells[10].Value.ToString(), row.Cells[5].Value.ToString(), row.Cells[6].Value.ToString()); return(song); }
protected override void SelectItem(object sender, SelectionChangedEventArgs e) { MainWindow window = (MainWindow)Application.Current.MainWindow; Songs s = (Songs)ItemsContainer.SelectedItem; SongDetails detail = new SongDetails(s.Id); MainView view = (MainView)window.MainFrame.Content; detail.setCurrentPlaylist((Playlists)view.PlaylistListBox.SelectedItem); view.ActivityFrame.Navigate(detail); }
public HttpResponseMessage StartScrobble(SongDetails song) { if (!ModelState.IsValid) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState)); } _lastFmService.StartScrobbleBash(song); return(new HttpResponseMessage(HttpStatusCode.OK)); }
public static string SongDetailsDisplay(SongDetails song) { string toReturn = "null"; if (song != null) { toReturn = $"{song.ArtistName} - {song.SongName}"; } return(toReturn); }
public SongDetails Get(string SongID) { string q = @"SELECT * FROM songs WHERE songid = @songid LIMIT 1"; using (var cmd = Connection.CreateCommand()) { cmd.CommandText = q; cmd.Parameters.AddWithValue("@songid", SongID); using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { var sd = new SongDetails { psarcFileHash = ReadField <string>(reader, "psarcFileHash"), songID = ReadField <string>(reader, "songid"), songName = ReadField <string>(reader, "songname"), artistName = ReadField <string>(reader, "artistname"), albumName = ReadField <string>(reader, "albumname"), songLength = (float)ReadField <double>(reader, "songLength"), albumYear = (int)ReadField <long>(reader, "albumYear"), arrangements = JsonConvert.DeserializeObject <List <ArrangementDetails> >(ReadField <string>(reader, "arrangements")), albumArt = null, toolkit = new ToolkitDetails { version = ReadField <string>(reader, "toolkit_version"), author = ReadField <string>(reader, "toolkit_author"), package_version = ReadField <string>(reader, "toolkit_package_version"), comment = ReadField <string>(reader, "toolkit_comment") } }; try { var blob = ReadField <byte[]>(reader, "album_art"); using (var ms = new MemoryStream(blob)) { sd.albumArt = Image.FromStream(ms); } } catch { } return(sd); } } } return(null); }
public async Task <string> UpdateNowPlaying() { var pandoraInfo = _playerService.GetCurrentSongInfo(); var song = new SongDetails() { Album = pandoraInfo.Album, Artist = pandoraInfo.Artist, Song = pandoraInfo.Song }; return(await _lastFmService.UpdateNowPlaying(song)); }
public static SongDetails createSelectedSong(Mp3_Container container) { SongDetails song = new SongDetails(container.gui.songList.SelectedRows[0].Cells[1].Value.ToString(), container.gui.songList.SelectedRows[0].Cells[3].Value.ToString(), null, container.gui.songList.SelectedRows[0].Cells[4].Value.ToString(), container.gui.songList.SelectedRows[0].Cells[7].Value.ToString(), container.gui.songList.SelectedRows[0].Cells[2].Value.ToString(), Convert.ToInt32(container.gui.songList.SelectedRows[0].Cells[9].Value.ToString()), Convert.ToInt64(container.gui.songList.SelectedRows[0].Cells[8].Value.ToString()), container.gui.songList.SelectedRows[0].Cells[10].Value.ToString(), container.gui.songList.SelectedRows[0].Cells[5].Value.ToString(), container.gui.songList.SelectedRows[0].Cells[6].Value.ToString()); return(song); }
public string StartScrobble() { var pandoraInfo = PandoraService.GetCurrentSongInfo(); var song = new SongDetails() { Album = pandoraInfo.Album, Artist = pandoraInfo.Artist, Song = pandoraInfo.Song }; return(LastFMService.StartScrobbleBash(song)); }
public async Task <string> StartScrobble() { var pandoraInfo = _playerService.GetCurrentSongInfo(); var song = new SongDetails() { Album = pandoraInfo.Album, Artist = pandoraInfo.Artist, Song = pandoraInfo.Song }; return(await _lastFmService.StartScrobble(song)); }
public async Task SongChange(DeezerState deezerState) { if (File.Exists("deezer.json")) { var lastSong = _playerFactoryService.GetCurrentSongInfo(); if ((DateTime.UtcNow - lastSong.LastModifed) > TimeSpan.FromMinutes(1)) { await _lastFMService.StartScrobble(new SongDetails { Album = lastSong.Album, Song = lastSong.Song, Artist = lastSong.Artist }); } } var context = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext <ServerHub>(); if (context == null) { return; } var pandoraInfo = new PandoraResult { Album = deezerState.AlbumName, AlbumUri = deezerState.AlbumUri, Artist = deezerState.ArtistName, IsPlaying = deezerState.IsPlaying, LastModifed = deezerState.UpdatedUtc, Loved = false, Radio = deezerState.StreamName, Song = deezerState.SongName }; RabbitMqService.SongChange(pandoraInfo); context.Clients.All.pandoraRefresh(pandoraInfo); var song = new SongDetails() { Album = pandoraInfo.Album, Artist = pandoraInfo.Artist, Song = pandoraInfo.Song }; await _lastFMService.UpdateNowPlaying(song); var json = JsonConvert.SerializeObject(deezerState); File.WriteAllText("deezer.json", json, Encoding.UTF8); }
private void Sniffer_OnCurrentSongChanged(object sender, OnSongChangedArgs args) { details = args.songDetails; //Write album art if (details.albumArt != null) { WriteImageToFileLocking("output/album_cover.jpeg", details.albumArt); } else { WriteImageToFileLocking("output/album_cover.jpeg", defaultAlbumCover); } }
// // GET: /Song/Details/5 public ActionResult Details(int id = invalidId) { if (id == invalidId) { return(NoId()); } WebHelper.VerifyUserAgent(Request); SetSearchEntryType(EntryType.Song); var model = new SongDetails(Service.GetSongDetails(id, WebHelper.IsValidHit(Request) ? WebHelper.GetRealHost(Request) : string.Empty)); return(View(model)); }
protected override void SelectItem(object sender, SelectionChangedEventArgs e) { if (ItemsContainer.SelectedIndex == -1) { return; } MainWindow window = (MainWindow)Application.Current.MainWindow; Songs s = (Songs)ItemsContainer.SelectedItem; ItemsContainer.SelectedIndex = -1; SongDetails detail = new SongDetails(s.Id); MainView view = (MainView)window.MainFrame.Content; view.ActivityFrame.Navigate(detail); }
public static bool xmlContainsSong(Mp3_Container container, SongDetails song) { bool isFound = false; if (container.xmlFile.xml.ChildNodes[1].ChildNodes[0].ChildNodes[0].HasChildNodes) { foreach (XmlNode xn in container.xmlFile.xml.ChildNodes[1].ChildNodes[0].ChildNodes[0]) { if (xn.ChildNodes[9].InnerText.Equals(song.Path)) { isFound = true; break; } } } return isFound; }
// // GET: /Song/Details/5 public ActionResult Details(int id = invalidId, int albumId = 0) { if (id == invalidId) { return(NoId()); } WebHelper.VerifyUserAgent(Request); SetSearchEntryType(EntryType.Song); var model = new SongDetails(Service.GetSongDetails(id, albumId, WebHelper.IsValidHit(Request) ? WebHelper.GetRealHost(Request) : string.Empty)); PageProperties.Description = model.Notes.Original; return(View(model)); }
// // GET: /Song/Details/5 public ActionResult Details(int id = invalidId, int albumId = 0) { if (id == invalidId) { return(NoId()); } WebHelper.VerifyUserAgent(Request); var contract = queries.GetSongDetails(id, albumId, GetHostnameForValidHit(), null, WebHelper.GetUserLanguageCodes(Request)); var model = new SongDetails(contract, PermissionContext); var hasDescription = !model.Notes.IsEmpty; var prop = PageProperties; prop.GlobalSearchType = EntryType.Song; prop.Title = model.Name; prop.Description = hasDescription ? markdownParser.GetPlainText(model.Notes.EnglishOrOriginal) : new SongDescriptionGenerator().GenerateDescription(contract.Song, Translate.SongTypeNames); prop.OpenGraph.ShowTwitterCard = true; string titleAndArtist; if (!string.IsNullOrEmpty(model.ArtistString)) { titleAndArtist = string.Format("{0} - {1}", model.Name, model.ArtistString); } else { titleAndArtist = model.Name; } prop.PageTitle = titleAndArtist; prop.Subtitle = string.Format("{0} ({1})", model.ArtistString, Translate.SongTypeNames[model.SongType]); if (!string.IsNullOrEmpty(model.ThumbUrlMaxSize)) { prop.OpenGraph.Image = model.ThumbUrlMaxSize; } prop.CanonicalUrl = VocaUriBuilder.CreateAbsolute(Url.Action("Details", new { id })).ToString(); prop.OpenGraph.Title = hasDescription ? string.Format("{0} ({1})", titleAndArtist, Translate.SongTypeNames[model.SongType]) : model.Name; prop.OpenGraph.Type = OpenGraphTypes.Song; return(View(model)); }
internal void OnCurrentSongChanged(object sender, OnSongChangedArgs args) { songDetails = args.songDetails; jsResp.songDetails = songDetails; try { if (songDetails.albumArt != null) { using (MemoryStream ms = new MemoryStream()) { jsResp.songDetails.albumArt.Save(ms, ImageFormat.Jpeg); jsResp.albumCoverBase64 = Convert.ToBase64String(ms.ToArray()); } } } catch { //Catch all errors related to album art } }
/// <summary> /// 根据歌曲获得最多不超过六个的专辑封面地址(分别根据专辑名 *10 、歌手名、歌曲名+专辑名、歌曲名+歌手名获取) /// </summary> /// <param name="SelectedIndex"></param> /// <returns></returns> private string[] GetTotalAlbumPictures(SongDetails SongDetail) { string[] Results = new string[13]; string Result = string.Empty; string[] TmpResult = GetMultiAlbumPictures(string.IsNullOrEmpty(SongDetail.Album) ? SongDetail.Title : SongDetail.Album); int i = -1; if (TmpResult != null) { for (i = 0; i < TmpResult.Length; i++) { Results[i] = TmpResult[i]; } } //Warning: 虽然这样可以提高专辑封面的匹配准确度,但是会被豆瓣API封,测试过程中暂不开放 /* * i++; * Result = GetSingleAlbumPicture(SongDetail.Artist); * Results[i] = Result; * i++; * Result = GetSingleAlbumPicture(SongDetail.Title + " " + SongDetail.Album); * Results[i] = Result; * i++; * Result = GetSingleAlbumPicture(SongDetail.Title + " " + SongDetail.Artist); * Results[i] = Result; */ List <string> list = new List <string>(); for (int j = 0; j < Results.Length; j++) { if ((!string.IsNullOrEmpty(Results[j])) && (list.IndexOf(Results[j].ToLower()) == -1) && (Results[j].IndexOf("music-default") == -1)) { list.Add(Results[j]); } } return(list.ToArray()); }
public ActionResult SongDetails(int?id) { var song = libContext.Songs.Find(id); if (id == null || song == null) { return(RedirectToAction("Index")); /// httpnotfoundresult } var songDetails = new SongDetails { Artist = libContext.Artists.Find(song.ArtistId).Name, // !!!! Name = song.Name, Cover = song.Cover, Src = song.Src }; return(View(songDetails)); }
public static bool songListContains(Mp3_Container container, SongDetails song) { bool isFound = false; foreach (DataGridViewRow row in container.gui.songList.Rows) { if (row.Cells[0].Value == null && row.Cells[1].Value == null && row.Cells[2].Value == null && row.Cells[3].Value == null && row.Cells[4].Value == null && row.Cells[5].Value == null && row.Cells[6].Value == null && row.Cells[7].Value == null && row.Cells[8].Value == null) { break; } if (row.Cells[1].Value.ToString() == song.SongName && row.Cells[2].Value.ToString() == song.Length && row.Cells[3].Value.ToString() == song.Artist && row.Cells[4].Value.ToString() == song.Genre) { isFound = true; break; } } return isFound; }
// executes when top 40 xml data has been downloaded // you can directly manipulate the xml file via XDocument xdox if you wish void svc_GetTop40Completed(object sender, GetTop40CompletedEventArgs e) { // parse downloaded xml into an instance of Xdocument called xdoc XDocument xdoc = XDocument.Parse(e.Result); // Create new list for songs in SongDetails class // For each top 40 'song' read in downloaded xml file add it to list // Use linq query to find each song in xml file // Use XElement method to parse xml to get to 'alt' and 'source' attributes of element 'img' foreach (XElement item in xdoc.Elements("query").Elements("results").Elements("img")) { // Create new song for each one in Top 40 (track name and cover art URL) and add to contentList list SongDetails content = new SongDetails(); content.SongName = item.FirstAttribute.Value; content.ImageSource = item.FirstAttribute.NextAttribute.Value; content.SongArtist = item.NextNode.ToString().TrimStart("<a>".ToCharArray()).TrimEnd("</a>".ToCharArray()); contentList.Add(content); } // add songs to ListBox for displaying from contentList list songList.ItemsSource = contentList.ToList(); }
private SongPlayInstance ParseSongPlayInstance(SQLiteDataReader reader) { SongPlayInstance toReturn = null; var songDetails = new SongDetails { songID = ReadField <string>(reader, "songid"), songName = ReadField <string>(reader, "songname"), artistName = ReadField <string>(reader, "artistname"), albumName = ReadField <string>(reader, "albumname"), songLength = (float)ReadField <double>(reader, "songLength"), albumYear = (int)ReadField <long>(reader, "albumYear"), arrangements = JsonConvert.DeserializeObject <List <ArrangementDetails> >(ReadField <string>(reader, "arrangements")), albumArt = null }; //try //{ // byte[] blob = ReadField<byte[]>(reader, "album_art"); // songDetails.albumArt = this.DeserializeImage(blob); //} //catch //{ //} var noteDetails = new LearnASongNoteData(); DateTime startTime = ReadField <DateTime>(reader, "start_time"); DateTime endTime = ReadField <DateTime>(reader, "end_time"); toReturn = new SongPlayInstance(songDetails, noteDetails, startTime, endTime); toReturn.NotesHit = (int)ReadField <long>(reader, "notes_hit"); toReturn.NotesMissed = (int)ReadField <long>(reader, "notes_missed"); toReturn.TotalNotes = (int)ReadField <long>(reader, "total_notes"); toReturn.HighestHitStreak = (int)ReadField <long>(reader, "max_streak"); return(toReturn); }
/// <summary> /// Reads psarc file from filepath and populates details with information /// </summary> /// <param name="filepath"></param> /// <param name="details"></param> internal static Dictionary <string, SongDetails> ReadPSARCHeaderData(FileInfo fileInfo) { //Wait for the file to exist WaitForFile(fileInfo); if (!fileInfo.Exists) { Logger.LogError("Warning! Psarc file {0} does not exist!", fileInfo.FullName); return(null); } var sw = new Stopwatch(); sw.Start(); string fileHash = GetFileHash(fileInfo); var detailsDict = new Dictionary <string, SongDetails>(); using (PsarcFile loader = new PsarcFile(fileInfo)) { //Extract toolkit info var tkInfo = loader.ExtractToolkitInfo(); List <SongArrangement> manifests; try { manifests = loader.ExtractArrangementManifests(); } catch (Exception e) { Logger.LogError("Warning! Could not parse psarc file {0}: {1}", fileInfo.Name, e.Message); return(null); } //Extract all arrangements foreach (var v in manifests) { if (v == null) { Logger.LogError("Unable to process JSON manifest for {0}", fileInfo.Name); continue; } var arrangement = v.Attributes; var arrangement_id = arrangement.PersistentID; var arrangementSng = loader.InflateEntry <SngAsset>(a => a.Path.Equals($"songs/bin/generic/{arrangement.SongXml.Substring(20)}.sng")); ArrangementData arrangementData = new ArrangementData(arrangementSng); if (arrangement.Phrases != null) { if (!detailsDict.ContainsKey(arrangement.SongKey)) { detailsDict[arrangement.SongKey] = new SongDetails(); } SongDetails details = detailsDict[arrangement.SongKey]; if (details.albumArt == null) { try { details.albumArt = loader.ExtractAlbumArt(arrangement).Bitmap; } catch (Exception e) { Logger.LogError("Warning: couldn't extract album art for {0}", arrangement.SongName); #if DEBUG Logger.LogException(e); #endif details.albumArt = new Bitmap(1, 1); } } //Get a list of all sections var sections = new List <ArrangementDetails.SectionDetails>(); Dictionary <string, int> sectionCounts = new Dictionary <string, int>(); foreach (var sect in arrangement.Sections) { if (!sectionCounts.ContainsKey(sect.Name)) { sectionCounts[sect.Name] = 1; } var sectionDetails = new ArrangementDetails.SectionDetails { name = $"{sect.Name} {sectionCounts[sect.Name]}", startTime = sect.StartTime, endTime = sect.EndTime }; sections.Add(sectionDetails); sectionCounts[sect.Name]++; } //Get a list of all phraseIterations var phraseIterations = new List <ArrangementDetails.PhraseIterationDetails>(); Dictionary <string, int> phraseIterationCounts = new Dictionary <string, int>(); foreach (var phrI in arrangement.PhraseIterations) { if (!phraseIterationCounts.ContainsKey(phrI.Name)) { phraseIterationCounts[phrI.Name] = 1; } var phraseIterationDetails = new ArrangementDetails.PhraseIterationDetails { name = $"{phrI.Name} {phraseIterationCounts[phrI.Name]}", phraseId = phrI.PhraseIndex, maxDifficulty = phrI.MaxDifficulty, startTime = phrI.StartTime, endTime = phrI.EndTime }; phraseIterations.Add(phraseIterationDetails); phraseIterationCounts[phrI.Name]++; } //Build arrangement details var arrangementDetails = new ArrangementDetails { name = arrangement.ArrangementName, arrangementID = arrangement_id, sections = sections, phraseIterations = phraseIterations, data = arrangementData, isBonusArrangement = (arrangement.ArrangementProperties.BonusArr == 1), isAlternateArrangement = (arrangement.ArrangementProperties.Represent == 0) }; //Determine path type if (arrangement.ArrangementProperties.PathLead == 1) { arrangementDetails.type = "Lead"; } else if (arrangement.ArrangementProperties.PathRhythm == 1) { arrangementDetails.type = "Rhythm"; } else if (arrangement.ArrangementProperties.PathBass == 1) { arrangementDetails.type = "Bass"; } arrangementDetails.tuning = new ArrangementTuning(arrangement.Tuning, (int)arrangement.CentOffset, (int)arrangement.CapoFret); //file hash details.psarcFileHash = fileHash; //Get general song information details.songID = arrangement.SongKey; details.songLength = arrangement.SongLength; details.songName = arrangement.SongName; details.artistName = arrangement.ArtistName; details.albumName = arrangement.AlbumName; details.albumYear = arrangement.SongYear; details.arrangements.Add(arrangementDetails); //Apply toolkit information details.toolkit = new ToolkitDetails { version = tkInfo.PackageVersion, author = tkInfo.PackageAuthor, comment = tkInfo.PackageComment, package_version = tkInfo.PackageVersion }; } } sw.Stop(); Logger.Log("Parsed {0} ({1}mb) in {2}ms and found {3} songs", fileInfo.Name, fileInfo.Length / 1024 / 1024, sw.ElapsedMilliseconds, detailsDict.Count); return(detailsDict); } }
/// <summary> /// Reads psarc file from filepath and populates details with information /// </summary> /// <param name="filepath"></param> /// <param name="details"></param> internal static Dictionary <string, SongDetails> ReadPSARCHeaderData(string filepath) { //Check that the file exists, just in case if (!File.Exists(filepath)) { Logger.LogError("Warning! Psarc file {0} does not exist!", filepath); return(null); } var sw = new Stopwatch(); sw.Start(); //If its big, print a warning var fileinfo = new FileInfo(filepath); long size = fileinfo.Length; var detailsDict = new Dictionary <string, SongDetails>(); using (LazyPsarcLoader loader = new LazyPsarcLoader(filepath)) { //Extract toolkit info var tkInfo = loader.ExtractToolkitInfo(); //Extract all arrangements foreach (var v in loader.ExtractJsonManifests()) { var attr = v.Entries.ToArray()[0].Value.ToArray()[0].Value; if (attr.Phrases != null) { if (!detailsDict.ContainsKey(attr.SongKey)) { detailsDict[attr.SongKey] = new SongDetails(); } SongDetails details = detailsDict[attr.SongKey]; if (details.albumArt == null) { try { details.albumArt = ExtractAlbumArt(loader, attr.AlbumArt); } catch (Exception e) { Logger.LogError("Warning: couldn't extract album art for {0}", attr.SongName); details.albumArt = new Bitmap(1, 1); } } details.songID = attr.SongKey; details.songLength = (float)(attr.SongLength ?? 0); details.songName = attr.SongName; details.artistName = attr.ArtistName; details.albumName = attr.AlbumName; details.albumYear = attr.SongYear ?? 0; details.numArrangements++; details.toolkit = new ToolkitDetails { version = tkInfo.PackageVersion, author = tkInfo.PackageAuthor, comment = tkInfo.PackageComment, package_version = tkInfo.PackageVersion }; } } sw.Stop(); Logger.Log("Parsed {0} ({1}mb) in {2}ms and found {3} songs", fileinfo.Name, fileinfo.Length / 1024 / 1024, sw.ElapsedMilliseconds, detailsDict.Count); return(detailsDict); } }
private void SnifferService_SongEnded(object sender, RockSnifferLib.Events.OnSongEndedArgs args) { this.songDetails = new SongDetails(); this.ssvm.Reset(); }
private void SnifferService_SongStarted(object sender, RockSnifferLib.Events.OnSongStartedArgs args) { this.songDetails = args.song; this.ssvm.Sections = new List <ArrangementDetails.SectionDetails>(); }
public void UpdateSong(SongDetails songDetails) { this.npvm.SongDetails = songDetails; }
internal void OnCurrentSongChanged(object sender, OnSongChangedArgs args) { songDetails = args.songDetails; jsResp.songDetails = songDetails; }
/// <summary> /// 根据歌曲获得最多不超过六个的专辑封面地址(分别根据专辑名 *10 、歌手名、歌曲名+专辑名、歌曲名+歌手名获取) /// </summary> /// <param name="SelectedIndex"></param> /// <returns></returns> private string[] GetTotalAlbumPictures(SongDetails SongDetail) { string[] Results = new string[13]; string Result = string.Empty; string[] TmpResult = GetMultiAlbumPictures(string.IsNullOrEmpty(SongDetail.Album) ? SongDetail.Title : SongDetail.Album); int i = -1; if (TmpResult != null) { for (i = 0; i < TmpResult.Length; i++) { Results[i] = TmpResult[i]; } } //Warning: 虽然这样可以提高专辑封面的匹配准确度,但是会被豆瓣API封,测试过程中暂不开放 /* i++; Result = GetSingleAlbumPicture(SongDetail.Artist); Results[i] = Result; i++; Result = GetSingleAlbumPicture(SongDetail.Title + " " + SongDetail.Album); Results[i] = Result; i++; Result = GetSingleAlbumPicture(SongDetail.Title + " " + SongDetail.Artist); Results[i] = Result; */ List<string> list = new List<string>(); for (int j = 0; j < Results.Length; j++) { if ((!string.IsNullOrEmpty(Results[j])) && (list.IndexOf(Results[j].ToLower()) == -1) && (Results[j].IndexOf("music-default") == -1)) list.Add(Results[j]); } return list.ToArray(); }