playlist stuff

This commit is contained in:
Kwoth 2016-10-02 03:00:03 +02:00
parent 31cd9b2856
commit 66b0d11415
8 changed files with 217 additions and 20 deletions

View File

@ -8,7 +8,7 @@ using NadekoBot.Services.Database.Impl;
namespace NadekoBot.Migrations namespace NadekoBot.Migrations
{ {
[DbContext(typeof(NadekoSqliteContext))] [DbContext(typeof(NadekoSqliteContext))]
[Migration("20160930001917_first")] [Migration("20161001173937_first")]
partial class first partial class first
{ {
protected override void BuildTargetModel(ModelBuilder modelBuilder) protected override void BuildTargetModel(ModelBuilder modelBuilder)
@ -357,6 +357,22 @@ namespace NadekoBot.Migrations
b.ToTable("ModulePrefixes"); 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 => modelBuilder.Entity("NadekoBot.Services.Database.Models.Permission", b =>
{ {
b.Property<int>("Id") b.Property<int>("Id")
@ -398,6 +414,30 @@ namespace NadekoBot.Migrations
b.ToTable("PlayingStatus"); 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 => modelBuilder.Entity("NadekoBot.Services.Database.Models.Quote", b =>
{ {
b.Property<int>("Id") b.Property<int>("Id")
@ -589,6 +629,13 @@ namespace NadekoBot.Migrations
.HasForeignKey("BotConfigId"); .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 => modelBuilder.Entity("NadekoBot.Services.Database.Models.RaceAnimal", b =>
{ {
b.HasOne("NadekoBot.Services.Database.Models.BotConfig") b.HasOne("NadekoBot.Services.Database.Models.BotConfig")

View File

@ -122,6 +122,21 @@ namespace NadekoBot.Migrations
table.PrimaryKey("PK_LogSettings", x => x.Id); 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( migrationBuilder.CreateTable(
name: "Permission", name: "Permission",
columns: table => new columns: table => new
@ -390,6 +405,30 @@ namespace NadekoBot.Migrations
onDelete: ReferentialAction.Restrict); 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( migrationBuilder.CreateTable(
name: "GuildConfigs", name: "GuildConfigs",
columns: table => new columns: table => new
@ -535,6 +574,11 @@ namespace NadekoBot.Migrations
table: "PlayingStatus", table: "PlayingStatus",
column: "BotConfigId"); column: "BotConfigId");
migrationBuilder.CreateIndex(
name: "IX_PlaylistSong_MusicPlaylistId",
table: "PlaylistSong",
column: "MusicPlaylistId");
migrationBuilder.CreateIndex( migrationBuilder.CreateIndex(
name: "IX_RaceAnimals_BotConfigId", name: "IX_RaceAnimals_BotConfigId",
table: "RaceAnimals", table: "RaceAnimals",
@ -588,6 +632,9 @@ namespace NadekoBot.Migrations
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "PlayingStatus"); name: "PlayingStatus");
migrationBuilder.DropTable(
name: "PlaylistSong");
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "Quotes"); name: "Quotes");
@ -612,6 +659,9 @@ namespace NadekoBot.Migrations
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "GuildConfigs"); name: "GuildConfigs");
migrationBuilder.DropTable(
name: "MusicPlaylists");
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "BotConfig"); name: "BotConfig");

View File

@ -571,7 +571,7 @@ namespace NadekoBot.Modules.Music
if (mpl == null) 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; return;
} }
@ -619,26 +619,34 @@ namespace NadekoBot.Modules.Music
bool success = false; bool success = false;
MusicPlaylist pl = null; MusicPlaylist pl = null;
using (var uow = DbHandler.UnitOfWork()) try
{ {
pl = uow.MusicPlaylists.Get(id); using (var uow = DbHandler.UnitOfWork())
if (pl != null)
{ {
if (NadekoBot.Credentials.IsOwner(umsg.Author) || pl.AuthorId == umsg.Author.Id) pl = uow.MusicPlaylists.Get(id);
{
uow.MusicPlaylists.Remove(pl.Id);
await uow.CompleteAsync().ConfigureAwait(false);
}
else
success = false;
}
}
if (success) if (pl != null)
await channel.SendMessageAsync("Failed to delete that playlist. It either doesn't exist, or you are not its author.").ConfigureAwait(false); {
else if (NadekoBot.Credentials.IsOwner(umsg.Author) || pl.AuthorId == umsg.Author.Id)
await channel.SendMessageAsync("`Playlist successfully deleted.`").ConfigureAwait(false); {
uow.MusicPlaylists.Remove(pl);
await uow.CompleteAsync().ConfigureAwait(false);
success = true;
}
else
success = false;
}
}
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] [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]

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

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

View File

@ -187,7 +187,7 @@ namespace NadekoBot.Services.Database
permissionEntity permissionEntity
.HasOne(p => p.Next) .HasOne(p => p.Next)
.WithOne(p => p.Previous); .WithOne(p => p.Previous);
#endregion #endregion
#region LogSettings #region LogSettings
@ -203,6 +203,17 @@ namespace NadekoBot.Services.Database
// .HasMany(ls => ls.IgnoredVoicePresenceChannelIds) // .HasMany(ls => ls.IgnoredVoicePresenceChannelIds)
// .WithOne(ls => ls.LogSetting); // .WithOne(ls => ls.LogSetting);
#endregion #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); protected abstract override void OnConfiguring(DbContextOptionsBuilder optionsBuilder);
} }

View File

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

View File

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