示例#1
0
        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();
        }
示例#2
0
        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;
                }
            }
        }
示例#3
0
        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);
        }
示例#4
0
        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;
                }
            }
        }
示例#5
0
        /// <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;
                }
            }
        }
示例#6
0
        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));
                }
            }
        }