static void TrackListTxt(AnyData.Data music) { string names = ""; for (int i = 0; i < music.mediaList.Length; i++) { if (music.mediaList[i].name.IndexOf("Неизвестен - Без названия") == 0) { continue; } names += $"{music.mediaList[i].name}\n"; } string path = $"{Environment.CurrentDirectory}\\music_{music.SubName}.txt"; File.WriteAllText(path, names); var proc = new System.Diagnostics.Process() { StartInfo = new ProcessStartInfo() { FileName = path, UseShellExecute = true } }; proc.Start(); }
static void SubMenu(AnyData.Data data) { if (data.mediaList == null) { Console.Clear(); return; } if ((data.mediaList as ChoiseMedia.Media[]).Length == 0) { PrintConsole.Header(HeaderName); return; } while (true) { var menuList = new List <string>() { "Скачать", "Плейлист", "Список" }; int pos = gMenu.Menu(menuList, $"{HeaderName}"); switch (pos) { case 1: Download.DownloadStart(data.mediaList, MediaType.Audio); break; case 2: PlaylistDwnld.Get(data); break; case 3: TrackListTxt(data); break; case -1: PrintConsole.Header(HeaderName); return; } } }
public static Track[] GetList(AnyData.Data data) { TextConsole.PrintConsole.Header("Музыка", "Получаем список треков..."); switch (data.type) { case Type.Profile: var audios = GetAudio(data.id, data.api); TextConsole.PrintConsole.Print($"Получено {audios.Count} треков.\n", TextConsole.MenuType.InfoHeader); if (audios == null) { return(null); } return(ToList(audios)); case Type.Popular: var popular = ToList(data.api.Audio.GetPopular()); TextConsole.PrintConsole.Print($"Получено {popular.Length} треков.\n", TextConsole.MenuType.InfoHeader); if (popular == null) { return(null); } return(popular); case Type.Group: var audiosFromGroup = GetAudio(data.id, data.api); TextConsole.PrintConsole.Print($"Получено {audiosFromGroup.Count} треков.\n", TextConsole.MenuType.InfoHeader); if (audiosFromGroup == null) { return(null); } return(ToList(audiosFromGroup)); case Type.Recommendation: var rec = ToList(data.api.Audio.GetRecommendations(null, data.id)); TextConsole.PrintConsole.Print($"Получено {rec.Length} треков.\n", TextConsole.MenuType.InfoHeader); if (rec == null) { return(null); } return(rec); case Type.Daily: var daily = GetDailyRec(data.api, Type.Daily); TextConsole.PrintConsole.Print($"Получено {daily.Length} треков.\n", TextConsole.MenuType.InfoHeader); if (daily == null) { return(null); } return(ToList(daily)); case Type.Weekly: var weekly = GetDailyRec(data.api, Type.Weekly); TextConsole.PrintConsole.Print($"Получено {weekly.Length} треков.\n", TextConsole.MenuType.InfoHeader); if (weekly == null) { return(null); } return(ToList(weekly)); } return(null); }
static void Prepare(AnyData.Data data, bool MediaListReady = false) { ChoiseMedia.Media[] list; if (MediaListReady) { list = (ChoiseMedia.Media[])data.mediaList; goto MediaListReady; } else { list = new ChoiseMedia.Media[data.audios.Length]; } for (int i = 0; i < data.audios.Length; i++) { list[i] = new ChoiseMedia.Media() { url = data.audios[i].url, name = $"{data.audios[i].artist} - {data.audios[i].name} ", duration = data.audios[i].duration }; } MediaListReady: Get.Track[] trackList = null; while (true) { if (data.mType == null) { data.mType = MediaType.Audio; } var menuList = new List <string>() { "Все", "Выбрать" }; int pos = gMenu.Menu(menuList, $"Музыка {data.SubName}"); switch (pos) { case 1: if (!MediaListReady) { data.mediaList = list; } SubMenu(data); break; case 2: Console.Clear(); var audioList = ChoiseMedia.PrintList(list); if (audioList == null) { break; } if (!MediaListReady) { trackList = new Get.Track[audioList.Count]; ChoiseMedia.Media[] mList = new ChoiseMedia.Media[0]; data.mediaList = new ChoiseMedia.Media[0]; for (int i = 0; i < audioList.Count; i++) { trackList[i] = data.audios[audioList[i]]; Array.Resize(ref mList, mList.Length + 1); mList[mList.Length - 1] = new ChoiseMedia.Media() { duration = data.audios[audioList[i]].duration, name = $"{data.audios[audioList[i]].artist} - {data.audios[audioList[i]].name}", url = data.audios[audioList[i]].url }; } SubMenu(new AnyData.Data() { audios = trackList, api = data.api, type = data.type, mType = data.mType, SubName = data.SubName, mediaList = mList }); } else { ChoiseMedia.Media[] mList = new ChoiseMedia.Media[audioList.Count]; for (int q = 0; q < mList.Length; q++) { mList[q] = (data.mediaList as ChoiseMedia.Media[])[audioList[q]]; } SubMenu(new AnyData.Data() { audios = trackList, api = data.api, type = data.type, SubName = data.SubName, mType = data.mType, mediaList = mList }); } break; case -1: return; } } }
/// <summary> /// Отмена /// </summary> /// <param name="task">Задача</param> /// <param name="cts">Токен</param> public static void Menu() { int profileNum = ChoiseProfile(); if (profileNum == -1) { return; } VkApi api = Profiles.GetUser(profileNum).GetApi(); while (true) { var menuList = new List <string>() { "Моя музыка", "Рекомендации", "Указать ссылку", "Последние", "Из сообщений", "Со стены", "По Вашим предпочтениям" }; int pos = gMenu.Menu(menuList.ToList(), HeaderName); switch (pos) { case 1: var subMenuList = new List <string>() { "Музыка", "Плейлисты", "Всё (плейлисты вначале)" }; int subPos = gMenu.Menu(subMenuList, HeaderName); switch (subPos) { case 1: Prepare(new AnyData.Data() { api = api, audios = Get.GetList(new AnyData.Data() { api = api }), SubName = GlobalFunctions.WhoIs(api, null, NameCase.Gen), id = api.UserId }); break; case 2: Prepare(new AnyData.Data() { api = api, audios = Get.GetPlaylists(api), SubName = GlobalFunctions.WhoIs(api, null, NameCase.Gen), id = api.UserId }); break; case 3: var trackListFromPlaylists = Get.GetPlaylists(api); var trackList = Get.GetList(new AnyData.Data() { api = api }); var fullList = trackListFromPlaylists.Concat(trackList).ToArray(); Prepare(new AnyData.Data() { api = api, audios = fullList, SubName = GlobalFunctions.WhoIs(api, null, NameCase.Gen), id = api.UserId }); break; case -1: break; } break; case 2: PrintConsole.Header(HeaderName, "Получаем категории"); var response = Get.GetCategoriesInRecommended(api).response; //Удаляем ненужные категории var temp = response.items; for (int i = 0; i < response.items.Length; i++) { if (response.items[i].source.IndexOf("recoms_communities") != 0 && response.items[i].source.IndexOf("recoms_friends") != 0) { Array.Resize(ref temp, temp.Length + 1); temp[temp.Length - 1] = response.items[i]; } } response.items = temp; while (true) { var recCat = new List <string>() { $"Категории [{response.items.Length}]", $"Группы [{response.groups.Length}]", $"Пользователи [{response.profiles.Length}]" }; int recCatPos = gMenu.Menu(recCat, "Рекомендации"); switch (recCatPos) { case 1: var menuRec = new List <string>() { }; for (int i = 0; i < response.items.Length; i++) { menuRec.Add($"{response.items[i].title} [{response.items[i].count}]"); } while (true) { int cPos = gMenu.Menu(menuRec.ToList(), "Категории"); switch (cPos) { default: PrintConsole.Header("Получаем данные"); var result = Get.GetTrackListFromRec(api, response.items[cPos - 1]); if (result != null && result.Length > 0) { Prepare(new AnyData.Data() { api = api, audios = result, SubName = response.items[cPos - 1].title }); } break; case -1: return; } } case 2: var menuGroups = new List <string>() { }; for (int i = 0; i < response.groups.Length; i++) { menuGroups.Add($"{response.groups[i].name}"); } while (true) { int cPos = gMenu.Menu(menuGroups.ToList(), "Группы"); switch (cPos) { default: Prepare(new AnyData.Data() { api = api, audios = Get.GetAudio(api, response.groups[cPos - 1].id * -1), SubName = response.groups[cPos - 1].name, id = response.groups[cPos - 1].id }); break; case -1: return; } } case 3: var menuUsers = new List <string>() { }; for (int i = 0; i < response.profiles.Length; i++) { menuUsers.Add($"{response.profiles[i].first_name} {response.profiles[i].last_name}"); } while (true) { int cPos = gMenu.Menu(menuUsers.ToList(), "Пользователи"); switch (cPos) { default: Prepare(new AnyData.Data() { api = api, audios = Get.GetAudio(api, response.profiles[cPos - 1].id), SubName = $"{response.profiles[cPos - 1].first_name} {response.profiles[cPos - 1].last_name}", id = response.profiles[cPos - 1].id }); break; case -1: return; } } case -1: return; } } case 3: GetFromUrl: PrintConsole.Header(HeaderName, "Получаем список категорий"); PrintConsole.Print("[0] - Назад", MenuType.Back); PrintConsole.Print($"Введите ссылку: ", MenuType.Input); string id = Console.ReadLine(); if (string.Compare(id, "0") == 0) { return; } long?_id = GlobalFunctions.GetID(id, Profiles.GetUser(profileNum).GetToken()); if (_id == null) { goto GetFromUrl; } AnyData.Data url = new AnyData.Data() { api = api, audios = Get.GetList(new AnyData.Data() { id = _id, api = api }), SubName = GlobalFunctions.WhoIs(api, _id, NameCase.Gen), id = _id }; LastChoise.Add(new KeyValuePair <long?, string>(url.id, url.SubName)); Prepare(url); break; case 4: Last_Choise(api); break; case 5: var media = Get.FromMessage(api, HeaderName); if (media != null) { Prepare(new AnyData.Data() { mType = MediaType.Audio, mediaList = media, api = api, SubName = $"Из беседы {(string)media[0].other}", type = Get.Type.Recommendation }, true); } break; case 6: GetDataFromBoard(api); break; case 7: var daily = new List <string>() { $"Дневной плейлист", $"Недельный плейлист" }; int dpos = gMenu.Menu(daily, "По Вашим предпочтениям"); switch (dpos) { case 1: Prepare(new AnyData.Data() { api = api, audios = Get.GetList(new AnyData.Data() { api = api, type = Get.Type.Daily }), SubName = GlobalFunctions.WhoIs(api, null, NameCase.Gen), type = Get.Type.Daily, id = api.UserId }); break; case 2: Prepare(new AnyData.Data() { api = api, audios = Get.GetList(new AnyData.Data() { api = api, type = Get.Type.Weekly }), SubName = GlobalFunctions.WhoIs(api, null, NameCase.Gen), type = Get.Type.Weekly, id = api.UserId }); break; case -1: return; } break; case -1: return; } } }
public static void Get(AnyData.Data data) { ChoiseMedia.Media[] mediaListMedia = data.mediaList as ChoiseMedia.Media[]; string name = ""; if (data.SubName != null) { name = data.SubName; } if (data.id == null) { data.id = data.api.UserId; } switch (data.type) { case Music.Get.Type.Profile: if (data.id < 0) { var group = data.api.Groups.GetById(null, (0 - data.id).ToString(), null).FirstOrDefault(); name = $"[PL] {group.Name}"; } else { var user = data.api.Users.Get(new List <long>() { long.Parse(data.id.ToString()) }).FirstOrDefault(); name = $"[PL] {user.FirstName} {user.LastName}"; } break; case Music.Get.Type.Recommendation: name = $"[PL] {data.SubName} "; break; case Music.Get.Type.Daily: name = $"Дневная подборка {DateTime.Today.ToShortDateString()}"; break; case Music.Get.Type.Weekly: name = $"Недельная подборка {DateTime.Today.ToShortDateString()}"; break; } string PlayList = "#EXTM3U\n"; for (int i = 0; i < mediaListMedia.Length; i++) { try { string seconds = String.Empty; var prep = mediaListMedia[i].duration.Split(':'); if (prep.Length == 2) { seconds = $"00:{mediaListMedia[i].duration}"; } else { seconds = mediaListMedia[i].duration; } var sec = (int)DateTime.Parse(seconds).TimeOfDay.TotalSeconds; PlayList += $"\n#EXTINF:{sec},{mediaListMedia[i].name}\n{mediaListMedia[i].url}"; } catch (Exception ex) { } } if (mediaListMedia.Length == 0) { TextConsole.BackLine.Continue(); return; } SaveFileDialog dialog = new SaveFileDialog() { Title = "Сохранить плейлист", FileName = name, Filter = "M3U (*.m3u)|*.m3u" }; if (dialog.ShowDialog() == DialogResult.OK) { using (dialog) { File.WriteAllText(Path.GetFullPath(dialog.FileName), PlayList); Process.Start(Path.GetFullPath(dialog.FileName)); } } }