static async Task <SearchResult> SearchAll(string key) { var items = new List <IMusic>(); var sr = new SearchResult { Items = items, Keyword = key, Page = -1, SearchType = EnumSearchType.all, }; dynamic obj = await NetAccess.Json(XiamiUrl.url_search_all, "key", key); if (obj == null) { return(sr); } foreach (var type in new string[] { "song", "album", "artist", "collect" }) { dynamic data = obj[type + "s"]; if (data == null) { continue; } foreach (dynamic x in data) { items.Add(MusicFactory.CreateFromJson(x, (EnumMusicType)Enum.Parse(typeof(EnumMusicType), type))); } } return(sr); }
void OnMp3PlayerSongChanged(object sender, SongChangedEventArgs e) { source.Clear(); SongViewModel svm = SongViewModel.GetId(e.Id); if (svm == null) { return; } var lrcPath = Path.Combine(Global.AppSettings["DownloadFolder"], svm.FileNameBase + ".lrc"); if (!File.Exists(lrcPath)) { lrcPath = Path.Combine(Global.BasePath, "cache", e.Id + ".lrc"); } if (!File.Exists(lrcPath)) { Task.Run(async() => { var url = svm.Song.UrlLrc; if (string.IsNullOrEmpty(url)) { var json = await NetAccess.Json(XiamiUrl.url_song, "id", svm.Id); if (json.song != null) { json = json.song; } url = MusicHelper.Get(json, "lyric", "song_lrc"); if (string.IsNullOrEmpty(url)) { return; } } string lrcText = await Http.Get(url, null); File.WriteAllText(lrcPath, lrcText); var f = LyricViewModel.LoadLrcFile(lrcPath); UIHelper.RunOnUI(() => { foreach (var item in f) { source.Add(item); } timelist = source.Select(x => x.Time.TotalMilliseconds).ToArray(); }); }); return; } var s = LyricViewModel.LoadLrcFile(lrcPath); foreach (var item in s) { source.Add(item); } timelist = source.Select(x => x.Time.TotalMilliseconds).ToArray(); }
void OnMp3PlayerSongChanged(object sender, SongChangedEventArgs e) { if (SongViewModel.NowPlaying != null) { SongViewModel.NowPlaying.IsNowPlaying = false; } SongViewModel.NowPlaying = SongViewModel.GetId(e.Id); if (SongViewModel.NowPlaying != null) { Task.Run(() => { if (!Mp3Player.IsPlaying) { return; } var id = SongViewModel.NowPlaying.Id; System.Threading.Thread.Sleep(10000); if (SongViewModel.NowPlaying.Id != id) { return; } NetAccess.Json(XiamiUrl.url_playlog, "uid", Global.AppSettings["xiami_uid"], "id", id); // XiamiClient.GetDefault().Call_xiami_api("Playlog.add", // "id=" + SongViewModel.NowPlaying.Id, // "time=" + XiamiClient.DateTimeToUnixTimestamp(DateTime.Now).ToString(), // "type=20" //); }); SongViewModel.NowPlaying.IsNowPlaying = true; var now = SongViewModel.NowPlaying; info_now.Visibility = Visibility.Visible; part_nowPlaying.DataContext = now; Title = string.Format("{0} - {1} ", now.Name, now.ArtistName); counter = 0; if (trayIcon != null && Global.AppSettings["ShowNowPlaying"] != "0" && Mp3Player.IsPlaying) { balloonTip = new MyBalloonTip(); balloonTip.ViewModel = now; trayIcon.ShowCustomBalloon(balloonTip, PopupAnimation.Fade, 3000); } } ActionBarService.Refresh(); refreshPlause(); currentList.PerformAction("选中正在播放"); }
async static Task <SearchResult> _searchByKey(string keyword, int page, EnumMusicType type = EnumMusicType.song) { dynamic obj = await NetAccess.Json(XiamiUrl.url_search_all, "key", keyword, "page", page.ToString()); ///////////// if (obj == null) { return(null); } //string typestr = type.ToString(); //dynamic obj = await XiamiClient.GetDefault().Call_xiami_api(string.Format("Search.{0}s", typestr), // string.Format("\"key={0}\"", keyword), // string.Format("page={0}", page)); //if (obj == null) return null; dynamic data = obj[type.ToString() + "s"]; if (data == null) { return(null); } var items = new List <IMusic>(); foreach (dynamic x in data) { items.Add(MusicFactory.CreateFromJson(x, type)); } var searchType = EnumSearchType.song; Enum.TryParse <EnumSearchType>(type.ToString(), out searchType); bool hasNext = page.ToString() != obj["next"]; var res = new SearchResult { Items = items, Keyword = keyword, Page = page, HasNext = hasNext, SearchType = searchType, }; return(res); }
static async Task <SearchResult> getByType(EnumSearchType type, string id) { List <IMusic> items = new List <IMusic>(); dynamic json = null; switch (type) { case EnumSearchType.song: json = await NetAccess.Json(XiamiUrl.url_song, "id", id); items = GetSong(json); break; case EnumSearchType.album: json = await NetAccess.Json(XiamiUrl.url_album, "id", id); items = GetAlbum(json); break; case EnumSearchType.album_song: json = await NetAccess.Json(XiamiUrl.url_album, "id", id); items = GetSongsOfAlbum(json); break; case EnumSearchType.artist_song: json = await NetAccess.Json(XiamiUrl.url_artist_top_song, "id", id); items = GetSongsOfArtist(json); break; case EnumSearchType.artist: json = await NetAccess.Json(XiamiUrl.url_artist, "id", id); items = GetArtist(json); break; case EnumSearchType.collect: case EnumSearchType.collect_song: json = await NetAccess.Json(XiamiUrl.url_collect, "id", id); getCollectDetails(json["collect"]["id"].ToString()); items = GetSongsOfCollect(json); break; case EnumSearchType.artist_artist: json = await NetAccess.Json(XiamiUrl.url_artsit_similars, "id", id); items = GetSimilarsOfArtist(json); break; case EnumSearchType.artist_album: json = await NetAccess.Json(XiamiUrl.url_artist_albums, "id", id); items = GetAlbumsOfArtist(json); break; default: break; } if (json == null) { return(null); } if (type.ToString().Contains("_")) { var duo = type.ToString().Split("_".ToCharArray()); id = duo[0] + ":" + id; Enum.TryParse(duo[1], out type); } else { id = type.ToString() + ":" + id; type = EnumSearchType.all; } var res = new SearchResult { Items = items, Keyword = id, SearchType = type, Page = 1, }; return(res); }
static async Task getUserMusic(string key) { bool isKeyValidMusicType = new Regex("^(song|album|artist|collect)$").IsMatch(key.Trim()); var searchType = EnumSearchType.song; var musicType = EnumMusicType.song; if (isKeyValidMusicType) { Enum.TryParse(key, out searchType); Enum.TryParse(key, out musicType); } int page = 1; while (true) { dynamic obj = null; if (key == "daily") { obj = await XiamiClient.GetDefault().Call_xiami_api("Recommend.DailySongs"); } else if (key == "guess") { if (!isGuessUsed) { await Http.Get("http://www.xiami.com/index/feeds", null); isGuessUsed = true; } musicType = EnumMusicType.all; searchType = EnumSearchType.all; var html = await Http.Get(string.Format(XiamiUrl.url_recommend_guess, page), null); var doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(html); obj = new JObject(); obj.alls = new JArray(); HtmlNodeCollection nodes = null; nodes = doc.DocumentNode.SelectNodes("*[contains(concat(' ', @class, ' '), ' album ')]"); if (nodes != null) { foreach (var x in nodes) { string id, name, artist_id, artist_name; string logo = x.SelectSingleNode(".//img").Attributes["src"].Value; getIdName(x, "/album/", out id, out name); getIdName(x, "/artist/", out artist_id, out artist_name); try { obj.alls.Add(JObject.Parse(string.Format(@" {{ Type: 'album', album_id : '{0}', album_name : '{1}', artist_id : '{2}', artist_name : '{3}', logo:'{4}', }}", id, name, artist_id, artist_name, logo))); } catch { } } } nodes = doc.DocumentNode.SelectNodes("*[contains(concat(' ', @class, ' '), ' collect ')]"); if (nodes != null) { foreach (var x in nodes) { string id, name, artist_id, artist_name; string logo = x.SelectSingleNode(".//img").Attributes["src"].Value; getIdName(x, "/song/showcollect/id/", out id, out name); getIdName(x, "/u/", out artist_id, out artist_name); try { obj.alls.Add(JObject.Parse(string.Format(@" {{ Type: 'collect', list_id : '{0}', collect_name : '{1}', user_id : '{2}', user_name : '{3}', logo:'{4}', }}", id, name, artist_id, artist_name, logo))); } catch { } } } } else if (key == "collect_recommend") { musicType = EnumMusicType.collect; searchType = EnumSearchType.collect; obj = await XiamiClient.GetDefault().Call_xiami_api("Collects.recommend"); } else if (isKeyValidMusicType) { obj = await NetAccess.Json(XiamiUrl.url_lib_music, "music", key, "uid", Global.AppSettings["xiami_uid"], "page", page.ToString()); } else { Logger.Error(new Exception("user:"******" is not supported")); break; } if (obj == null) { break; } var items = new List <IMusic>(); if (obj[musicType.ToString() + "s"] != null) { obj = obj[musicType.ToString() + "s"] as dynamic; } foreach (dynamic item in obj) { try { EnumMusicType t = musicType; if (item["Type"] != null) { Enum.TryParse(item["Type"].ToString(), out t); } items.Add(MusicFactory.CreateFromJson(item, t)); } catch (Exception e) { } } var sr = new SearchResult { Keyword = "user:"******"song") { foreach (Song item in sr.Items) { item.InFav = true; } } SearchManager.notifyState(sr); //if (obj.more != null && obj.more != "true") // break; page++; } }
void btn_import_click(object sender, RoutedEventArgs e) { var dir = Global.AppSettings["DownloadFolder"]; Task.Run(async() => { var buffer = new List <IMusic>(); int bufferLength = 10; var mp3s = Directory.EnumerateFiles(dir, "*.mp3").ToArray(); foreach (var item in mp3s) { try { var mp3 = TagLib.File.Create(item); var tags = mp3.Tag; if (tags.Comment == null) { continue; } var id = ""; var artistid = ""; var albumid = ""; var logo = ""; var m = reg_ids.Match(tags.Comment); if (!m.Success) { m = reg.Match(tags.Comment); if (!m.Success) { continue; } id = m.Groups[1].Value; var obj = await NetAccess.Json(XiamiUrl.url_song, "id", id); artistid = MusicHelper.Get(obj["song"], "artist_id"); albumid = MusicHelper.Get(obj["song"], "album_id"); logo = StringHelper.EscapeUrl(MusicHelper.Get(obj["song"], "logo")); tags.Comment = string.Join(" ", new[] { id, artistid, albumid }); mp3.Save(); } else { id = m.Groups[1].Value; artistid = m.Groups[2].Value; albumid = m.Groups[3].Value; } var art = System.IO.Path.Combine(Global.BasePath, "cache", albumid + ".art"); if (!File.Exists(art)) { if (string.IsNullOrEmpty(logo)) { var obj = await NetAccess.Json(XiamiUrl.url_song, "id", id); logo = StringHelper.EscapeUrl(MusicHelper.Get(obj["song"], "logo")); } await new System.Net.WebClient().DownloadFileTaskAsync(logo, art); } var song = new Song { Id = id, ArtistId = artistid, AlbumId = albumid, Name = tags.Title, ArtistName = tags.FirstPerformer, AlbumName = tags.Album, FilePath = item, Logo = logo, }; buffer.Add(song); } catch { } if (buffer.Count == bufferLength) { var songs = new List <IMusic>(); foreach (var s in buffer.OfType <Song>()) { SongViewModel.Get(s).HasMp3 = true; } songs.AddRange(buffer); Items.AddItems(songs); buffer.Clear(); } } if (buffer.Count > 0) { foreach (var s in buffer.OfType <Song>()) { SongViewModel.Get(s).HasMp3 = true; } Items.AddItems(buffer); } }); }