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); }