public static IEnumerable <IModListingGetter> ListingsFromPath(
            FilePath cccFilePath,
            DirectoryPath dataPath,
            IFileSystem?fileSystem = null)
        {
            fileSystem ??= IFileSystemExt.DefaultFilesystem;
            var dataDirectoryInjection = new DataDirectoryInjection(dataPath);

            return(new CreationClubListingsProvider(
                       fileSystem,
                       dataDirectoryInjection,
                       new CreationClubListingsPathInjection(cccFilePath),
                       new CreationClubRawListingsReader()).Get());
        }
        public static IEnumerable <IModListingGetter> GetListings(GameCategory category, DirectoryPath dataPath)
        {
            var gameCategoryInjection  = new GameCategoryInjection(category);
            var dataDirectoryInjection = new DataDirectoryInjection(dataPath);

            return(new CreationClubListingsProvider(
                       IFileSystemExt.DefaultFilesystem,
                       dataDirectoryInjection,
                       new CreationClubListingsPathProvider(
                           gameCategoryInjection,
                           new CreationClubEnabledProvider(
                               gameCategoryInjection),
                           new GameDirectoryInjection(dataPath.Directory !.Value)),
                       new CreationClubRawListingsReader()).Get());
        }
        public void SkipMissingListings()
        {
            var cccPath = Path.Combine(DataDir, "cccPlugin.txt");
            var fs      = new MockFileSystem(new Dictionary <string, MockFileData>()
            {
                { cccPath, @"ModA.esp
ModB.esp" },
                { Path.Combine(DataDir, "ModA.esp"), string.Empty }
            });

            var dataDirectoryInjection = new DataDirectoryInjection(DataDir);

            new CreationClubListingsProvider(
                fs,
                dataDirectoryInjection,
                new CreationClubListingsPathInjection(cccPath),
                new CreationClubRawListingsReader())
            .Get().Should().Equal(
                new ModListing("ModA.esp", true));
        }
        public static IObservable <IChangeSet <IModListingGetter> > GetLiveLoadOrder(
            FilePath cccFilePath,
            DirectoryPath dataFolderPath,
            out IObservable <ErrorResponse> state,
            IFileSystem?fileSystem = null,
            IScheduler?scheduler   = null)
        {
            fileSystem ??= IFileSystemExt.DefaultFilesystem;
            var cccPath = new CreationClubListingsPathInjection(cccFilePath);
            var dataDir = new DataDirectoryInjection(dataFolderPath);

            return(new CreationClubLiveLoadOrderProvider(
                       new CreationClubLiveListingsFileReader(
                           fileSystem,
                           new CreationClubRawListingsReader(),
                           cccPath),
                       new CreationClubLiveLoadOrderFolderWatcher(
                           fileSystem,
                           dataDir)).Get(out state, scheduler));
        }