Initial split of the modules
This commit is contained in:
NadekoBot.Core
Common
AsyncLazy.cs
Attributes
BotConfigEditType.csCREmbed.csCollections
CommandData.csModuleBehaviors
IEarlyBlocker.csIEarlyBlockingExecutor.csIEarlyExecutor.csIINputTransformer.csILateBlocker.csILateBlockingExecutor.csILateExecutor.cs
NadekoModule.csNadekoModuleExtensions.csNadekoRandom.csNoPublicBotPrecondition.csPlatformHelper.csReplacements
Shard0Precondition.csShardCom
SocketMessageEventWrapper.csTypeReaders
Migrations
20161011200458_first.Designer.cs20161011200458_first.cs20161015005020_CurrencyTransaction.Designer.cs20161015005020_CurrencyTransaction.cs20161015102407_coc.Designer.cs20161015102407_coc.cs20161019055137_MuteRoleName.Designer.cs20161019055137_MuteRoleName.cs20161107213222_Cleverbot.Designer.cs20161107213222_Cleverbot.cs20161122100602_Greet and bye improved.Designer.cs20161122100602_Greet and bye improved.cs20161127233843_PokeGame.Designer.cs20161127233843_PokeGame.cs20161213025624_mutedusers.Designer.cs20161213025624_mutedusers.cs20161224032833_logsettings.Designer.cs20161224032833_logsettings.cs20170110111159_repeater-drop.Designer.cs20170110111159_repeater-drop.cs20170110111302_repeater-new.Designer.cs20170110111302_repeater-new.cs20170110180534_protection.Designer.cs20170110180534_protection.cs20170112185538_currency-modifications.Designer.cs20170112185538_currency-modifications.cs20170118202307_ok-error-colors.Designer.cs20170118202307_ok-error-colors.cs20170122044958_waifus.Designer.cs20170122044958_waifus.cs20170213164350_guild-timezone-and-locale.Designer.cs20170213164350_guild-timezone-and-locale.cs20170222162505_dateadded.Designer.cs20170222162505_dateadded.cs20170308033058_permsv2.Designer.cs20170308033058_permsv2.cs20170310210952_unmute-timers.Designer.cs20170310210952_unmute-timers.cs20170311054632_vcrole.Designer.cs20170311054632_vcrole.cs20170318190018_crad-and-crdm.Designer.cs20170318190018_crad-and-crdm.cs20170320090138_command-aliasing.Designer.cs20170320090138_command-aliasing.cs20170330000613_warning-commands.Designer.cs20170330000613_warning-commands.cs20170331093025_startup-commands.Designer.cs20170331093025_startup-commands.cs20170401161600_slowmode-whitelist.Designer.cs20170401161600_slowmode-whitelist.cs20170401205753_patreon-rewards.Designer.cs20170401205753_patreon-rewards.cs20170405161814_flower-shop.Designer.cs20170405161814_flower-shop.cs20170408162851_game-voice-channel.Designer.cs20170408162851_game-voice-channel.cs20170409193757_gmod-and-cmod.Designer.cs20170409193757_gmod-and-cmod.cs20170501103455_patreon-id.Designer.cs20170501103455_patreon-id.cs20170528001839_permissions-version.Designer.cs20170528001839_permissions-version.cs20170530033406_guild-prefixes.Designer.cs20170530033406_guild-prefixes.cs20170612094138_verbose-errors.Designer.cs20170612094138_verbose-errors.cs20170612234751_repeat time of day.Designer.cs20170612234751_repeat time of day.cs20170613231358_maxdropamount.Designer.cs20170613231358_maxdropamount.cs20170616154106_crstartswith.Designer.cs20170616154106_crstartswith.cs20170714021615_stream-role.Designer.cs20170714021615_stream-role.cs20170719023924_streamrole-kw-bl-wl.Designer.cs20170719023924_streamrole-kw-bl-wl.cs20170721004230_nsfw-blacklist.Designer.cs20170721004230_nsfw-blacklist.cs20170722074959_cr-ca.Designer.cs20170722074959_cr-ca.cs20170814044636_waifu-items.Designer.cs20170814044636_waifu-items.cs20170815222316_mute-time-antispam.Designer.cs20170815222316_mute-time-antispam.cs20170908230730_xp-and-clubs.Designer.cs20170908230730_xp-and-clubs.cs20170911200031_lastXpGain.Designer.cs20170911200031_lastXpGain.cs20170913022654_total-xp.Designer.cs20170913022654_total-xp.cs20170915034808_club-admins.Designer.cs20170915034808_club-admins.cs20170921185313_feeds.Designer.cs20170921185313_feeds.cs20170923002439_xprr-fix.Designer.cs20170923002439_xprr-fix.csMigrationQueries.csNadekoSqliteContextModelSnapshot.cs
Modules
Administration
Administration.csAutoAssignRoleCommands.cs
Common
GameChannelCommands.csLocalizationCommands.csLogCommands.csMigrationCommands.csMuteCommands.csPlayingRotateCommands.csPrefixCommands.csProtectionCommands.csPruneCommands.csRatelimitCommands.csSelfAssignedRolesCommands.csSelfCommands.csServerGreetCommands.csServices
AdministrationService.csAutoAssignRoleService.csGameVoiceChannelService.csGuildTimezoneService.csLogCommandService.csMuteService.csPlayingRotateService.csProtectionService.csPruneService.csRatelimitService.csSelfService.csUserPunishService.csVcRoleService.csVplusTService.cs
TimeZoneCommands.csUserPunishCommands.csVcRoleCommands.csVoicePlusTextCommands.csHelp
Permissions
Services
CommandHandler.csCurrencyService.cs
Database
IUnitOfWork.cs
DbService.csGreetSettingsService.csIBotConfigProvider.csIBotCredentials.csIDataCache.csIGoogleApiService.csIImagesService.csILocalization.csINService.csIStatsService.csModels
AntiProtection.csBotConfig.csClashCaller.csClashWar.csClubInfo.csCommandCooldown.csCommandCost.csCommandPrice.csConvertUnit.csCurrency.csCurrencyTransaction.csCustomReaction.csDbEntity.csDiscordUser.csDonator.csFeedSub.csFollowedStream.csGuildConfig.csIgnoredLogChannel.csLogSetting.csMusicPlaylist.csPermission.csPlaylistSong.csPokeType.csQuote.csReminder.csRepeater.csRewardedUser.csSelfAssignableRole.csShopEntry.csStreamRoleSettings.csUserXpStats.csVoicePresenceChannel.csWaifu.csWaifuItem.csWaifuUpdate.csWarning.csXpSettings.cs
NadekoContext.csRepositories
IBotConfigRepository.csIClashOfClansRepository.csIClubRepository.csICurrencyRepository.csICurrencyTransactionsRepository.csICustomReactionRepository.csIDiscordUserRepository.csIDonatorsRepository.csIGuildConfigRepository.csIMusicPlaylistRepository.csIPokeGameRepository.csIQuoteRepository.csIReminderRepository.csIRepository.csISelfAssignedRolesRepository.csIUnitConverterRepository.csIWaifuRepository.csIWarningsRepository.csIXpRepository.cs
UnitOfWork.csImpl
BotConfigRepository.csClashOfClansRepository.csClubRepository.csCurrencyRepository.csCurrencyTransactionsRepository.csCustomReactionRepository.csDiscordUserRepository.csDonatorsRepository.csGuildConfigRepository.csMusicPlaylistRepository.csPokeGameRepository.csQuoteRepository.csReminderRepository.csRepository.csSelfAssignedRolesRepository.csUnitCOnverterRepository.csWaifuRepository.csWarningsRepository.csXpRepository.cs
Impl
BotConfigProvider.csBotCredentials.csGoogleApiService.csImagesService.csLocalization.csNadekoStrings.csRedisCache.csSoundCloudApiService.csStartingGuildsListService.csStatsService.csSyncPreconditionService.csYtdl.cs
LogSetup.csNadekoBot.csServiceProvider.csShardsCoordinator.cs_Extensions
Extensions.csIEnumerableExtensions.csIMessageChannelExtensions.csIUserExtensions.csMusicExtensions.csNumberExtensions.csStringExtensions.cs
_libs
_strings
ResponseStrings.ar.jsonResponseStrings.cs-CZ.jsonResponseStrings.da-DK.jsonResponseStrings.de-DE.jsonResponseStrings.en-US.jsonResponseStrings.es-ES.jsonResponseStrings.fr-FR.jsonResponseStrings.he-IL.jsonResponseStrings.id-ID.jsonResponseStrings.it-IT.jsonResponseStrings.ja-JP.jsonResponseStrings.ko-KR.jsonResponseStrings.nb-NO.jsonResponseStrings.nl-NL.jsonResponseStrings.pl-PL.jsonResponseStrings.pt-BR.jsonResponseStrings.ro-RO.jsonResponseStrings.ru-RU.jsonResponseStrings.sr-cyrl-rs.jsonResponseStrings.sv-SE.jsonResponseStrings.tr-TR.jsonResponseStrings.zh-CN.jsonResponseStrings.zh-TW.json
NadekoBot.Module.Searches
AnimeSearchCommands.cs
Common
AnimeResult.csDefineModel.cs
FeedCommands.csJokeCommands.csLoLCommands.csMemegenCommands.csNadekoBot.Modules.Searches.csprojOsuCommands.csOverwatchCommands.csPlaceCommands.csPokemonSearchCommands.csSearches.csExceptions
GoogleSearchResult.csMagicItem.csMangaResult.csOmdbProvider.csOverwatchApiModel.csSearchImageCacher.csSearchPokemon.csStreamResponses.csTimeModels.csWeatherModels.csWikipediaApiModel.csWoWJoke.csServices
StreamNotificationCommands.csTranslatorCommands.csXkcdCommands.csNadekoBot.Modules.CustomReactions
NadekoBot.Modules.Gambling
AnimalRacingCommands.cs
Common
CurrencyEventsCommands.csDiceRollCommands.csDrawCommands.csFlipCoinCommands.csFlowerShopCommands.csGambling.csNadekoBot.Modules.Gambling.csprojSlotCommands.csWaifuClaimCommands.csWheelOfFortuneCommands.csNadekoBot.Modules.Games
AcropobiaCommands.csCleverBotCommands.csConnect4Commands.csGames.csHangmanCommands.csLeetCommands.csNadekoBot.Modules.Games.csprojNunchiCommands.csPlantAndPickCommands.csPollCommands.cs
Common
Acrophobia
ChatterBot
ChatterBotResponse.csChatterBotSession.csCleverbotResponse.csIChatterBotSession.csOfficialCleverbotSession.cs
Connect4
GirlRating.csHangman
Nunchi
Poll.csTrivia
TypingArticle.csTypingGame.csServices
SpeedTypingCommands.csTicTacToeCommands.csTriviaCommands.csNadekoBot.Modules.Music
Common
Extensions
Music.csNadekoBot.Modules.Music.csprojServices
NadekoBot.Modules.Nsfw
NadekoBot.Modules.Pokemon
NadekoBot.Modules.Utility
BotConfigCommands.csCalcCommands.csCommandMapCommands.cs
Common
Extensions
InfoCommands.csNadekoBot.Modules.Utility.csprojPatreonCommands.csQuoteCommands.csRemindCommands.csRepeatCommands.csServices
CommandMapService.csConverterService.csMessageRepeaterService.csPatreonRewardsService.csRemindService.csStreamRoleService.csVerboseErrorsService.cs
StreamRoleCommands.csUnitConversionCommands.csUtility.csVerboseErrorCommands.csNadekoBot.Modules.Xp
NadekoBot.slndocs
src/NadekoBot
128
NadekoBot.Core/Common/Collections/IndexedCollection.cs
Normal file
128
NadekoBot.Core/Common/Collections/IndexedCollection.cs
Normal file
@ -0,0 +1,128 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NadekoBot.Services.Database.Models;
|
||||
|
||||
namespace NadekoBot.Common.Collections
|
||||
{
|
||||
public class IndexedCollection<T> : IList<T> where T : class, IIndexed
|
||||
{
|
||||
public List<T> Source { get; }
|
||||
private readonly object _locker = new object();
|
||||
|
||||
public IndexedCollection(IEnumerable<T> source)
|
||||
{
|
||||
lock (_locker)
|
||||
{
|
||||
Source = source.OrderBy(x => x.Index).ToList();
|
||||
for (var i = 0; i < Source.Count; i++)
|
||||
{
|
||||
if (Source[i].Index != i)
|
||||
Source[i].Index = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static implicit operator List<T>(IndexedCollection<T> x) =>
|
||||
x.Source;
|
||||
|
||||
public IEnumerator<T> GetEnumerator() =>
|
||||
Source.GetEnumerator();
|
||||
|
||||
IEnumerator IEnumerable.GetEnumerator() =>
|
||||
Source.GetEnumerator();
|
||||
|
||||
public void Add(T item)
|
||||
{
|
||||
lock (_locker)
|
||||
{
|
||||
item.Index = Source.Count;
|
||||
Source.Add(item);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void Clear()
|
||||
{
|
||||
lock (_locker)
|
||||
{
|
||||
Source.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
public bool Contains(T item)
|
||||
{
|
||||
lock (_locker)
|
||||
{
|
||||
return Source.Contains(item);
|
||||
}
|
||||
}
|
||||
|
||||
public void CopyTo(T[] array, int arrayIndex)
|
||||
{
|
||||
lock (_locker)
|
||||
{
|
||||
Source.CopyTo(array, arrayIndex);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual bool Remove(T item)
|
||||
{
|
||||
bool removed;
|
||||
lock (_locker)
|
||||
{
|
||||
if (removed = Source.Remove(item))
|
||||
{
|
||||
for (int i = 0; i < Source.Count; i++)
|
||||
{
|
||||
// hm, no idea how ef works, so I don't want to set if it's not changed,
|
||||
// maybe it will try to update db?
|
||||
// But most likely it just compares old to new values, meh.
|
||||
if (Source[i].Index != i)
|
||||
Source[i].Index = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return removed;
|
||||
}
|
||||
|
||||
public int Count => Source.Count;
|
||||
public bool IsReadOnly => false;
|
||||
public int IndexOf(T item) => item.Index;
|
||||
|
||||
public virtual void Insert(int index, T item)
|
||||
{
|
||||
lock (_locker)
|
||||
{
|
||||
Source.Insert(index, item);
|
||||
for (int i = index; i < Source.Count; i++)
|
||||
{
|
||||
Source[i].Index = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void RemoveAt(int index)
|
||||
{
|
||||
lock (_locker)
|
||||
{
|
||||
Source.RemoveAt(index);
|
||||
for (int i = index; i < Source.Count; i++)
|
||||
{
|
||||
Source[i].Index = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public virtual T this[int index] {
|
||||
get { return Source[index]; }
|
||||
set {
|
||||
lock (_locker)
|
||||
{
|
||||
value.Index = index;
|
||||
Source[index] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user