Fixed permissions duplication bug WOOHOO
This commit is contained in:
		| @@ -59,7 +59,7 @@ namespace NadekoBot.Modules.Administration | ||||
|         { | ||||
|             using (var uow = DbHandler.UnitOfWork()) | ||||
|             { | ||||
|                 var config = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.Permissions)); | ||||
|                 var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id); | ||||
|                 config.Permissions = Permissionv2.GetDefaultPermlist; | ||||
|                 await uow.CompleteAsync(); | ||||
|                 UpdateCache(config); | ||||
|   | ||||
| @@ -87,7 +87,7 @@ namespace NadekoBot.Modules.Permissions | ||||
|                         if (i % 3 == 0) | ||||
|                             log.Info("Migrating Permissions #" + i + " - GuildId: " + oc.Key); | ||||
|                         i++; | ||||
|                         var gc = uow.GuildConfigs.For(oc.Key, set => set.Include(x => x.Permissions)); | ||||
|                         var gc = uow.GuildConfigs.GcWithPermissionsv2For(oc.Key); | ||||
|  | ||||
|                         var oldPerms = oc.Value.RootPermission.AsEnumerable().Reverse().ToList(); | ||||
|                         uow._context.Set<Permission>().RemoveRange(oldPerms); | ||||
| @@ -126,7 +126,7 @@ namespace NadekoBot.Modules.Permissions | ||||
|         { | ||||
|             using (var uow = DbHandler.UnitOfWork()) | ||||
|             { | ||||
|                 var config = uow.GuildConfigs.For(guildId, set => set.Include(x => x.Permissions)); | ||||
|                 var config = uow.GuildConfigs.GcWithPermissionsv2For(guildId); | ||||
|                 //var orderedPerms = new PermissionsCollection<Permissionv2>(config.Permissions); | ||||
|                 var max = config.Permissions.Max(x => x.Index); //have to set its index to be the highest | ||||
|                 foreach (var perm in perms) | ||||
| @@ -161,7 +161,7 @@ namespace NadekoBot.Modules.Permissions | ||||
|         { | ||||
|             using (var uow = DbHandler.UnitOfWork()) | ||||
|             { | ||||
|                 var config = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.Permissions)); | ||||
|                 var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id); | ||||
|                 config.VerbosePermissions = action.Value; | ||||
|                 await uow.CompleteAsync().ConfigureAwait(false); | ||||
|                 UpdateCache(config); | ||||
| @@ -185,7 +185,7 @@ namespace NadekoBot.Modules.Permissions | ||||
|  | ||||
|             using (var uow = DbHandler.UnitOfWork()) | ||||
|             { | ||||
|                 var config = uow.GuildConfigs.For(Context.Guild.Id, set => set); | ||||
|                 var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id); | ||||
|                 if (role == null) | ||||
|                 { | ||||
|                     await ReplyConfirmLocalized("permrole", Format.Bold(config.PermissionRole)).ConfigureAwait(false); | ||||
| @@ -247,7 +247,7 @@ namespace NadekoBot.Modules.Permissions | ||||
|                 Permissionv2 p; | ||||
|                 using (var uow = DbHandler.UnitOfWork()) | ||||
|                 { | ||||
|                     var config = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.Permissions)); | ||||
|                     var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id); | ||||
|                     var permsCol = new PermissionsCollection<Permissionv2>(config.Permissions); | ||||
|                     p = permsCol[index]; | ||||
|                     permsCol.RemoveAt(index); | ||||
| @@ -278,7 +278,7 @@ namespace NadekoBot.Modules.Permissions | ||||
|                     Permissionv2 fromPerm; | ||||
|                     using (var uow = DbHandler.UnitOfWork()) | ||||
|                     { | ||||
|                         var config = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.Permissions)); | ||||
|                         var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id); | ||||
|                         var permsCol = new PermissionsCollection<Permissionv2>(config.Permissions); | ||||
|  | ||||
|                         var fromFound = from < permsCol.Count; | ||||
|   | ||||
| @@ -423,7 +423,7 @@ namespace NadekoBot.Services | ||||
|                     { | ||||
|                         using (var uow = DbHandler.UnitOfWork()) | ||||
|                         { | ||||
|                             var config = uow.GuildConfigs.For(context.Guild.Id, set => set.Include(x => x.Permissions)); | ||||
|                             var config = uow.GuildConfigs.GcWithPermissionsv2For(context.Guild.Id); | ||||
|                             Permissions.UpdateCache(config); | ||||
|                         } | ||||
|                         Permissions.Cache.TryGetValue(context.Guild.Id, out pc); | ||||
|   | ||||
| @@ -15,5 +15,6 @@ namespace NadekoBot.Services.Database.Repositories | ||||
|         IEnumerable<FollowedStream> GetAllFollowedStreams(); | ||||
|         void SetCleverbotEnabled(ulong id, bool cleverbotEnabled); | ||||
|         IEnumerable<GuildConfig> Permissionsv2ForAll(); | ||||
|         GuildConfig GcWithPermissionsv2For(ulong guildId); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -67,19 +67,25 @@ namespace NadekoBot.Services.Database.Repositories.Impl | ||||
|                 })); | ||||
|                 _context.SaveChanges(); | ||||
|             } | ||||
|             else if (config.Permissions == null) | ||||
|             { | ||||
|                 config.Permissions = Permissionv2.GetDefaultPermlist; | ||||
|                 _context.SaveChanges(); | ||||
|             } | ||||
|             return config; | ||||
|         } | ||||
|  | ||||
|         public GuildConfig LogSettingsFor(ulong guildId) | ||||
|         { | ||||
|             return _set.Include(gc => gc.LogSetting) | ||||
|             var config = _set.Include(gc => gc.LogSetting) | ||||
|                             .ThenInclude(gc => gc.IgnoredChannels) | ||||
|                .FirstOrDefault(); | ||||
|  | ||||
|             if (config == null) | ||||
|             { | ||||
|                 _set.Add((config = new GuildConfig | ||||
|                 { | ||||
|                     GuildId = guildId, | ||||
|                     Permissions = Permissionv2.GetDefaultPermlist | ||||
|                 })); | ||||
|                 _context.SaveChanges(); | ||||
|             } | ||||
|             return config; | ||||
|         } | ||||
|  | ||||
|         public IEnumerable<GuildConfig> OldPermissionsForAll() | ||||
| @@ -108,6 +114,31 @@ namespace NadekoBot.Services.Database.Repositories.Impl | ||||
|             return query.ToList(); | ||||
|         } | ||||
|  | ||||
|         public GuildConfig GcWithPermissionsv2For(ulong guildId) | ||||
|         { | ||||
|             var config = _set | ||||
|                 .Where(gc => gc.GuildId == guildId) | ||||
|                 .Include(gc => gc.Permissions) | ||||
|                 .FirstOrDefault(); | ||||
|  | ||||
|             if (config == null) // if there is no guildconfig, create new one | ||||
|             { | ||||
|                 _set.Add((config = new GuildConfig | ||||
|                 { | ||||
|                     GuildId = guildId, | ||||
|                     Permissions = Permissionv2.GetDefaultPermlist | ||||
|                 })); | ||||
|                 _context.SaveChanges(); | ||||
|             } | ||||
|             else if (config.Permissions == null || !config.Permissions.Any()) // if no perms, add default ones | ||||
|             { | ||||
|                 config.Permissions = Permissionv2.GetDefaultPermlist; | ||||
|                 _context.SaveChanges(); | ||||
|             } | ||||
|  | ||||
|             return config; | ||||
|         } | ||||
|  | ||||
|         public IEnumerable<FollowedStream> GetAllFollowedStreams() => | ||||
|             _set.Include(gc => gc.FollowedStreams) | ||||
|                 .SelectMany(gc => gc.FollowedStreams) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user