playlist stuff
This commit is contained in:
		@@ -8,7 +8,7 @@ using NadekoBot.Services.Database.Impl;
 | 
			
		||||
namespace NadekoBot.Migrations
 | 
			
		||||
{
 | 
			
		||||
    [DbContext(typeof(NadekoSqliteContext))]
 | 
			
		||||
    [Migration("20160930001917_first")]
 | 
			
		||||
    [Migration("20161001173937_first")]
 | 
			
		||||
    partial class first
 | 
			
		||||
    {
 | 
			
		||||
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
 | 
			
		||||
@@ -357,6 +357,22 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.ToTable("ModulePrefixes");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.MusicPlaylist", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.Property<int>("Id")
 | 
			
		||||
                        .ValueGeneratedOnAdd();
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Author");
 | 
			
		||||
 | 
			
		||||
                    b.Property<ulong>("AuthorId");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Name");
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("Id");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("MusicPlaylists");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.Permission", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.Property<int>("Id")
 | 
			
		||||
@@ -398,6 +414,30 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.ToTable("PlayingStatus");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.PlaylistSong", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.Property<int>("Id")
 | 
			
		||||
                        .ValueGeneratedOnAdd();
 | 
			
		||||
 | 
			
		||||
                    b.Property<int?>("MusicPlaylistId");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Provider");
 | 
			
		||||
 | 
			
		||||
                    b.Property<int>("ProviderType");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Query");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Title");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("Uri");
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("Id");
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("MusicPlaylistId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("PlaylistSong");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.Quote", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.Property<int>("Id")
 | 
			
		||||
@@ -589,6 +629,13 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                        .HasForeignKey("BotConfigId");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.PlaylistSong", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.HasOne("NadekoBot.Services.Database.Models.MusicPlaylist")
 | 
			
		||||
                        .WithMany("Songs")
 | 
			
		||||
                        .HasForeignKey("MusicPlaylistId");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.RaceAnimal", b =>
 | 
			
		||||
                {
 | 
			
		||||
                    b.HasOne("NadekoBot.Services.Database.Models.BotConfig")
 | 
			
		||||
@@ -122,6 +122,21 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    table.PrimaryKey("PK_LogSettings", x => x.Id);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateTable(
 | 
			
		||||
                name: "MusicPlaylists",
 | 
			
		||||
                columns: table => new
 | 
			
		||||
                {
 | 
			
		||||
                    Id = table.Column<int>(nullable: false)
 | 
			
		||||
                        .Annotation("Autoincrement", true),
 | 
			
		||||
                    Author = table.Column<string>(nullable: true),
 | 
			
		||||
                    AuthorId = table.Column<ulong>(nullable: false),
 | 
			
		||||
                    Name = table.Column<string>(nullable: true)
 | 
			
		||||
                },
 | 
			
		||||
                constraints: table =>
 | 
			
		||||
                {
 | 
			
		||||
                    table.PrimaryKey("PK_MusicPlaylists", x => x.Id);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateTable(
 | 
			
		||||
                name: "Permission",
 | 
			
		||||
                columns: table => new
 | 
			
		||||
@@ -390,6 +405,30 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                        onDelete: ReferentialAction.Restrict);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateTable(
 | 
			
		||||
                name: "PlaylistSong",
 | 
			
		||||
                columns: table => new
 | 
			
		||||
                {
 | 
			
		||||
                    Id = table.Column<int>(nullable: false)
 | 
			
		||||
                        .Annotation("Autoincrement", true),
 | 
			
		||||
                    MusicPlaylistId = table.Column<int>(nullable: true),
 | 
			
		||||
                    Provider = table.Column<string>(nullable: true),
 | 
			
		||||
                    ProviderType = table.Column<int>(nullable: false),
 | 
			
		||||
                    Query = table.Column<string>(nullable: true),
 | 
			
		||||
                    Title = table.Column<string>(nullable: true),
 | 
			
		||||
                    Uri = table.Column<string>(nullable: true)
 | 
			
		||||
                },
 | 
			
		||||
                constraints: table =>
 | 
			
		||||
                {
 | 
			
		||||
                    table.PrimaryKey("PK_PlaylistSong", x => x.Id);
 | 
			
		||||
                    table.ForeignKey(
 | 
			
		||||
                        name: "FK_PlaylistSong_MusicPlaylists_MusicPlaylistId",
 | 
			
		||||
                        column: x => x.MusicPlaylistId,
 | 
			
		||||
                        principalTable: "MusicPlaylists",
 | 
			
		||||
                        principalColumn: "Id",
 | 
			
		||||
                        onDelete: ReferentialAction.Restrict);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateTable(
 | 
			
		||||
                name: "GuildConfigs",
 | 
			
		||||
                columns: table => new
 | 
			
		||||
@@ -535,6 +574,11 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                table: "PlayingStatus",
 | 
			
		||||
                column: "BotConfigId");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateIndex(
 | 
			
		||||
                name: "IX_PlaylistSong_MusicPlaylistId",
 | 
			
		||||
                table: "PlaylistSong",
 | 
			
		||||
                column: "MusicPlaylistId");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.CreateIndex(
 | 
			
		||||
                name: "IX_RaceAnimals_BotConfigId",
 | 
			
		||||
                table: "RaceAnimals",
 | 
			
		||||
@@ -588,6 +632,9 @@ namespace NadekoBot.Migrations
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "PlayingStatus");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "PlaylistSong");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "Quotes");
 | 
			
		||||
 | 
			
		||||
@@ -612,6 +659,9 @@ namespace NadekoBot.Migrations
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "GuildConfigs");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "MusicPlaylists");
 | 
			
		||||
 | 
			
		||||
            migrationBuilder.DropTable(
 | 
			
		||||
                name: "BotConfig");
 | 
			
		||||
 | 
			
		||||
@@ -571,7 +571,7 @@ namespace NadekoBot.Modules.Music
 | 
			
		||||
 | 
			
		||||
            if (mpl == null)
 | 
			
		||||
            {
 | 
			
		||||
                await channel.SendMessageAsync("Can't find playlist with that ID").ConfigureAwait(false);
 | 
			
		||||
                await channel.SendMessageAsync("`Can't find playlist with that ID`").ConfigureAwait(false);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@@ -619,6 +619,8 @@ namespace NadekoBot.Modules.Music
 | 
			
		||||
 | 
			
		||||
            bool success = false;
 | 
			
		||||
            MusicPlaylist pl = null;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                using (var uow = DbHandler.UnitOfWork())
 | 
			
		||||
                {
 | 
			
		||||
                    pl = uow.MusicPlaylists.Get(id);
 | 
			
		||||
@@ -627,19 +629,25 @@ namespace NadekoBot.Modules.Music
 | 
			
		||||
                    {
 | 
			
		||||
                        if (NadekoBot.Credentials.IsOwner(umsg.Author) || pl.AuthorId == umsg.Author.Id)
 | 
			
		||||
                        {
 | 
			
		||||
                        uow.MusicPlaylists.Remove(pl.Id);
 | 
			
		||||
                            uow.MusicPlaylists.Remove(pl);
 | 
			
		||||
                            await uow.CompleteAsync().ConfigureAwait(false);
 | 
			
		||||
                            success = true;
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                            success = false;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            if (success)
 | 
			
		||||
                if (!success)
 | 
			
		||||
                    await channel.SendMessageAsync("Failed to delete that playlist. It either doesn't exist, or you are not its author.").ConfigureAwait(false);
 | 
			
		||||
                else
 | 
			
		||||
                    await channel.SendMessageAsync("`Playlist successfully deleted.`").ConfigureAwait(false);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                Console.WriteLine(ex);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
 | 
			
		||||
        [RequireContext(ContextType.Guild)]
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								src/NadekoBot/Services/Database/Models/MusicPlaylist.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/NadekoBot/Services/Database/Models/MusicPlaylist.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Services.Database.Models
 | 
			
		||||
{
 | 
			
		||||
    public class MusicPlaylist : DbEntity
 | 
			
		||||
    {
 | 
			
		||||
        public string Name { get; set; }
 | 
			
		||||
        public string Author { get; set; }
 | 
			
		||||
        public ulong AuthorId { get; set; }
 | 
			
		||||
        public List<PlaylistSong> Songs { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										18
									
								
								src/NadekoBot/Services/Database/Models/PlaylistSong.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/NadekoBot/Services/Database/Models/PlaylistSong.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
using NadekoBot.Modules.Music.Classes;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Services.Database.Models
 | 
			
		||||
{
 | 
			
		||||
    public class PlaylistSong : DbEntity
 | 
			
		||||
    {
 | 
			
		||||
        public string Provider { get; set; }
 | 
			
		||||
        public MusicType ProviderType { get; set; }
 | 
			
		||||
        public string Title { get; set; }
 | 
			
		||||
        public string Uri { get; set; }
 | 
			
		||||
        public string Query { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -203,6 +203,17 @@ namespace NadekoBot.Services.Database
 | 
			
		||||
            //    .HasMany(ls => ls.IgnoredVoicePresenceChannelIds)
 | 
			
		||||
            //    .WithOne(ls => ls.LogSetting);
 | 
			
		||||
            #endregion
 | 
			
		||||
 | 
			
		||||
            #region MusicPlaylists
 | 
			
		||||
            var musicPlaylistEntity = modelBuilder.Entity<MusicPlaylist>();
 | 
			
		||||
 | 
			
		||||
            musicPlaylistEntity
 | 
			
		||||
                .HasMany<PlaylistSong>(p => p.Songs)
 | 
			
		||||
                .WithOne()
 | 
			
		||||
                .OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Cascade);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
            #endregion
 | 
			
		||||
        }
 | 
			
		||||
        protected abstract override void OnConfiguring(DbContextOptionsBuilder optionsBuilder);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,15 @@
 | 
			
		||||
using NadekoBot.Services.Database.Models;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Services.Database.Repositories
 | 
			
		||||
{
 | 
			
		||||
    public interface IMusicPlaylistRepository : IRepository<MusicPlaylist>
 | 
			
		||||
    {
 | 
			
		||||
        List<MusicPlaylist> GetPlaylistsOnPage(int num);
 | 
			
		||||
        MusicPlaylist GetWithSongs(int id);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,32 @@
 | 
			
		||||
using NadekoBot.Services.Database.Models;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Services.Database.Repositories.Impl
 | 
			
		||||
{
 | 
			
		||||
    public class MusicPlaylistRepository : Repository<MusicPlaylist>, IMusicPlaylistRepository
 | 
			
		||||
    {
 | 
			
		||||
        public MusicPlaylistRepository(DbContext context) : base(context)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public List<MusicPlaylist> GetPlaylistsOnPage(int num)
 | 
			
		||||
        {
 | 
			
		||||
            if (num < 1)
 | 
			
		||||
                throw new IndexOutOfRangeException();
 | 
			
		||||
 | 
			
		||||
            return _set.Skip((num - 1) * 20)
 | 
			
		||||
                .Take(20)
 | 
			
		||||
                .Include(pl => pl.Songs)
 | 
			
		||||
                .ToList();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public MusicPlaylist GetWithSongs(int id) => 
 | 
			
		||||
            _set.Include(mpl => mpl.Songs)
 | 
			
		||||
                .FirstOrDefault(mpl => mpl.Id == id);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user