Пример #1
0
        public void SetAppIdForInstance(IContainer instance, IAppEnvironment env, int?appId, ILog parentLog)
        {
            Log.Add($"SetAppIdForInstance({instance.Id}, -, appid: {appId})");
            // Reset temporary template
            /*BlocksManager.*/ ClearPreviewTemplate(instance.Id);

            // ToDo: Should throw exception if a real BlockConfiguration exists

            var module = (instance as Container <ModuleInfo>).UnwrappedContents;
            var zoneId = env.ZoneMapper.GetZoneId(module.OwnerPortalID);

            if (appId == 0 || !appId.HasValue)
            {
                DnnTenantSettings.UpdateInstanceSettingForAllLanguages(instance.Id, Settings.AppNameString, null, Log);
            }
            else
            {
                var appName = /*Factory.GetAppsCache*/ Eav.Apps.State.Zones[zoneId].Apps[appId.Value];
                DnnTenantSettings.UpdateInstanceSettingForAllLanguages(instance.Id, Settings.AppNameString, appName, Log);
            }

            // Change to 1. available template if app has been set
            if (appId.HasValue)
            {
                var appIdentity  = new AppIdentity(zoneId, appId.Value);
                var cms          = new CmsRuntime(/*zoneId, appId.Value*/ appIdentity, Log, true, env.PagePublishing.IsEnabled(instance.Id));
                var templateGuid = cms.Views.GetAll().FirstOrDefault(t => !t.IsHidden)?.Guid;
                if (templateGuid.HasValue)
                {
                    /*BlocksManager.*/ SetPreviewTemplate(instance.Id, templateGuid.Value);
                }
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="Log4JXmlEventLayoutRenderer" /> class.
        /// </summary>
        internal Log4JXmlEventLayoutRenderer(IAppEnvironment appEnvironment)
        {
#if NETSTANDARD1_3
            AppInfo = "NetCore Application";
#else
            AppInfo = string.Format(
                CultureInfo.InvariantCulture,
                "{0}({1})",
                appEnvironment.AppDomain.FriendlyName,
                appEnvironment.CurrentProcessId);
#endif

            Parameters = new List <NLogViewerParameterInfo>();

            try
            {
                _machineName = EnvironmentHelper.GetMachineName();
                if (string.IsNullOrEmpty(_machineName))
                {
                    InternalLogger.Info("MachineName is not available.");
                }
            }
            catch (Exception exception)
            {
                InternalLogger.Error(exception, "Error getting machine name.");
                if (exception.MustBeRethrown())
                {
                    throw;
                }

                _machineName = string.Empty;
            }
        }
        public MainAboutModel(RootModel root, ConnectionService connectionService, IAppEnvironment environment, IdService idService, CoreData coreData)
        {
            Root = root;
            _connectionService = connectionService;
            _environment       = environment;
            _idService         = idService;
            _coreData          = coreData;
            CopyToClipboard    = () => DoCopyToClipboard();

            Version = ClientVersionHelper.GetVersion();

            var assembly = Assembly.GetExecutingAssembly();

            using (Stream stream = assembly.GetManifestResourceStream("Streamster.ClientCore.LICENSE.txt"))
                using (StreamReader reader = new StreamReader(stream))
                {
                    License = reader.ReadToEnd();
                }

            using (Stream stream = assembly.GetManifestResourceStream("Streamster.ClientCore.CREDITS.txt"))
                using (StreamReader reader = new StreamReader(stream))
                {
                    Credits = reader.ReadToEnd();
                }

            FeedbackSend = () => _ = SendFeedback();
        }
Пример #4
0
        public static async Task <int> ExecuteAsync(
            PluginOptions options,
            IConsole console,
            IAppEnvironment appEnvironment,
            InvocationContext context = null)
        {
            console.Out.WriteLine($"Installing plugin from package '{options.PackageId}'");

            var packageManager = new NuGetPluginPackageManager(appEnvironment);

            try
            {
                PluginPackage result = await packageManager.InstallLatestAsync(options.PackageId).ConfigureAwait(false);

                console.Out.WriteLine($"Using plugin version {result.Version}");
                console.Out.WriteLine($"Installed plugin {result.Name} to {result.PluginPath}");
            }
            catch (System.IO.IOException)
            {
                console.Out.WriteLine("The latest version of this plugin is already installed.");
                return(ReturnCodes.Error);
            }

            return(ReturnCodes.Ok);
        }
Пример #5
0
        public static async Task <int> ExecuteAsync(
            TemplateOptions options,
            IConsole console,
            IAppEnvironment appEnvironment,
            InvocationContext context = null)
        {
            console.Out.WriteLine($"Uninstalling template package '{options.PackageId}'");

            var templateSettingsManager       = new TemplateSettingsManager(appEnvironment);
            TemplatesSettings currentSettings = templateSettingsManager.LoadSettings() ?? new TemplatesSettings();

            var packageManager = new NuGetTemplatePackageManager(appEnvironment);

            if (currentSettings.Packages.Exists(templatePackage => templatePackage.PackageId == options.PackageId))
            {
                TemplatePackage package = currentSettings.Packages.Find(templatePackage => templatePackage.Id == options.PackageId);

                if (package != null)
                {
                    await packageManager.UnnstallAsync(package).ConfigureAwait(false);

                    currentSettings.Packages.Remove(package);

                    if (currentSettings.DefaultTemplate.PackageName == package.PackageId)
                    {
                        currentSettings.DefaultTemplate = new DefaultTemplate();
                    }
                }
            }

            return(ReturnCodes.Ok);
        }
        public ChannelModel(IChannel source, IAppEnvironment environment, CoreData coreData, MainTargetsModel parent)
        {
            Source = source;
            Parent = parent;

            if (source.TargetId != null)
            {
                Target            = coreData.Root.Targets[source.TargetId];
                HasRtmpUrlInFront = (Target.Flags & TargetFlags.Url) > 0;
            }
            else
            {
                Target            = parent.CustomTarget;
                HasRtmpUrlInFront = true;
            }

            HasRtmpUrlInOptions = true;// (Target.Flags & TargetFlags.Url) > 0;

            Delete     = () => parent.Remove(this);
            Start      = DoStart;
            Stop       = () => Source.IsOn = false;
            GoToHelp   = () => environment.OpenUrl(string.Format(parent.AppData.TargetHintTemplate, source.TargetId ?? "Custom"));
            GoToWebUrl = () => environment.OpenUrl(WebUrl.Value);

            WebUrl.OnChange  = (o, n) => Source.WebUrl = n == Target.WebUrl ? null : n;
            Name.OnChange    = (o, n) => Source.Name = n == Target.Name ? null : n;
            RtmpUrl.OnChange = (o, n) => Source.RtmpUrl = n == Target.DefaultRtmpUrl ? null : n;

            IsTranscoded.OnChange = (o, n) => Transcoding.SetTranscoding(Source, n);

            TaskHelper.RunUnawaited(() => parent.GetImageAsync(Logo, source.TargetId), "Get image for channel");
        }
Пример #7
0
 public SearchProcess(
     IUserInterface userInterface,
     IAppEnvironment <SearchProcess> appEnvironment)
 {
     this.userInterface  = userInterface;
     this.appEnvironment = appEnvironment;
 }
Пример #8
0
        public void SetAppIdForInstance(IInstanceInfo instance, IAppEnvironment env, int?appId, Log parentLog)
        {
            Log.Add($"SetAppIdForInstance({instance.Id}, -, appid: {appId})");
            // Reset temporary template
            ContentGroupManager.ClearPreviewTemplate(instance.Id);

            // ToDo: Should throw exception if a real ContentGroup exists

            var module = (instance as EnvironmentInstance <ModuleInfo>).Original;
            var zoneId = env.ZoneMapper.GetZoneId(module.OwnerPortalID);

            if (appId == 0 || !appId.HasValue)
            {
                DnnStuffToRefactor.UpdateInstanceSettingForAllLanguages(instance.Id, Settings.AppNameString, null, Log);
            }
            else
            {
                var appName = ((BaseCache)DataSource.GetCache(0, 0)).ZoneApps[zoneId].Apps[appId.Value];
                DnnStuffToRefactor.UpdateInstanceSettingForAllLanguages(instance.Id, Settings.AppNameString, appName, Log);
            }

            // Change to 1. available template if app has been set
            if (appId.HasValue)
            {
                var app          = App.LightWithoutData(new DnnTenant(null), zoneId, appId.Value, parentLog: Log);
                var templateGuid = app.TemplateManager.GetAllTemplates().FirstOrDefault(t => !t.IsHidden)?.Guid;
                if (templateGuid.HasValue)
                {
                    ContentGroupManager.SetPreviewTemplate(instance.Id, templateGuid.Value);
                }
            }
        }
Пример #9
0
        public LoginModel(RootModel root, MainModel main, UpdateModel updateModel,
                          LocalSettingsService settingsService,
                          ConnectionService connectionService,
                          NotificationService notificationService,
                          IAppEnvironment environment,
                          IdService idService)
        {
            Root = root;

            _settingsService     = settingsService;
            _connectionService   = connectionService;
            _notificationService = notificationService;
            _main        = main;
            _updateModel = updateModel;
            _environment = environment;
            _idService   = idService;
            var s = settingsService.Settings;

            SavePassword   = s.SavePassword;
            UserName       = s.UserName;
            Password       = s.Password;
            UserRegistered = s.UserRegistered;

            Version = ClientVersionHelper.GetVersion();

            DoLogin = async() => await LoginAsync(true);

            DoAnonymousLogin = async() => await LoginAsync(false);

            if (s.AutoLogon && s.SavePassword && s.UserRegistered)
            {
                _ = DoAutoLogin();
            }
        }
 public StaticFilesCacheService(ConnectionService connectionService, IAppEnvironment environment)
 {
     // TODO: cache update!!!!!
     _connectionService = connectionService;
     _root      = Path.Combine(environment.GetStorageFolder(), "cache");
     _initCache = Task.Run(() => InitCache());
 }
Пример #11
0
        /// <summary>
        /// Initializes a new instance of the <see cref="BaseDirLayoutRenderer" /> class.
        /// </summary>
        internal BaseDirLayoutRenderer(IAppEnvironment appEnvironment)
        {
            _baseDir = appEnvironment.AppDomainBaseDirectory;
#if !SILVERLIGHT && !NETSTANDARD1_3
            _appEnvironment = appEnvironment;
#endif
        }
Пример #12
0
        /// <summary>
        /// Initializes a new instance of the <see cref="BaseDirLayoutRenderer" /> class.
        /// </summary>
        public BaseDirLayoutRenderer(IAppDomain appDomain)
        {
            _baseDir = appDomain.BaseDirectory;
#if !SILVERLIGHT && !NETSTANDARD1_3
            _appEnvironment = LogFactory.DefaultAppEnvironment;
#endif
        }
 public NormalizationEnginePhase(
     INormalizer normalizer,
     IWordExtractor wordExtractor,
     IAppEnvironment <NormalizationEnginePhase> appEnvironment) : base(appEnvironment)
 {
     this.normalizer    = normalizer;
     this.wordExtractor = wordExtractor;
 }
Пример #14
0
 public ConnectionService(IAppEnvironment environment, IdService idService, LogService logService, IAppResources appResources)
 {
     _environment  = environment;
     _idService    = idService;
     _logService   = logService;
     _appResources = appResources;
     _domain       = appResources.AppData.Domain;
 }
Пример #15
0
 public AppLoader(string name, IEnumerable <string> tags, string[] _commandlineArguments)
 {
     _app = new App
     {
         Args = _commandlineArguments,
     };
     _environment = new AppEnvironment(name, tags);
 }
 public BooleanSearchEnginePhase(
     ISearchProcess searchProcess,
     ISearchExpressionParser expressionParser,
     IIndexScan indexScan,
     IAppEnvironment <BooleanSearchEnginePhase> appEnvironment) : base(appEnvironment)
 {
     this.searchProcess    = searchProcess;
     this.expressionParser = expressionParser;
     this.indexScan        = indexScan;
 }
Пример #17
0
        public static async Task <int> ExecuteAsync(
            EnvironmentOptions options,
            IConsole console,
            IAppEnvironment appEnvironment,
            InvocationContext context = null)
        {
            await appEnvironment.InitializeAsync(console).ConfigureAwait(false);

            return(ReturnCodes.Ok);
        }
Пример #18
0
        public static Task <int> ExecuteAsync(
            IConsole console,
            IAppEnvironment appEnvironment,
            InvocationContext context = null)
        {
            /*var packageManager = new NuGetPluginPackageManager(appEnvironment);
             * TemplatePackage result = await packageManager.InstallLatestAsync(options.PackageId).ConfigureAwait(false);*/

            return(Task.FromResult(ReturnCodes.Ok));
        }
Пример #19
0
        public SceneEditingModel(CoreData coreData, SourcesModel sources, IAppEnvironment environment, ResourceService resourceService, IImageHelper imageHelper, StreamSettingsModel streamSettings)
        {
            CoreData        = coreData;
            Sources         = sources;
            Environment     = environment;
            ResourceService = resourceService;
            ImageHelper     = imageHelper;
            _streamSettings = streamSettings;
            AddLayer        = SelectAddLayer;

            Close = DoClose;
        }
Пример #20
0
        public MainModel(RootModel root,
                         MainTargetsModel targets,
                         MainSettingsModel settings,
                         SourcesModel sources,
                         StreamSettingsModel streamSettings,
                         MainStreamerModel streamer,
                         MainIndicatorsModel indicators,
                         MainVpnModel vpn,
                         MainAboutModel about,
                         AudioModel audio,
                         HubConnectionService hubConnectionService,
                         IWindowStateManager windowStateManager,
                         IAppEnvironment environment,
                         CoreData coreData,
                         StateLoggerService stateLoggerService,
                         LocalSettingsService localSettingsService,
                         IUpdateManager updateManager,
                         TransientMessageModel transientMessageModel,
                         IAppResources appResources,
                         SceneEditingModel sceneEditingModel,
                         ResourceService resourceService)
        {
            Root                  = root;
            Targets               = targets;
            Settings              = settings;
            Sources               = sources;
            StreamSettings        = streamSettings;
            Streamer              = streamer;
            Indicators            = indicators;
            Vpn                   = vpn;
            About                 = about;
            Audio                 = audio;
            _hubConnectionService = hubConnectionService;
            _windowStateManager   = windowStateManager;
            _environment          = environment;
            _coreData             = coreData;
            _stateLoggerService   = stateLoggerService;
            _localSettingsService = localSettingsService;
            _updateManager        = updateManager;
            TransientMessage      = transientMessageModel;
            _appResources         = appResources;
            SceneEditing          = sceneEditingModel;
            _resourceService      = resourceService;
            _serverClient         = new ModelClient {
                Filter = new FilterConfigurator(true).Build()
            };
            _coreData.GetManager().Register(_serverClient);
            _serverClient.SerializeAndClearChanges();

            _coreData.Subscriptions.OnChangeForSubscriptions = async() => await ProcessLocalOrRemoteChange();

            _coreData.Subscriptions.OnLocalChange = async() => await ProcessLocalChange();
        }
Пример #21
0
        public static async Task <int> ExecuteAsync(
            NewFileOptions fileOptions,
            IConsole console,
            IAppEnvironment appEnvironment,
            InvocationContext context = null)
        {
            var settingsManager = new EnvironmentSettingsManager(appEnvironment);
            EnvironmentSettings environmentSettings = settingsManager.LoadSettings();

            if (environmentSettings.WorkspacePath != null && fileOptions.FilePath != null)
            {
                console.Error.WriteLine("You must either set a workspace via the environment command or supply a filepath.");
                return(ReturnCodes.Error);
            }

            if (fileOptions.FilePath != null)
            {
                environmentSettings.WorkspacePath = fileOptions.FilePath.FullName;
            }

            List <ContentTypeConventionsRoot> conventions = await FindAllConventions(appEnvironment);

            // Select the convention that matches the template name specified
            ContentTypeConventionsRoot contentTypeConventionsRoot = conventions.FirstOrDefault(x => x.Conventions.Any(y => y.Conventions.Any(z => z.Value == fileOptions.TemplateName)));

            // Now find the filepath..
            Convention convention = contentTypeConventionsRoot?.Conventions.SelectMany(x => x.Conventions).FirstOrDefault(x => x.ContentType.StartsWith(ConventionContentTypes.FilePaths, StringComparison.CurrentCultureIgnoreCase));

            if (convention != null)
            {
                IVariableDirectoryPath variablePath = convention.Value.ToVariableDirectoryPath();

                if (variablePath.TryResolve(environmentSettings.ToKvPs(), out IAbsoluteDirectoryPath evaluatedPath) == VariablePathResolvingStatus.Success)
                {
                    IAbsoluteFilePath filepath = evaluatedPath.GetChildFileWithName($"post-{DateTime.Now:yyyy-MM-dd-HH-mm-ss}.md");

                    if (!filepath.ParentDirectoryPath.Exists)
                    {
                        Directory.CreateDirectory(filepath.ParentDirectoryPath.ToString());
                    }

                    string template = Path.Join(contentTypeConventionsRoot.FilePath.ParentDirectoryPath.ParentDirectoryPath.ToString(), contentTypeConventionsRoot?.Conventions.FirstOrDefault()?.TemplatePath);

                    File.Copy(template, filepath.ToString());

                    console.Out.WriteLine($"Created: {filepath}");
                }
            }

            return(ReturnCodes.Ok);
        }
Пример #22
0
        public ISettings GetSettings(IAppEnvironment appEnvironment)
        {
            var appRootPath = appEnvironment.AppRootPath ?? string.Empty;

            if (appEnvironment.Location == EnvironmentLocation.AppHarbor)
            {
                return(new AppHarborSettings(WeatherKey, null));
            }
            else
            {
                var configurationPath = Path.Combine(appRootPath, EnvironmentPath, "ConnectionString.txt");
                return(new LocalSettings(WeatherKey, configurationPath));
            }
        }
Пример #23
0
        public static async Task <int> ExecuteAsync(
            TemplateOptions options,
            IConsole console,
            IAppEnvironment appEnvironment,
            InvocationContext context = null)
        {
            console.Out.WriteLine($"Installing template from package '{options.PackageId}'");

            var templateSettingsManager       = new TemplateSettingsManager(appEnvironment);
            TemplatesSettings currentSettings = templateSettingsManager.LoadSettings() ?? new TemplatesSettings();

            var packageManager = new NuGetTemplatePackageManager(appEnvironment);

            if (currentSettings.Packages.Exists(x => x.PackageId == options.PackageId))
            {
                TemplatePackage package = currentSettings.Packages.Find(x => x.Id == options.PackageId);

                if (package != null)
                {
                    await packageManager.UnnstallAsync(package).ConfigureAwait(false);

                    currentSettings.Packages.Remove(package);

                    if (currentSettings.DefaultTemplate.PackageName == package.PackageId)
                    {
                        currentSettings.DefaultTemplate = new DefaultTemplate();
                    }
                }
            }

            TemplatePackage templatePackage =
                await packageManager.InstallLatestAsync(options.PackageId).ConfigureAwait(false);

            if (!currentSettings.Packages.Exists(x => x.Id == templatePackage.Id))
            {
                currentSettings.Packages.Add(templatePackage);
            }

            currentSettings.DefaultTemplate ??= new DefaultTemplate
            {
                ContentType = templatePackage.Templates.First().ContentType,
                PackageName = templatePackage.PackageId,
                PackagePath = templatePackage.InstalltionPath,
            };

            templateSettingsManager.SaveSettings(currentSettings);

            return(ReturnCodes.Ok);
        }
        public static Task <int> ExecuteAsync(
            SetOptions options,
            IConsole console,
            IAppEnvironment appEnvironment,
            InvocationContext context = null)
        {
            var settingsManager = new EnvironmentSettingsManager(appEnvironment);

            EnvironmentSettings settings = settingsManager.LoadSettings() ?? new EnvironmentSettings();

            if (options.Username != null)
            {
                settings.Username = options.Username.ToLowerInvariant();
            }

            if (options.WorkspacePath != null)
            {
                settings.WorkspacePath = options.WorkspacePath.FullName;
            }

            if (options.PublishPath != null)
            {
                settings.PublishPath = options.PublishPath.FullName;
            }

            if (options.Key != null && options.Value != null)
            {
                if (settings.Configuration.ContainsKey(options.Key))
                {
                    settings.Configuration[options.Key] = options.Value;
                }
                else
                {
                    settings.Configuration.Add(options.Key, options.Value);
                }
            }

            settingsManager.SaveSettings(settings);

            return(Task.FromResult(ReturnCodes.Ok));
        }
Пример #25
0
        public DnnApiControllerWithFixes()
        {
            // ensure that the sql connection string is correct
            // this is technically only necessary, when dnn just restarted and didn't already set this
            Settings.EnsureSystemIsInitialized();

            // ensure that the call to this webservice doesn't reset the language in the cookie
            // this is a dnn-bug
            Helpers.RemoveLanguageChangingCookie();

            Log = new Log("DNN.WebApi", null, $"Path: {HttpContext.Current?.Request?.Url?.AbsoluteUri}");

            // ReSharper disable VirtualMemberCallInConstructor
            if (LogHistorySetName != null)
            {
                History.Add(LogHistorySetName, Log);
            }
            // ReSharper restore VirtualMemberCallInConstructor

            Env = new DnnEnvironment(Log);
        }
        public LocalSettingsService(IAppEnvironment environment)
        {
            _file = Path.Combine(environment.GetStorageFolder(), FileName);

            Safe(() =>
            {
                if (File.Exists(_file))
                {
                    var encrypted = File.ReadAllBytes(_file);
                    var bytes     = ProtectedData.Unprotect(encrypted, null, DataProtectionScope.CurrentUser);
                    var str       = Encoding.UTF8.GetString(bytes);
                    Settings      = JsonConvert.DeserializeObject <LocalSettings>(str);
                }
                else
                {
                    NoSettingsFileAtLoad = true;
                }
            });

            Settings = Settings ?? new LocalSettings();
        }
Пример #27
0
        public MainStreamerModel(CoreData coreData,
                                 ScreenRendererModel screenRenderer,
                                 SourcesModel sources,
                                 ResourceService resourceService,
                                 IAppEnvironment appEnvironment,
                                 IWindowStateManager windowStateManager,
                                 AudioModel audioModel,
                                 IAppResources appResource)
        {
            _coreData           = coreData;
            _sources            = sources;
            _resourceService    = resourceService;
            _appEnvironment     = appEnvironment;
            _windowStateManager = windowStateManager;
            _audioModel         = audioModel;
            _appResource        = appResource;
            ScreenRenderer      = screenRenderer;

            _healthCheck = new StreamerHealthCheck(coreData);

            Core.InitOnMain();
        }
        public static async Task <int> ExecuteAsync(
            PluginOptions options,
            IConsole console,
            IAppEnvironment appEnvironment,
            InvocationContext context = null)
        {
            console.Out.WriteLine($"Uninstalling plugin with package id '{options.PackageId}'");

            var packageManager = new NuGetPluginPackageManager(appEnvironment);

            try
            {
                await packageManager.UninstallAsync(options.PackageId).ConfigureAwait(false);
            }
            catch (Exception exception)
            {
                console.Error.WriteLine(exception.Message);
                return(ReturnCodes.Exception);
            }

            return(ReturnCodes.Ok);
        }
Пример #29
0
        public LogService(IAppEnvironment environment, Func <HubConnectionService> hubConnectionServiceFactory)
        {
            Log.Logger = new LoggerConfiguration()
                         .MinimumLevel.ControlledBy(_switch)
#if DEBUG
                         //.WriteTo.Async(a =>
                         //{
                         //    a.Debug(outputTemplate: "[{Timestamp:dd HH:mm:ss.fff} {Level:u3}] {Message:lj}{NewLine}{Exception}");
                         //})
#endif
                         .WriteTo.File(path: $"{environment.GetStorageFolder()}\\Logs\\Client.txt",
                                       fileSizeLimitBytes: 10_000_000,
                                       retainedFileCountLimit: 2,
                                       rollOnFileSizeLimit: true,
                                       //                flushToDiskInterval: TimeSpan.Zero,
                                       outputTemplate: "[{Timestamp:dd HH:mm:ss.fff}] {Level:u3}]: {Message:lj}{NewLine}{Exception}")
                         .WriteTo.ServerLog(hubConnectionServiceFactory)
                         .CreateLogger();

            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

            Log.Information($"Application started '{ClientVersionHelper.GetVersion()}'");
        }
Пример #30
0
        private static IEnumerable <IAbsoluteFilePath> FindAllConventionFiles(IAppEnvironment appEnvironment)
        {
            var conventionFilePaths = new List <IAbsoluteFilePath>();

            foreach (IAbsoluteDirectoryPath pluginPath in appEnvironment.TemplatesPath.ChildrenDirectoriesPath)
            {
                foreach (IAbsoluteDirectoryPath child in pluginPath.ChildrenDirectoriesPath)
                {
                    IAbsoluteDirectoryPath current = child;

                    while (current != null)
                    {
                        if (current.GetChildFileWithName("conventions.json").Exists)
                        {
                            conventionFilePaths.Add(current.GetChildFileWithName("conventions.json"));
                        }

                        current = current.ChildrenDirectoriesPath.FirstOrDefault();
                    }
                }
            }

            return(conventionFilePaths);
        }