Ejemplo n.º 1
0
        public async Task <ServiceResult> QueueSong(CommandContext ctx, string songString, int pos = -1)
        {
            var serviceResolver = new ServiceManager.ServiceResolver();
            var songService     = serviceResolver.GetService(songString);

            if (songService.Playlist != Playlist.No)
            {
                songService.Playlist = Playlist.No;
            }
            var ServiceResults = await serviceResolver.GetServiceResults(songString, songService);

            if (ServiceResults != null)
            {
                var oldCount = await DbContext.GetGuildQueueCount(Guild.Id);

                if (pos == -1)
                {
                    ServiceResults.Reverse();
                    foreach (var result in ServiceResults)
                    {
                        await DbContext.AddToGuildQueue(Guild.Id, ctx.Member.Id, result);
                    }
                }
                else
                {
                    ServiceResults.Reverse();
                    foreach (var result in ServiceResults)
                    {
                        await DbContext.InsertToGuildQueue(Guild.Id, ctx.Member.Id, result, pos);
                    }
                }
                if (oldCount == 1)
                {
                    NextSong = new QueueEntryInfo(new DBQueueEntryJson(ServiceResults[0]), ctx.Member.Id, Guild.Id, DateTimeOffset.UtcNow, 1);
                    NextSongServiceResult = ServiceResults[0];
                }

                if (Vnc.Channel != null &&
                    (Playstate == Playstate.NotPlaying ||
                     Playstate == Playstate.Stopped))
                {
                    await PreparePlayback();
                }
            }
            return(null);
        }
        public static async Task <QueueEntryInfo> InsertToGuildQueue(this QueueDBContext ctx, ulong guildId, ulong userId, ServiceResult queueEntry, int position)
        {
            var queue = await GetGuildQueue(ctx, guildId);

            var baseDB     = new DBQueueEntryJson(queueEntry);
            var baseDBJson = JsonConvert.SerializeObject(baseDB);
            var baseBytes  = Encoding.UTF8.GetBytes(baseDBJson);
            var item       = new QueueEntryInfo
            {
                AddedBy        = userId,
                AdditionTime   = DateTime.Now,
                DBTrackInfoRaw = Convert.ToBase64String(baseBytes),
                GuildId        = guildId,
                Position       = -1
            };

            queue.Insert(position, item);
            await ReorderQueue(ctx, guildId, queue);

            await ctx.SaveChangesAsync();

            item.DBTrackInfo = new DBQueueEntryJson(queueEntry);
            return(item);
        }