Skip to content

Feat/publisher studio#269

Open
undead2146 wants to merge 4 commits into
developmentfrom
feat/publisher-studio
Open

Feat/publisher studio#269
undead2146 wants to merge 4 commits into
developmentfrom
feat/publisher-studio

Conversation

@undead2146
Copy link
Copy Markdown
Member

@undead2146 undead2146 commented Jan 29, 2026

Overview

This PR implements the Publisher Studio, a tool and underlying infrastructure that enables content creators to build, manage, and publish their own content catalogs without manual JSON editing. It introduces a decentralized 3-tier URL architecture designed for high availability, content stability, and a seamless user subscription experience.

Features

🛠️ Publisher Studio Tool

  • Full Creator Workflow: Managed tabs for Publisher Profile, Content Library, and Publish & Share.
  • Content Management: UI for adding mods, maps, and addons with rich metadata (banners, screenshots, changelogs).
  • Version Control: Semantic versioning support for releases and artifacts.
  • Dependency Management: Support for both internal and cross-publisher dependencies with version constraints.
  • Setup Wizard: A guided first-time experience for new creators.

🏗️ 3-Tier URL Architecture

  • Tier 1 (Definition): Permanent publisher.json providing publisher identity and catalog pointers.
  • Tier 2 (Catalog): Permanent catalog.json indexing content items and their releases.
  • Tier 3 (Artifacts): Immutable content binaries (ZIP/RAR/7z) allowing for reliable versioning and rollback.

🌐 Decentralized Hosting Integration

  • GitHub Integration: Automated uploads of artifacts to GitHub Releases and catalogs to GitHub Gists.
  • Google Drive & Dropbox: Support for direct hosting and URL stability via file IDs.
  • Manual Hosting: Support for custom HTTP/HTTPS endpoints and CDNs.

⚙️ Content Pipeline Enhancements

  • Automated Discovery: GenericCatalogDiscoverer automatically fetches and parses subscribed catalogs.
  • Manifest Resolution: GenericCatalogResolver generates ContentManifest blueprints dynamically from catalog metadata.
  • CAS Integration: GenericCatalogManifestFactory handles automated SHA256 hashing and storage in the Content-Addressable Storage system.
  • Dependency Resolver: CrossPublisherDependencyResolver detects and prompts for missing dependencies across different publishers.

🎨 UI & UX Integration

  • Downloads Sidebar: Dynamic integration of subscribed publishers with support for custom icons.
  • Multi-Catalog Support: Tabbed browsing when a publisher manages multiple content types (e.g., Mods vs Maps).
  • Glassmorphic Design: Modern, semi-transparent UI themed with deep navy accents for a consistent GenHub experience.

Greptile Summary

This PR successfully implements the Publisher Studio feature, providing creators with a comprehensive tool for building, managing, and publishing content catalogs without manual JSON editing. The implementation introduces a well-architected 3-tier URL system (Definition → Catalog → Artifacts) designed for high availability and content stability.

Key Achievements

  • Complete Publisher Studio Tooling: Full-featured UI with Publisher Profile, Content Library, and Publish & Share tabs
  • Decentralized Hosting Support: Integration with GitHub (Releases + Gists), Dropbox, Google Drive, and manual hosting options
  • Universal Content Pipeline: GenericCatalogDiscoverer, GenericCatalogResolver, and GenericCatalogManifestFactory enable automatic content discovery from any subscribed publisher
  • Cross-Publisher Dependencies: CrossPublisherDependencyResolver detects and prompts for missing dependencies across different publishers
  • Multi-Catalog Support: Publishers can manage multiple catalogs (e.g., separate Mods vs Maps catalogs) with tabbed browsing
  • Comprehensive Testing: Integration and unit tests cover the core Publisher Studio workflow

Issues Found

  • Typo: Line 468 in PublishShareViewModel.cs has "Generatng" instead of "Generating"
  • Potential Null References: Lines 351-353 in PublisherStudioViewModel.cs use null-forgiving operators (!) on values that could be null (_hostingProviderFactory and SelectedCatalog)
  • HttpClient Disposal: DropboxHostingProvider creates HttpClient manually (line 44) - already noted in previous review, implements IDisposable but should ideally use IHttpClientFactory

Architecture Highlights

The 3-tier URL architecture is well-designed:

  • Tier 1 (publisher.json): Permanent definition providing publisher identity and catalog pointers
  • Tier 2 (catalog.json): Permanent catalog indexing content and releases
  • Tier 3 (artifacts): Immutable content binaries with SHA256 hashing for CAS integration

The content pipeline follows a clean separation of concerns with discoverers, resolvers, and manifest factories, making it extensible for future publishers.

Confidence Score: 4/5

  • This PR is safe to merge with minor issues that should be addressed
  • Score reflects a well-architected feature with comprehensive testing and clean implementation patterns. The typo and null-forgiving operator issues are minor and easy to fix. The HttpClient disposal concern was already noted in previous reviews. Overall code quality is high with proper error handling, constants usage, and separation of concerns.
  • GenHub/GenHub/Features/Tools/ViewModels/PublisherStudioViewModel.cs (null reference handling), GenHub/GenHub/Features/Tools/ViewModels/PublishShareViewModel.cs (typo fix)

Important Files Changed

Filename Overview
GenHub/GenHub/Features/Tools/Services/PublisherStudioService.cs Core service for managing Publisher Studio projects - includes creation, loading, saving, catalog export, and validation. Clean implementation with proper error handling.
GenHub/GenHub/Features/Tools/ViewModels/PublisherStudioViewModel.cs Main viewmodel for Publisher Studio UI - handles project management, catalog switching, and child viewmodels. Has potential null reference issues with null-forgiving operators on lines 351-353.
GenHub/GenHub/Features/Tools/ViewModels/PublishShareViewModel.cs Handles catalog validation, export, and publishing to hosting providers. Contains typo on line 468 but otherwise solid implementation with proper authentication flow.
GenHub/GenHub/Features/Tools/Services/Hosting/GitHubHostingProvider.cs GitHub hosting provider implementation using Octokit - supports releases for artifacts and gists for catalogs. Well-structured with proper error handling.
GenHub/GenHub/Features/Tools/Services/Hosting/DropboxHostingProvider.cs Dropbox hosting provider with file upload and shared link creation. Implements IDisposable for HttpClient cleanup (already noted in previous review thread).
GenHub/GenHub/Features/Content/Services/Catalog/GenericCatalogDiscoverer.cs Universal discoverer for publisher catalogs following GenHub schema. Clean implementation with proper HTTP timeout, size limits, and filtering logic.
GenHub/GenHub/Features/Content/Services/Catalog/CrossPublisherDependencyResolver.cs Resolves dependencies across different publishers by fetching and parsing external catalogs. Handles missing dependencies and creates resolvable content search results.
GenHub/GenHub/Features/Content/Services/Catalog/GenericCatalogManifestFactory.cs Creates ContentManifest objects from publisher catalogs - computes SHA256 hashes for CAS storage and configures installation instructions. Solid implementation.

Sequence Diagram

sequenceDiagram
    participant Creator as Content Creator
    participant PS as Publisher Studio
    participant HP as Hosting Provider
    participant User as End User
    participant GH as GenHub Client
    participant Disc as GenericCatalogDiscoverer
    participant Res as GenericCatalogResolver
    participant Fac as GenericCatalogManifestFactory
    
    Note over Creator,PS: Creator Publishing Flow
    Creator->>PS: Create Project & Add Content
    PS->>PS: Build catalog.json
    PS->>PS: Validate Catalog
    Creator->>PS: Upload to Hosting
    PS->>HP: Upload Artifacts (Tier 3)
    HP-->>PS: Return Artifact URLs
    PS->>PS: Update catalog with URLs
    PS->>HP: Upload catalog.json (Tier 2)
    HP-->>PS: Return Catalog URL
    PS->>HP: Upload publisher.json (Tier 1)
    HP-->>PS: Return Definition URL
    PS-->>Creator: Share Subscription Link
    
    Note over User,GH: User Subscription Flow
    User->>GH: Click genhub://subscribe?url=...
    GH->>HP: Fetch publisher.json
    HP-->>GH: Return Definition
    GH->>GH: Store Subscription
    GH->>Disc: Discover Content
    Disc->>HP: Fetch catalog.json
    HP-->>Disc: Return Catalog
    Disc-->>GH: Return Content Items
    
    Note over User,Fac: User Installation Flow
    User->>GH: Install Content
    GH->>Res: Resolve Content
    Res->>HP: Download Artifact (Tier 3)
    HP-->>Res: Return Archive
    Res->>Res: Extract Files
    Res->>Fac: Create Manifest
    Fac->>Fac: Compute SHA256 Hashes
    Fac->>Fac: Configure Installation
    Fac-->>GH: Return ContentManifest
    GH->>GH: Install to Game Profile
Loading

Last reviewed commit: 456cac3

undead2146 and others added 3 commits January 14, 2026 18:56
…tor publishing system

- Standardize content discovery, resolution, and acquisition across multiple sources (GitHub, ModDB, CNCLabs, AODMaps).
- Introduce Creator Publishing system with self-hosted JSON catalogs and subscriptions.
- Redesign Downloads browser with publisher-specific filters and sidebar navigation.
- Implement Playwright-based scraping for robust web discovery.
- Extensive documentation and architectural flowcharts for the new system.
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jan 29, 2026

Important

Review skipped

Too many files!

This PR contains 229 files, which is 79 over the limit of 150.

📥 Commits

Reviewing files that changed from the base of the PR and between b937355 and 456cac3.

📒 Files selected for processing (229)
  • CODE REVIEW COMMENTS.md
  • GenHub/Directory.Packages.props
  • GenHub/GenHub.Core/Constants/ActionSetConstants.cs
  • GenHub/GenHub.Core/Constants/ConfigurationKeys.cs
  • GenHub/GenHub.Core/Constants/ExternalUrls.cs
  • GenHub/GenHub.Core/Constants/PublisherDocumentation.cs
  • GenHub/GenHub.Core/Constants/RegistryConstants.cs
  • GenHub/GenHub.Core/GenHub.Core.csproj
  • GenHub/GenHub.Core/Helpers/GameSettingsMapper.cs
  • GenHub/GenHub.Core/Interfaces/Content/ICrossPublisherDependencyResolver.cs
  • GenHub/GenHub.Core/Interfaces/GameSettings/IGameSettingsService.cs
  • GenHub/GenHub.Core/Interfaces/Providers/IPublisherCatalogParser.cs
  • GenHub/GenHub.Core/Interfaces/Providers/IPublisherCatalogRefreshService.cs
  • GenHub/GenHub.Core/Interfaces/Providers/IPublisherSubscriptionStore.cs
  • GenHub/GenHub.Core/Interfaces/Providers/IVersionSelector.cs
  • GenHub/GenHub.Core/Interfaces/Providers/VersionPolicy.cs
  • GenHub/GenHub.Core/Interfaces/Publishers/IPublisherDefinitionService.cs
  • GenHub/GenHub.Core/Interfaces/Publishers/IPublisherStudioService.cs
  • GenHub/GenHub.Core/Messages/CloseContentDetailMessage.cs
  • GenHub/GenHub.Core/Messages/ClosePublisherDetailsMessage.cs
  • GenHub/GenHub.Core/Messages/OpenPublisherDetailsMessage.cs
  • GenHub/GenHub.Core/Models/Content/MissingDependency.cs
  • GenHub/GenHub.Core/Models/Enums/SubscriptionType.cs
  • GenHub/GenHub.Core/Models/GameSettings/GameSettings.cs
  • GenHub/GenHub.Core/Models/GameSettings/GeneralsOnlineSettings.cs
  • GenHub/GenHub.Core/Models/ModDB/MapDetails.cs
  • GenHub/GenHub.Core/Models/Providers/CatalogContentItem.cs
  • GenHub/GenHub.Core/Models/Providers/CatalogDependency.cs
  • GenHub/GenHub.Core/Models/Providers/CatalogEntry.cs
  • GenHub/GenHub.Core/Models/Providers/ContentRelease.cs
  • GenHub/GenHub.Core/Models/Providers/ContentRichMetadata.cs
  • GenHub/GenHub.Core/Models/Providers/PublisherCatalog.cs
  • GenHub/GenHub.Core/Models/Providers/PublisherDefinition.cs
  • GenHub/GenHub.Core/Models/Providers/PublisherProfile.cs
  • GenHub/GenHub.Core/Models/Providers/PublisherReferral.cs
  • GenHub/GenHub.Core/Models/Providers/PublisherReferralOption.cs
  • GenHub/GenHub.Core/Models/Providers/PublisherSubscription.cs
  • GenHub/GenHub.Core/Models/Providers/PublisherSubscriptionCollection.cs
  • GenHub/GenHub.Core/Models/Providers/ReleaseArtifact.cs
  • GenHub/GenHub.Core/Models/Providers/SubscribedCatalogEntry.cs
  • GenHub/GenHub.Core/Models/Publishers/HostingState.cs
  • GenHub/GenHub.Core/Models/Publishers/NamedCatalog.cs
  • GenHub/GenHub.Core/Models/Publishers/PublisherStudioProject.cs
  • GenHub/GenHub.Core/Models/Tools/ToolMetadata.cs
  • GenHub/GenHub.Core/Services/Publishers/PublisherDefinitionService.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Common/Services/ConfigurationProviderServiceTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Converters/BoolToBrushConverterTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Converters/IsSubscribedConverterTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Features/Content/CNCLabsMapDiscovererTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Features/Content/GitHubContentProviderTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Features/Content/GitHubResolverTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Features/Content/Services/Catalog/CrossPublisherDependencyResolverTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Features/Content/Services/Catalog/GenericCatalogManifestFactoryTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Features/Content/Services/Catalog/SubscriptionFlowIntegrationTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Features/Content/Services/Publishers/PublisherDefinitionServiceTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Features/GameClients/GameClientManifestIntegrationTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Features/GameProfiles/ViewModels/DownloadsViewModelTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Features/GameProfiles/ViewModels/GameProfileSettingsViewModelTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Features/GameProfiles/ViewModels/MainViewModelTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Features/GameProfiles/ViewModels/SettingsViewModelTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Features/GameSettings/GameSettingsServiceTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Features/Manifest/ContentManifestBuilderTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Features/Manifest/ManifestGenerationServiceTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Features/Tools/PublisherStudioIntegrationTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Features/Tools/Services/PublisherStudioServiceTests.cs
  • GenHub/GenHub.Tests/GenHub.Tests.Core/Infrastructure/DependencyInjection/SharedViewModelModuleTests.cs
  • GenHub/GenHub/App.axaml
  • GenHub/GenHub/App.axaml.cs
  • GenHub/GenHub/Assets/Styles/ThemeResources.axaml
  • GenHub/GenHub/Common/ViewModels/MainViewModel.cs
  • GenHub/GenHub/Common/Views/MainView.axaml
  • GenHub/GenHub/Common/Views/MainWindow.axaml
  • GenHub/GenHub/Common/Views/MainWindow.axaml.cs
  • GenHub/GenHub/Features/Content/Services/Catalog/CrossPublisherDependencyResolver.cs
  • GenHub/GenHub/Features/Content/Services/Catalog/GenericCatalogDiscoverer.cs
  • GenHub/GenHub/Features/Content/Services/Catalog/GenericCatalogManifestFactory.cs
  • GenHub/GenHub/Features/Content/Services/Catalog/GenericCatalogResolver.cs
  • GenHub/GenHub/Features/Content/Services/Catalog/JsonPublisherCatalogParser.cs
  • GenHub/GenHub/Features/Content/Services/Catalog/PublisherCatalogRefreshService.cs
  • GenHub/GenHub/Features/Content/Services/Catalog/PublisherSubscriptionStore.cs
  • GenHub/GenHub/Features/Content/Services/Catalog/VersionSelector.cs
  • GenHub/GenHub/Features/Content/Services/CommunityOutpost/CommunityOutpostDiscoverer.cs
  • GenHub/GenHub/Features/Content/Services/CommunityOutpost/CommunityOutpostResolver.cs
  • GenHub/GenHub/Features/Content/Services/CommunityOutpost/GenPatcherDatCatalogParser.cs
  • GenHub/GenHub/Features/Content/Services/ContentDeliverers/FileSystemDeliverer.cs
  • GenHub/GenHub/Features/Content/Services/ContentDiscoverers/CNCLabsMapDiscoverer.cs
  • GenHub/GenHub/Features/Content/Services/ContentDiscoverers/FileSystemDiscoverer.cs
  • GenHub/GenHub/Features/Content/Services/ContentDiscoverers/GitHubTopicsDiscoverer.cs
  • GenHub/GenHub/Features/Content/Services/ContentDiscoverers/ModDBDiscoverer.cs
  • GenHub/GenHub/Features/Content/Services/ContentResolvers/AODMapsResolver.cs
  • GenHub/GenHub/Features/Content/Services/ContentResolvers/CNCLabsMapResolver.cs
  • GenHub/GenHub/Features/Content/Services/ContentResolvers/ModDBResolver.cs
  • GenHub/GenHub/Features/Content/Services/GeneralsOnline/GeneralsOnlineDiscoverer.cs
  • GenHub/GenHub/Features/Content/Services/GeneralsOnline/GeneralsOnlineJsonCatalogParser.cs
  • GenHub/GenHub/Features/Content/Services/GitHub/GitHubArtifactResolver.cs
  • GenHub/GenHub/Features/Content/Services/GitHub/GitHubDiscoverer.cs
  • GenHub/GenHub/Features/Content/Services/GitHub/GitHubReleasesDiscoverer.cs
  • GenHub/GenHub/Features/Content/Services/GitHub/GitHubResolver.cs
  • GenHub/GenHub/Features/Content/Services/Parsers/AODMapsPageParser.cs
  • GenHub/GenHub/Features/Content/Services/Parsers/ModDBPageParser.cs
  • GenHub/GenHub/Features/Content/Services/Publishers/AODMapsManifestFactory.cs
  • GenHub/GenHub/Features/Content/Services/Publishers/CNCLabsManifestFactory.cs
  • GenHub/GenHub/Features/Content/Services/Publishers/ModDBManifestFactory.cs
  • GenHub/GenHub/Features/Content/Services/Tools/PlaywrightService.cs
  • GenHub/GenHub/Features/Content/ViewModels/Catalog/SubscriptionConfirmationViewModel.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/CatalogTabViewModel.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/ContentDetailViewModel.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/ContentGridItemViewModel.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/DependencyDecision.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/DependencyPromptViewModel.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/DownloadsBrowserViewModel.InstallationCheck.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/DownloadsBrowserViewModel.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/DownloadsViewModel.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/Filters/AODMapsFilterViewModel.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/Filters/CNCLabsFilterViewModel.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/Filters/CommunityOutpostFilterViewModel.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/Filters/FilterPanelViewModelBase.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/Filters/GitHubFilterViewModel.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/Filters/IFilterPanelViewModel.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/Filters/ModDBFilterViewModel.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/Filters/ModDBSection.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/Filters/StaticPublisherFilterViewModel.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/Filters/SuperHackersFilterViewModel.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/InstallableVariant.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/MissingDependencyItemViewModel.cs
  • GenHub/GenHub/Features/Downloads/ViewModels/PublisherItemViewModel.cs
  • GenHub/GenHub/Features/Downloads/Views/ContentCardView.axaml
  • GenHub/GenHub/Features/Downloads/Views/ContentCardView.axaml.cs
  • GenHub/GenHub/Features/Downloads/Views/ContentDetailView.axaml
  • GenHub/GenHub/Features/Downloads/Views/ContentDetailView.axaml.cs
  • GenHub/GenHub/Features/Downloads/Views/DependencyPromptDialog.axaml
  • GenHub/GenHub/Features/Downloads/Views/DependencyPromptDialog.axaml.cs
  • GenHub/GenHub/Features/Downloads/Views/DownloadsBrowserView.axaml
  • GenHub/GenHub/Features/Downloads/Views/DownloadsBrowserView.axaml.cs
  • GenHub/GenHub/Features/Downloads/Views/DownloadsView.axaml
  • GenHub/GenHub/Features/Downloads/Views/FilterPanelView.axaml
  • GenHub/GenHub/Features/Downloads/Views/FilterPanelView.axaml.cs
  • GenHub/GenHub/Features/Downloads/Views/PublisherSidebarView.axaml
  • GenHub/GenHub/Features/Downloads/Views/PublisherSidebarView.axaml.cs
  • GenHub/GenHub/Features/Downloads/Views/SubscriptionConfirmationDialog.axaml
  • GenHub/GenHub/Features/Downloads/Views/SubscriptionConfirmationDialog.axaml.cs
  • GenHub/GenHub/Features/GameProfiles/Infrastructure/GameProcessManager.cs
  • GenHub/GenHub/Features/GameProfiles/ViewModels/GameProfileSettingsViewModel.cs
  • GenHub/GenHub/Features/GameProfiles/ViewModels/GameSettingsViewModel.cs
  • GenHub/GenHub/Features/GameSettings/GameSettingsService.cs
  • GenHub/GenHub/Features/Launching/GameLauncher.cs
  • GenHub/GenHub/Features/Settings/ViewModels/SettingsViewModel.cs
  • GenHub/GenHub/Features/Settings/Views/SettingsView.axaml
  • GenHub/GenHub/Features/Settings/Views/SettingsView.axaml.cs
  • GenHub/GenHub/Features/Tools/Interfaces/IHostingProvider.cs
  • GenHub/GenHub/Features/Tools/Interfaces/IHostingProviderFactory.cs
  • GenHub/GenHub/Features/Tools/Interfaces/IPublisherStudioDialogService.cs
  • GenHub/GenHub/Features/Tools/PublisherStudioTool.cs
  • GenHub/GenHub/Features/Tools/Services/Hosting/DropboxHostingProvider.cs
  • GenHub/GenHub/Features/Tools/Services/Hosting/GitHubHostingProvider.cs
  • GenHub/GenHub/Features/Tools/Services/Hosting/GoogleDriveHostingProvider.cs
  • GenHub/GenHub/Features/Tools/Services/Hosting/HostingProviderFactory.cs
  • GenHub/GenHub/Features/Tools/Services/Hosting/HostingStateManager.cs
  • GenHub/GenHub/Features/Tools/Services/Hosting/ManualHostingProvider.cs
  • GenHub/GenHub/Features/Tools/Services/PublisherStudioDialogService.cs
  • GenHub/GenHub/Features/Tools/Services/PublisherStudioService.cs
  • GenHub/GenHub/Features/Tools/ViewModels/ArtifactUrlStatus.cs
  • GenHub/GenHub/Features/Tools/ViewModels/ContentLibraryViewModel.cs
  • GenHub/GenHub/Features/Tools/ViewModels/Dialogs/AddArtifactDialogViewModel.cs
  • GenHub/GenHub/Features/Tools/ViewModels/Dialogs/AddContentDialogViewModel.cs
  • GenHub/GenHub/Features/Tools/ViewModels/Dialogs/AddDependencyDialogViewModel.cs
  • GenHub/GenHub/Features/Tools/ViewModels/Dialogs/AddReferralDialogViewModel.cs
  • GenHub/GenHub/Features/Tools/ViewModels/Dialogs/AddReleaseDialogViewModel.cs
  • GenHub/GenHub/Features/Tools/ViewModels/Dialogs/PublisherSetupWizardViewModel.cs
  • GenHub/GenHub/Features/Tools/ViewModels/PublishShareViewModel.cs
  • GenHub/GenHub/Features/Tools/ViewModels/PublisherProfileViewModel.cs
  • GenHub/GenHub/Features/Tools/ViewModels/PublisherStudioViewModel.cs
  • GenHub/GenHub/Features/Tools/ViewModels/ReferralsViewModel.cs
  • GenHub/GenHub/Features/Tools/ViewModels/ToolsViewModel.cs
  • GenHub/GenHub/Features/Tools/Views/Dialogs/AddArtifactDialogView.axaml
  • GenHub/GenHub/Features/Tools/Views/Dialogs/AddArtifactDialogView.axaml.cs
  • GenHub/GenHub/Features/Tools/Views/Dialogs/AddContentDialogView.axaml
  • GenHub/GenHub/Features/Tools/Views/Dialogs/AddContentDialogView.axaml.cs
  • GenHub/GenHub/Features/Tools/Views/Dialogs/AddDependencyDialogView.axaml
  • GenHub/GenHub/Features/Tools/Views/Dialogs/AddDependencyDialogView.axaml.cs
  • GenHub/GenHub/Features/Tools/Views/Dialogs/AddReferralDialogView.axaml
  • GenHub/GenHub/Features/Tools/Views/Dialogs/AddReferralDialogView.axaml.cs
  • GenHub/GenHub/Features/Tools/Views/Dialogs/AddReleaseDialogView.axaml
  • GenHub/GenHub/Features/Tools/Views/Dialogs/AddReleaseDialogView.axaml.cs
  • GenHub/GenHub/Features/Tools/Views/Dialogs/PublisherSetupWizardView.axaml
  • GenHub/GenHub/Features/Tools/Views/Dialogs/PublisherSetupWizardView.axaml.cs
  • GenHub/GenHub/Features/Tools/Views/Dialogs/ToolDialogWindow.axaml
  • GenHub/GenHub/Features/Tools/Views/Dialogs/ToolDialogWindow.axaml.cs
  • GenHub/GenHub/Features/Tools/Views/PublisherStudio/ContentLibraryView.axaml
  • GenHub/GenHub/Features/Tools/Views/PublisherStudio/ContentLibraryView.axaml.cs
  • GenHub/GenHub/Features/Tools/Views/PublisherStudio/PublishShareView.axaml
  • GenHub/GenHub/Features/Tools/Views/PublisherStudio/PublishShareView.axaml.cs
  • GenHub/GenHub/Features/Tools/Views/PublisherStudio/PublisherProfileView.axaml
  • GenHub/GenHub/Features/Tools/Views/PublisherStudio/PublisherProfileView.axaml.cs
  • GenHub/GenHub/Features/Tools/Views/PublisherStudio/PublisherStudioView.axaml
  • GenHub/GenHub/Features/Tools/Views/PublisherStudio/PublisherStudioView.axaml.cs
  • GenHub/GenHub/Features/Tools/Views/PublisherStudio/ReferralsView.axaml
  • GenHub/GenHub/Features/Tools/Views/PublisherStudio/ReferralsView.axaml.cs
  • GenHub/GenHub/Features/Tools/Views/ToolsView.axaml
  • GenHub/GenHub/GenHub.csproj
  • GenHub/GenHub/Infrastructure/Converters/BoolToBrushConverter.cs
  • GenHub/GenHub/Infrastructure/Converters/InverseBoolConverter.cs
  • GenHub/GenHub/Infrastructure/Converters/IsSubscribedConverter.cs
  • GenHub/GenHub/Infrastructure/Converters/StringEqualityMultiConverter.cs
  • GenHub/GenHub/Infrastructure/DependencyInjection/ContentPipelineModule.cs
  • GenHub/GenHub/Infrastructure/DependencyInjection/SharedViewModelModule.cs
  • GenHub/GenHub/Infrastructure/DependencyInjection/ToolsModule.cs
  • GenHub/GenHub/appsettings.json
  • coding-style.md
  • docs/.vitepress/config.js
  • docs/FlowCharts/Discovery-Flow.md
  • docs/FlowCharts/Downloads-Flow.md
  • docs/FlowCharts/index.md
  • docs/dev/constants.md
  • docs/dev/contribution-guidelines.md
  • docs/dev/creator-publishing-roadmap.md
  • docs/dev/models.md
  • docs/dev/publisher-architecture.md
  • docs/dev/result-pattern.md
  • docs/features/content/content-dependencies.md
  • docs/features/content/content-pipeline.md
  • docs/features/content/creator-publishing.md
  • docs/features/content/index.md
  • docs/features/content/provider-configuration.md
  • docs/features/content/universal-parser.md
  • docs/features/tools/publisher-studio.md
  • implementation_plan.md
  • publisher_studio_plan.md
  • walkthrough.md

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/publisher-studio

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

greptile-apps[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

@undead2146 undead2146 force-pushed the feat/publisher-studio branch from c531c3c to 456cac3 Compare March 1, 2026 23:20
@kilo-code-bot
Copy link
Copy Markdown

kilo-code-bot Bot commented Mar 1, 2026

Code Review Summary

Status: No NEW Issues Found | Recommendation: Review existing comments

Overview

This PR is substantial with 100 changed files and adds the new Publisher Studio feature. Due to the large size (diff exceeded API limits), I reviewed a representative sample of the most critical files and changes.

Existing Comments: There are already 146 active inline comments on this PR covering various issues.

Review Scope

I reviewed the following areas:

  • Hosting provider implementations (Dropbox, Google Drive, GitHub)
  • Core service files (PublisherDefinitionService)
  • ViewModel changes (PublisherStudioViewModel)
  • Content discovery and resolver updates
  • Model files and constants
  • Test updates
  • Application startup changes

Findings

No NEW issues were found beyond the existing 146 inline comments already present on this PR.

The codebase demonstrates:

  • Consistent use of the Result pattern
  • Proper dependency injection with IHttpClientFactory where appropriate
  • Good error handling with OperationResult types
  • Following coding style guidelines (primary constructors, proper naming)
  • Comprehensive test coverage for new features

Notable Positive Observations

  1. Well-structured architecture - Clear separation of concerns between hosting providers, services, and ViewModels
  2. Proper resource management - Most services that create disposable resources implement IDisposable
  3. Comprehensive documentation - XML doc comments on public APIs
  4. Type safety - Good use of nullable reference types and proper null checks
  5. Modern C# features - Appropriate use of primary constructors, pattern matching, and async/await

Files Reviewed

Reviewed a representative sample including:

  • GenHub/GenHub/Features/Tools/Services/Hosting/DropboxHostingProvider.cs
  • GenHub/GenHub/Features/Tools/Services/Hosting/GoogleDriveHostingProvider.cs
  • GenHub/GenHub/Features/Tools/Services/Hosting/GitHubHostingProvider.cs
  • GenHub/GenHub.Core/Services/Publishers/PublisherDefinitionService.cs
  • GenHub/GenHub/Features/Tools/ViewModels/PublisherStudioViewModel.cs
  • GenHub/GenHub/Features/Content/Services/GitHub/GitHubResolver.cs
  • GenHub/GenHub/Features/Content/Services/GitHub/GitHubReleasesDiscoverer.cs
  • GenHub/GenHub/Features/Content/Services/ContentDiscoverers/GitHubTopicsDiscoverer.cs
  • GenHub/GenHub/Features/Content/Services/ContentDiscoverers/FileSystemDiscoverer.cs
  • GenHub/GenHub/Features/Content/Services/ContentResolvers/CNCLabsMapResolver.cs
  • GenHub/GenHub/Features/Content/Services/GeneralsOnline/GeneralsOnlineDiscoverer.cs
  • GenHub/GenHub/App.axaml.cs
  • Various test files and model classes

Recommendation

Please review and address the existing 146 inline comments on this PR before merging. These cover the known issues, and no additional critical problems were identified during this review.

}

// 2. Export Catalog (Now includes new URLs)
UploadStatusMessage = "Generatng catalog...";
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo: Generatng should be Generating

Suggested change
UploadStatusMessage = "Generatng catalog...";
UploadStatusMessage = "Generating catalog...";
Prompt To Fix With AI
This is a comment left during a code review.
Path: GenHub/GenHub/Features/Tools/ViewModels/PublishShareViewModel.cs
Line: 468

Comment:
typo: `Generatng` should be `Generating`

```suggestion
            UploadStatusMessage = "Generating catalog...";
```

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +351 to +353
PublisherProfileViewModel = new GenHub.Features.Tools.ViewModels.PublisherProfileViewModel(CurrentProject, this, _hostingProviderFactory!, _logger);
PublisherProfileViewModel.RefreshConnectionStatus();
ContentLibraryViewModel = new GenHub.Features.Tools.ViewModels.ContentLibraryViewModel(CurrentProject, SelectedCatalog!, this, _logger, _dialogService);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

null-forgiving operators used on potentially null values - _hostingProviderFactory! (line 351) and SelectedCatalog! (line 353) can be null but are being force-unwrapped. Check these values before use or handle potential nulls.

Prompt To Fix With AI
This is a comment left during a code review.
Path: GenHub/GenHub/Features/Tools/ViewModels/PublisherStudioViewModel.cs
Line: 351-353

Comment:
null-forgiving operators used on potentially null values - `_hostingProviderFactory!` (line 351) and `SelectedCatalog!` (line 353) can be null but are being force-unwrapped. Check these values before use or handle potential nulls.

How can I resolve this? If you propose a fix, please make it concise.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant