From 2085c2dcc94c984ab889d511d386dd1f12004101 Mon Sep 17 00:00:00 2001 From: iisaev Date: Thu, 29 Oct 2026 13:22:26 +0100 Subject: [PATCH] Split catalog_export out of editor_tools Code, locale and test suites moved from editor_tools; docs in seven languages with screenshots where the window has something to show; own cover. --- .gitattributes | 30 ++ .gitignore | 38 ++ docs/assets/catalog-export.jpg | Bin 0 -> 103431 bytes docs/en.md | 23 ++ docs/es.md | 23 ++ docs/ja.md | 23 ++ docs/ko.md | 23 ++ docs/ru.md | 23 ++ docs/vi.md | 23 ++ docs/zh.md | 23 ++ locale/catalog_export_en.properties | 5 + locale/catalog_export_es.properties | 5 + locale/catalog_export_ja.properties | 5 + locale/catalog_export_ko.properties | 5 + locale/catalog_export_ru.properties | 5 + locale/catalog_export_vi.properties | 5 + locale/catalog_export_zh.properties | 5 + locale/en.properties | 2 + locale/es.properties | 2 + locale/ja.properties | 2 + locale/ko.properties | 2 + locale/ru.properties | 2 + locale/ui_en.properties | 14 + locale/ui_es.properties | 14 + locale/ui_ja.properties | 14 + locale/ui_ko.properties | 14 + locale/ui_ru.properties | 14 + locale/ui_vi.properties | 14 + locale/ui_zh.properties | 14 + locale/vi.properties | 2 + locale/zh.properties | 2 + manifest.json | 15 + mod.jpg | Bin 0 -> 79778 bytes .../CatalogExportToolBoxButton.cs | 18 + .../CatalogExportToolProvider.cs | 23 ++ src/CatalogExport/CatalogExportWindow.cs | 367 ++++++++++++++++++ 36 files changed, 799 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 docs/assets/catalog-export.jpg create mode 100644 docs/en.md create mode 100644 docs/es.md create mode 100644 docs/ja.md create mode 100644 docs/ko.md create mode 100644 docs/ru.md create mode 100644 docs/vi.md create mode 100644 docs/zh.md create mode 100644 locale/catalog_export_en.properties create mode 100644 locale/catalog_export_es.properties create mode 100644 locale/catalog_export_ja.properties create mode 100644 locale/catalog_export_ko.properties create mode 100644 locale/catalog_export_ru.properties create mode 100644 locale/catalog_export_vi.properties create mode 100644 locale/catalog_export_zh.properties create mode 100644 locale/en.properties create mode 100644 locale/es.properties create mode 100644 locale/ja.properties create mode 100644 locale/ko.properties create mode 100644 locale/ru.properties create mode 100644 locale/ui_en.properties create mode 100644 locale/ui_es.properties create mode 100644 locale/ui_ja.properties create mode 100644 locale/ui_ko.properties create mode 100644 locale/ui_ru.properties create mode 100644 locale/ui_vi.properties create mode 100644 locale/ui_zh.properties create mode 100644 locale/vi.properties create mode 100644 locale/zh.properties create mode 100644 manifest.json create mode 100644 mod.jpg create mode 100644 src/CatalogExport/CatalogExportToolBoxButton.cs create mode 100644 src/CatalogExport/CatalogExportToolProvider.cs create mode 100644 src/CatalogExport/CatalogExportWindow.cs diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..3030c1a --- /dev/null +++ b/.gitattributes @@ -0,0 +1,30 @@ +# Line endings: LF everywhere, on every OS, whatever core.autocrlf says. +* text=auto eol=lf + +# cmd.exe misreads labels and goto in LF batch files, so they stay CRLF. +*.bat text eol=crlf +*.cmd text eol=crlf + +# Binaries: never converted, never diffed as text. +*.png binary +*.jpg binary +*.jpeg binary +*.webp binary +*.svg text +*.ogg binary +*.wav binary +*.mp3 binary +*.ttf binary +*.otf binary +*.woff binary +*.woff2 binary +*.dll binary +*.so binary +*.dylib binary +*.pdb binary +*.exe binary +*.zip binary +*.pck binary +*.moc3 binary +*.res binary +*.scn binary diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f79a943 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +# Godot 4.x +.godot/ +.idea/ +sdk/ +bin/ +obj/ + +#ai +.omo/ +.opencode/ + +gen/ +obj/ +bin/ +art_sources/ + +*.tres~ +*.tscn~ + +# GDScript LSP +.godot/ + +# Export +*.exe +*.dmg +*.apk +*.aab +*.pck +*.zip +*.log + +# OS +.DS_Store +Thumbs.db + +# Editor +*.import +*.godot.uid diff --git a/docs/assets/catalog-export.jpg b/docs/assets/catalog-export.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e7c104362fe5b8b80fd0b7da09f06b9ef8d15a07 GIT binary patch literal 103431 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

&OTr&;-f!j^dYsmw4(44ml~$$;10?S>{R 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 J(?K74{{!gge{cW* literal 0 HcmV?d00001 diff --git a/docs/en.md b/docs/en.md new file mode 100644 index 0000000..df31a79 --- /dev/null +++ b/docs/en.md @@ -0,0 +1,23 @@ +# Catalog Export — publish a mod in a mod catalog + +A mod catalog is a JSON list the mod manager downloads mods from. Catalog Export writes a mod's entry for such a catalog — names and descriptions per language, category, tags, version limits, changelog, download link — and packs the mod into the archive the entry points to, with SHA-256 checksums of the archive and of the installed files. + +## Opening it + +Hammer button on the in-game toolbar → **Export Catalog Entry**. + +## Exporting a mod + +![Export Catalog Entry for the ui_base mod: the form with the mod's id, name, version and author, Download URL, Status, Min Game Version, Icon URL, Tags and the category buttons on the left; the resulting JSON on the right; Copy JSON and Export to File at the top.](assets/catalog-export.jpg) + +1. **Select a mod**. The form is filled from its manifest. +2. Fill **Download URL** (where the archive will be uploaded; required), **Icon URL**, **Category**, **Tags (comma-separated)**, **Min Game Version**, **Status** and **Changelog**. **Add language** adds a name and a description in another language. +3. The preview shows the resulting JSON. **Copy JSON** puts it on the clipboard. +4. **Export to File**: for a folder mod, a `.zip` archive and its `.json` entry are written into the mods folder; for a mod that is already a `.zip`, only the `.json` is written next to it. The status line shows the written path. + +Upload the archive to the download URL and add the entry to your catalog; the mod manager then offers the mod for installation. + +## Dependencies + +`tools_base`, `ui_base`. It uses the game's catalog and archive code and does not need the mod manager window. +The older `editor_tools` package installs this mod together with the other authoring windows. diff --git a/docs/es.md b/docs/es.md new file mode 100644 index 0000000..a43e066 --- /dev/null +++ b/docs/es.md @@ -0,0 +1,23 @@ +# Exportar catálogo — publica un mod en un catálogo de mods + +Un catálogo de mods es una lista JSON desde la que el gestor de mods descarga mods. Exportar catálogo escribe la entrada de un mod para ese catálogo (nombres y descripciones por idioma, categoría, etiquetas, versiones, cambios, enlace de descarga) y empaqueta el mod en el archivo al que apunta la entrada, con sumas SHA-256 del archivo y de los archivos instalados. + +## Cómo abrirlo + +Botón del martillo en la barra del juego → **Exportar entrada del catálogo**. + +## Exportar un mod + +![Exportar entrada del catálogo para el mod ui_base: a la izquierda el formulario con id, nombre, versión y autor del mod, URL de descarga, Estado, Versión mínima del juego, URL del icono, Etiquetas y los botones de categoría; a la derecha el JSON resultante; arriba Copiar JSON y Exportar a archivo.](assets/catalog-export.jpg) + +1. **Selecciona un mod**. El formulario se rellena desde su manifiesto. +2. Rellena **URL de descarga** (donde se subirá el archivo; obligatoria), **URL del icono**, **Categoría**, **Etiquetas (separadas por comas)**, **Versión mínima del juego**, **Estado** y **Cambios**. **Añadir idioma** añade un nombre y una descripción en otro idioma. +3. **JSON resultante** muestra el resultado. **Copiar JSON** lo copia al portapapeles. +4. **Exportar a archivo**: para un mod de carpeta se escriben en la carpeta de mods un archivo `.zip` y su entrada `.json`; para un mod que ya es `.zip`, solo se escribe el `.json` a su lado. La línea de estado muestra la ruta escrita. + +Sube el archivo al enlace de descarga y añade la entrada a tu catálogo; el gestor de mods ofrecerá el mod para instalar. + +## Dependencias + +`tools_base`, `ui_base`. Usa el código de catálogos y archivos del propio juego; no necesita la ventana del gestor de mods. +El paquete antiguo `editor_tools` instala este mod junto con las demás ventanas de autor. diff --git a/docs/ja.md b/docs/ja.md new file mode 100644 index 0000000..c491fe7 --- /dev/null +++ b/docs/ja.md @@ -0,0 +1,23 @@ +# カタログのエクスポート — MOD を MOD カタログで公開する + +MOD カタログは、MOD マネージャーが MOD をダウンロードする元になる JSON の一覧です。カタログのエクスポートは、そうしたカタログ向けに MOD の項目(言語ごとの名前と説明、カテゴリー、タグ、バージョン、変更履歴、ダウンロードリンク)を書き出し、項目が指すアーカイブに MOD をまとめ、アーカイブとインストールされるファイルの SHA-256 チェックサムを付けます。 + +## 開き方 + +ゲームのツールバーのハンマーボタン → **カタログ項目を書き出す**。 + +## MOD の書き出し + +![ui_base MOD のカタログ項目書き出しウィンドウ: 左に MOD の id、名前、バージョン、作者、ダウンロード URL、状態、最低ゲームバージョン、アイコンの URL、タグ、カテゴリーのボタンが並ぶフォーム、右にできあがる JSON、上に JSON をコピーとファイルに書き出す。](assets/catalog-export.jpg) + +1. **MOD を選択**します。フォームはそのマニフェストから埋まります。 +2. **ダウンロード URL**(アーカイブを置く場所、必須)、**アイコンの URL**、**カテゴリー**、**タグ(カンマ区切り)**、**最低ゲームバージョン**、**状態**、**変更履歴**を入力します。**言語を追加**で別の言語の名前と説明を加えます。 +3. **できあがる JSON** に結果が表示されます。**JSON をコピー**でクリップボードに入ります。 +4. **ファイルに書き出す**: フォルダー MOD なら MOD フォルダーに `.zip` アーカイブとその `.json` 項目が書かれます。すでに `.zip` の MOD なら、その横に `.json` だけが書かれます。ステータス行に書き出したパスが出ます。 + +アーカイブをダウンロードリンクの場所にアップロードし、項目をカタログに加えると、MOD マネージャーがその MOD をインストール候補として表示します。 + +## 依存関係 + +`tools_base`、`ui_base`。ゲーム自身のカタログ・アーカイブのコードを使い、MOD マネージャーのウィンドウは不要です。 +古い `editor_tools` パッケージは、この MOD をほかの作成用ウィンドウと一緒にインストールします。 diff --git a/docs/ko.md b/docs/ko.md new file mode 100644 index 0000000..8d4dbf9 --- /dev/null +++ b/docs/ko.md @@ -0,0 +1,23 @@ +# 카탈로그 내보내기 — 모드를 모드 카탈로그에 공개하기 + +모드 카탈로그는 모드 관리자가 모드를 내려받는 JSON 목록입니다. 카탈로그 내보내기는 그런 카탈로그용 모드 항목(언어별 이름과 설명, 분류, 태그, 버전, 변경 기록, 다운로드 링크)을 쓰고, 항목이 가리키는 아카이브로 모드를 묶으며 아카이브와 설치 파일의 SHA-256 체크섬을 붙입니다. + +## 여는 방법 + +게임 툴바의 망치 버튼 → **카탈로그 항목 내보내기**. + +## 모드 내보내기 + +![ui_base 모드의 카탈로그 항목 내보내기: 왼쪽에 모드의 id, 이름, 버전, 제작자, 다운로드 URL, 상태, 최소 게임 버전, 아이콘 URL, 태그와 분류 버튼이 있는 양식, 오른쪽에 결과 JSON, 위쪽에 JSON 복사와 파일로 내보내기.](assets/catalog-export.jpg) + +1. **모드 선택**. 양식이 모드의 매니페스트로 채워집니다. +2. **다운로드 URL**(아카이브를 올릴 곳, 필수), **아이콘 URL**, **분류**, **태그 (쉼표로 구분)**, **최소 게임 버전**, **상태**, **변경 기록**을 채웁니다. **언어 추가**로 다른 언어의 이름과 설명을 더합니다. +3. **결과 JSON**에 결과가 보입니다. **JSON 복사**는 클립보드에 넣습니다. +4. **파일로 내보내기**: 폴더 모드라면 모드 폴더에 `.zip` 아카이브와 그 `.json` 항목이 쓰이고, 이미 `.zip`인 모드라면 옆에 `.json`만 쓰입니다. 상태 줄에 기록된 경로가 표시됩니다. + +아카이브를 다운로드 링크 위치에 올리고 항목을 카탈로그에 추가하면 모드 관리자가 그 모드를 설치 대상으로 보여 줍니다. + +## 의존성 + +`tools_base`, `ui_base`. 게임 자체의 카탈로그·아카이브 코드를 쓰며 모드 관리자 창은 필요 없습니다. +예전 `editor_tools` 패키지는 이 모드를 다른 제작 창과 함께 설치합니다. diff --git a/docs/ru.md b/docs/ru.md new file mode 100644 index 0000000..e356896 --- /dev/null +++ b/docs/ru.md @@ -0,0 +1,23 @@ +# Экспорт каталога — опубликовать мод в каталоге модов + +Каталог модов — это JSON-список, из которого менеджер модов скачивает моды. Экспорт каталога пишет запись мода для такого каталога (названия и описания на разных языках, категория, теги, версии, список изменений, ссылка на скачивание) и упаковывает мод в архив, на который указывает запись, с контрольными суммами SHA-256 архива и установленных файлов. + +## Как открыть + +Кнопка с молотком на игровом тулбаре → **Экспорт записи каталога**. + +## Экспорт мода + +![Экспорт записи каталога для мода ui_base: слева форма с id, названием, версией и автором мода, URL скачивания, Статус, Мин. версия игры, URL иконки, Теги и кнопки категорий; справа итоговый JSON; сверху Копировать JSON и Экспорт в файл.](assets/catalog-export.jpg) + +1. **Выберите мод**. Форма заполнится из его манифеста. +2. Заполните **URL скачивания** (куда будет загружен архив; обязательно), **URL иконки**, **Категорию**, **Теги (через запятую)**, **Мин. версию игры**, **Статус** и **Список изменений**. **Добавить язык** добавляет название и описание на другом языке. +3. **Итоговый JSON** показывает результат. **Копировать JSON** кладёт его в буфер обмена. +4. **Экспорт в файл**: для мода-папки в папку модов записываются архив `.zip` и его запись `.json`; для мода, который уже является `.zip`, рядом с ним пишется только `.json`. Строка статуса показывает путь записанного файла. + +Загрузите архив по ссылке скачивания и добавьте запись в свой каталог — менеджер модов предложит мод к установке. + +## Зависимости + +`tools_base`, `ui_base`. Используется код каталогов и архивов самой игры; окно менеджера модов не нужно. +Старый пакет `editor_tools` ставит этот мод вместе с остальными авторскими окнами. diff --git a/docs/vi.md b/docs/vi.md new file mode 100644 index 0000000..98307a0 --- /dev/null +++ b/docs/vi.md @@ -0,0 +1,23 @@ +# Xuất danh mục — đăng mod lên một danh mục mod + +Danh mục mod là một danh sách JSON mà trình quản lý mod tải mod từ đó. Xuất danh mục ghi mục của một mod cho danh mục như vậy (tên và mô tả theo ngôn ngữ, thể loại, thẻ, phiên bản, nhật ký thay đổi, liên kết tải) và đóng gói mod thành tệp nén mà mục trỏ tới, kèm tổng kiểm SHA-256 của tệp nén và của các tệp được cài. + +## Cách mở + +Nút búa trên thanh công cụ trong trò chơi → **Xuất mục danh mục**. + +## Xuất một mod + +![Xuất mục danh mục cho mod ui_base: bên trái biểu mẫu với id, tên, phiên bản và tác giả của mod, URL tải xuống, Trạng thái, Phiên bản game tối thiểu, URL biểu tượng, Thẻ và các nút thể loại; bên phải JSON kết quả; phía trên Sao chép JSON và Xuất ra tệp.](assets/catalog-export.jpg) + +1. **Chọn một mod**. Biểu mẫu được điền từ manifest của nó. +2. Điền **URL tải xuống** (nơi sẽ tải tệp nén lên; bắt buộc), **URL biểu tượng**, **Thể loại**, **Thẻ (cách nhau bằng dấu phẩy)**, **Phiên bản game tối thiểu**, **Trạng thái** và **Nhật ký thay đổi**. **Thêm ngôn ngữ** thêm tên và mô tả ở ngôn ngữ khác. +3. **JSON kết quả** hiện kết quả. **Sao chép JSON** đưa nó vào bộ nhớ tạm. +4. **Xuất ra tệp**: với mod dạng thư mục, tệp nén `.zip` và mục `.json` của nó được ghi vào thư mục mod; với mod vốn đã là `.zip`, chỉ ghi `.json` bên cạnh. Dòng trạng thái hiện đường dẫn đã ghi. + +Tải tệp nén lên liên kết tải và thêm mục vào danh mục của bạn; trình quản lý mod sẽ đề xuất cài mod đó. + +## Phụ thuộc + +`tools_base`, `ui_base`. Nó dùng mã danh mục và tệp nén của chính trò chơi, không cần cửa sổ trình quản lý mod. +Gói cũ `editor_tools` cài mod này cùng các cửa sổ tác giả khác. diff --git a/docs/zh.md b/docs/zh.md new file mode 100644 index 0000000..19f58a4 --- /dev/null +++ b/docs/zh.md @@ -0,0 +1,23 @@ +# 目录导出 —— 把模组发布到模组目录 + +模组目录是一个 JSON 列表,模组管理器从中下载模组。目录导出为这样的目录写出模组条目(各语言的名称和描述、分类、标签、版本、更新日志、下载链接),并把模组打包成条目所指向的压缩包,附带压缩包和安装文件的 SHA-256 校验和。 + +## 打开方式 + +游戏工具栏上的锤子按钮 → **导出目录条目**。 + +## 导出模组 + +![ui_base 模组的导出目录条目窗口:左侧是表单,包含模组的 id、名称、版本和作者、下载 URL、状态、最低游戏版本、图标 URL、标签和分类按钮;右侧是生成的 JSON;顶部有复制 JSON 和导出到文件。](assets/catalog-export.jpg) + +1. **选择模组**。表单会根据它的清单自动填写。 +2. 填写**下载 URL**(压缩包将上传的位置,必填)、**图标 URL**、**分类**、**标签(逗号分隔)**、**最低游戏版本**、**状态**和**更新日志**。**添加语言**会加上另一种语言的名称和描述。 +3. **生成的 JSON** 显示结果。**复制 JSON** 把它放进剪贴板。 +4. **导出到文件**:对于文件夹模组,会在模组文件夹中写出 `.zip` 压缩包及其 `.json` 条目;对于本身已是 `.zip` 的模组,只在它旁边写出 `.json`。状态栏显示写出的路径。 + +把压缩包上传到下载链接,并把条目加入你的目录;模组管理器就会提供该模组供安装。 + +## 依赖 + +`tools_base`、`ui_base`。它使用游戏自身的目录和压缩包代码,不需要模组管理器窗口。 +旧的 `editor_tools` 包会把这个模组和其他创作窗口一起安装。 diff --git a/locale/catalog_export_en.properties b/locale/catalog_export_en.properties new file mode 100644 index 0000000..8e9c6c3 --- /dev/null +++ b/locale/catalog_export_en.properties @@ -0,0 +1,5 @@ +# Catalog export tool — extra keys +mods/catalog_select_mod = Select a mod: +mods/catalog_add_locale = Add language +mods/catalog_locale_name = Name in this language +mods/catalog_locale_desc = Description in this language diff --git a/locale/catalog_export_es.properties b/locale/catalog_export_es.properties new file mode 100644 index 0000000..87000da --- /dev/null +++ b/locale/catalog_export_es.properties @@ -0,0 +1,5 @@ +# Catalog export tool — extra keys +mods/catalog_select_mod = Selecciona un mod: +mods/catalog_add_locale = Añadir idioma +mods/catalog_locale_name = Nombre en este idioma +mods/catalog_locale_desc = Descripción en este idioma diff --git a/locale/catalog_export_ja.properties b/locale/catalog_export_ja.properties new file mode 100644 index 0000000..29c3e2e --- /dev/null +++ b/locale/catalog_export_ja.properties @@ -0,0 +1,5 @@ +# Catalog export tool — extra keys +mods/catalog_select_mod = MOD を選択: +mods/catalog_add_locale = 言語を追加 +mods/catalog_locale_name = この言語での名前 +mods/catalog_locale_desc = この言語での説明 diff --git a/locale/catalog_export_ko.properties b/locale/catalog_export_ko.properties new file mode 100644 index 0000000..72f8ebf --- /dev/null +++ b/locale/catalog_export_ko.properties @@ -0,0 +1,5 @@ +# Catalog export tool — extra keys +mods/catalog_select_mod = 모드 선택: +mods/catalog_add_locale = 언어 추가 +mods/catalog_locale_name = 이 언어의 이름 +mods/catalog_locale_desc = 이 언어의 설명 diff --git a/locale/catalog_export_ru.properties b/locale/catalog_export_ru.properties new file mode 100644 index 0000000..9de9806 --- /dev/null +++ b/locale/catalog_export_ru.properties @@ -0,0 +1,5 @@ +# Catalog export tool — дополнительные ключи +mods/catalog_select_mod = Выберите мод: +mods/catalog_add_locale = Добавить язык +mods/catalog_locale_name = Название на этом языке +mods/catalog_locale_desc = Описание на этом языке diff --git a/locale/catalog_export_vi.properties b/locale/catalog_export_vi.properties new file mode 100644 index 0000000..cce0a86 --- /dev/null +++ b/locale/catalog_export_vi.properties @@ -0,0 +1,5 @@ +# Catalog export tool — extra keys +mods/catalog_select_mod = Chọn một mod: +mods/catalog_add_locale = Thêm ngôn ngữ +mods/catalog_locale_name = Tên bằng ngôn ngữ này +mods/catalog_locale_desc = Mô tả bằng ngôn ngữ này diff --git a/locale/catalog_export_zh.properties b/locale/catalog_export_zh.properties new file mode 100644 index 0000000..c1b19c2 --- /dev/null +++ b/locale/catalog_export_zh.properties @@ -0,0 +1,5 @@ +# Catalog export tool — extra keys +mods/catalog_select_mod = 选择模组: +mods/catalog_add_locale = 添加语言 +mods/catalog_locale_name = 此语言的名称 +mods/catalog_locale_desc = 此语言的描述 diff --git a/locale/en.properties b/locale/en.properties new file mode 100644 index 0000000..2815f6a --- /dev/null +++ b/locale/en.properties @@ -0,0 +1,2 @@ +mod_catalog_export_name = Export Catalog Entry +mod_catalog_export_desc = Export Catalog Entry diff --git a/locale/es.properties b/locale/es.properties new file mode 100644 index 0000000..3540df8 --- /dev/null +++ b/locale/es.properties @@ -0,0 +1,2 @@ +mod_catalog_export_name = Exportar entrada del catálogo +mod_catalog_export_desc = Exportar entrada del catálogo diff --git a/locale/ja.properties b/locale/ja.properties new file mode 100644 index 0000000..61a6d14 --- /dev/null +++ b/locale/ja.properties @@ -0,0 +1,2 @@ +mod_catalog_export_name = カタログ項目を書き出す +mod_catalog_export_desc = カタログ項目を書き出す diff --git a/locale/ko.properties b/locale/ko.properties new file mode 100644 index 0000000..944b1aa --- /dev/null +++ b/locale/ko.properties @@ -0,0 +1,2 @@ +mod_catalog_export_name = 카탈로그 항목 내보내기 +mod_catalog_export_desc = 카탈로그 항목 내보내기 diff --git a/locale/ru.properties b/locale/ru.properties new file mode 100644 index 0000000..e54b134 --- /dev/null +++ b/locale/ru.properties @@ -0,0 +1,2 @@ +mod_catalog_export_name = Экспорт записи каталога +mod_catalog_export_desc = Экспорт записи каталога diff --git a/locale/ui_en.properties b/locale/ui_en.properties new file mode 100644 index 0000000..1417971 --- /dev/null +++ b/locale/ui_en.properties @@ -0,0 +1,14 @@ +tools/catalog_export/hint = The archive and hashes are computed on export; the JSON is written next to the mod archive +tools/catalog_export/mod_info = Mod +tools/catalog_export/id = ID +tools/catalog_export/name = Name +tools/catalog_export/metadata = Catalog +tools/catalog_export/locales = Localizations +tools/catalog_export/locales_hint = With no rows the English name and description of the manifest are used. +tools/catalog_export/remove_locale = Remove language +tools/catalog_export/preview = Resulting JSON +tools/catalog_export/copied = JSON copied to the clipboard. +tools/catalog_export/export_tip = Build the archive, compute hashes and write the catalog entry JSON +tools/catalog_export/exported = Exported: {0} +tools/catalog_export/export_error = Export error +tools/catalog_export/url_required = Set the download URL — a catalog entry is useless without it. diff --git a/locale/ui_es.properties b/locale/ui_es.properties new file mode 100644 index 0000000..c95c4ba --- /dev/null +++ b/locale/ui_es.properties @@ -0,0 +1,14 @@ +tools/catalog_export/hint = El archivo y los hashes se calculan al exportar; el JSON se escribe junto al archivo del mod +tools/catalog_export/mod_info = Mod +tools/catalog_export/id = ID +tools/catalog_export/name = Nombre +tools/catalog_export/metadata = Catálogo +tools/catalog_export/locales = Localizaciones +tools/catalog_export/locales_hint = Sin filas se usan el nombre y la descripción en inglés del manifiesto. +tools/catalog_export/remove_locale = Quitar idioma +tools/catalog_export/preview = JSON resultante +tools/catalog_export/copied = JSON copiado al portapapeles. +tools/catalog_export/export_tip = Crear el archivo, calcular los hashes y escribir el JSON de la entrada del catálogo +tools/catalog_export/exported = Exportado: {0} +tools/catalog_export/export_error = Error al exportar +tools/catalog_export/url_required = Indica la URL de descarga: sin ella la entrada del catálogo no sirve. diff --git a/locale/ui_ja.properties b/locale/ui_ja.properties new file mode 100644 index 0000000..aef2ba7 --- /dev/null +++ b/locale/ui_ja.properties @@ -0,0 +1,14 @@ +tools/catalog_export/hint = アーカイブとハッシュは書き出し時に計算され、JSON は MOD のアーカイブの隣に書かれます +tools/catalog_export/mod_info = MOD +tools/catalog_export/id = ID +tools/catalog_export/name = 名前 +tools/catalog_export/metadata = カタログ +tools/catalog_export/locales = ローカライズ +tools/catalog_export/locales_hint = 行がない場合は、マニフェストの英語の名前と説明が使われます。 +tools/catalog_export/remove_locale = 言語を削除 +tools/catalog_export/preview = できあがる JSON +tools/catalog_export/copied = JSON をクリップボードにコピーしました。 +tools/catalog_export/export_tip = アーカイブを作り、ハッシュを計算し、カタログ項目の JSON を書き出す +tools/catalog_export/exported = 書き出しました:{0} +tools/catalog_export/export_error = 書き出しエラー +tools/catalog_export/url_required = ダウンロード URL を設定してください——それがないカタログ項目は役に立ちません。 diff --git a/locale/ui_ko.properties b/locale/ui_ko.properties new file mode 100644 index 0000000..27f0672 --- /dev/null +++ b/locale/ui_ko.properties @@ -0,0 +1,14 @@ +tools/catalog_export/hint = 압축 파일과 해시는 내보낼 때 계산되며, JSON은 모드 압축 파일 옆에 쓰입니다 +tools/catalog_export/mod_info = 모드 +tools/catalog_export/id = ID +tools/catalog_export/name = 이름 +tools/catalog_export/metadata = 카탈로그 +tools/catalog_export/locales = 로컬라이즈 +tools/catalog_export/locales_hint = 줄이 없으면 매니페스트의 영어 이름과 설명이 쓰입니다. +tools/catalog_export/remove_locale = 언어 제거 +tools/catalog_export/preview = 결과 JSON +tools/catalog_export/copied = JSON을 클립보드에 복사했습니다. +tools/catalog_export/export_tip = 압축 파일을 만들고 해시를 계산해 카탈로그 항목 JSON을 씁니다 +tools/catalog_export/exported = 내보냄: {0} +tools/catalog_export/export_error = 내보내기 오류 +tools/catalog_export/url_required = 다운로드 URL을 설정하세요 — 그것 없는 카탈로그 항목은 쓸모가 없습니다. diff --git a/locale/ui_ru.properties b/locale/ui_ru.properties new file mode 100644 index 0000000..1abe1b2 --- /dev/null +++ b/locale/ui_ru.properties @@ -0,0 +1,14 @@ +tools/catalog_export/hint = Архив и хэши считаются при экспорте; JSON кладётся рядом с архивом мода +tools/catalog_export/mod_info = Мод +tools/catalog_export/id = ID +tools/catalog_export/name = Название +tools/catalog_export/metadata = Каталог +tools/catalog_export/locales = Локализации +tools/catalog_export/locales_hint = Без строк будет использовано английское название и описание из манифеста. +tools/catalog_export/remove_locale = Убрать язык +tools/catalog_export/preview = Итоговый JSON +tools/catalog_export/copied = JSON скопирован в буфер обмена. +tools/catalog_export/export_tip = Собрать архив, посчитать хэши и записать JSON записи каталога +tools/catalog_export/exported = Экспортировано: {0} +tools/catalog_export/export_error = Ошибка экспорта +tools/catalog_export/url_required = Укажите URL скачивания — без него запись каталога бесполезна. diff --git a/locale/ui_vi.properties b/locale/ui_vi.properties new file mode 100644 index 0000000..121dd7a --- /dev/null +++ b/locale/ui_vi.properties @@ -0,0 +1,14 @@ +tools/catalog_export/hint = Tệp nén và mã băm được tính khi xuất; JSON được ghi cạnh tệp nén của mod +tools/catalog_export/mod_info = Mod +tools/catalog_export/id = ID +tools/catalog_export/name = Tên +tools/catalog_export/metadata = Danh mục +tools/catalog_export/locales = Bản địa hóa +tools/catalog_export/locales_hint = Nếu không có dòng nào thì dùng tên và mô tả tiếng Anh trong manifest. +tools/catalog_export/remove_locale = Bỏ ngôn ngữ +tools/catalog_export/preview = JSON kết quả +tools/catalog_export/copied = Đã sao chép JSON vào bộ nhớ tạm. +tools/catalog_export/export_tip = Tạo tệp nén, tính mã băm và ghi JSON của mục danh mục +tools/catalog_export/exported = Đã xuất: {0} +tools/catalog_export/export_error = Lỗi xuất +tools/catalog_export/url_required = Hãy đặt URL tải xuống — thiếu nó thì mục danh mục vô dụng. diff --git a/locale/ui_zh.properties b/locale/ui_zh.properties new file mode 100644 index 0000000..5a86113 --- /dev/null +++ b/locale/ui_zh.properties @@ -0,0 +1,14 @@ +tools/catalog_export/hint = 归档和哈希在导出时计算;JSON 写在模组归档旁边 +tools/catalog_export/mod_info = 模组 +tools/catalog_export/id = ID +tools/catalog_export/name = 名称 +tools/catalog_export/metadata = 目录 +tools/catalog_export/locales = 本地化 +tools/catalog_export/locales_hint = 没有任何行时,使用清单中的英文名称和描述。 +tools/catalog_export/remove_locale = 移除语言 +tools/catalog_export/preview = 生成的 JSON +tools/catalog_export/copied = JSON 已复制到剪贴板。 +tools/catalog_export/export_tip = 打包归档、计算哈希并写入目录条目的 JSON +tools/catalog_export/exported = 已导出:{0} +tools/catalog_export/export_error = 导出错误 +tools/catalog_export/url_required = 请设置下载 URL——没有它的目录条目毫无用处。 diff --git a/locale/vi.properties b/locale/vi.properties new file mode 100644 index 0000000..9d5ac4d --- /dev/null +++ b/locale/vi.properties @@ -0,0 +1,2 @@ +mod_catalog_export_name = Xuất mục danh mục +mod_catalog_export_desc = Xuất mục danh mục diff --git a/locale/zh.properties b/locale/zh.properties new file mode 100644 index 0000000..bfc163d --- /dev/null +++ b/locale/zh.properties @@ -0,0 +1,2 @@ +mod_catalog_export_name = 导出目录条目 +mod_catalog_export_desc = 导出目录条目 diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..625bd39 --- /dev/null +++ b/manifest.json @@ -0,0 +1,15 @@ +{ + "id": "catalog_export", + "name": "Catalog Export", + "version": "1.0.0", + "author": "ct", + "description": "Export mod catalog metadata and installable archives.", + "category": "tools, editor", + "sources": [ + "src/**/*.cs" + ], + "depends": [ + "tools_base>=1", + "ui_base>=1" + ] +} diff --git a/mod.jpg b/mod.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f66f164968f0b1c0c29f0e73a9efc3d0f504a881 GIT binary patch literal 79778 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 literal 0 HcmV?d00001 diff --git a/src/CatalogExport/CatalogExportToolBoxButton.cs b/src/CatalogExport/CatalogExportToolBoxButton.cs new file mode 100644 index 0000000..da843da --- /dev/null +++ b/src/CatalogExport/CatalogExportToolBoxButton.cs @@ -0,0 +1,18 @@ +namespace Cthangover.Core.UI.Tool.CatalogExport +{ + ///

Exposes catalog export in the in-game toolbar's tools list. + public class CatalogExportToolBoxButton : IToolBoxButton + { + /// + public string ToolId => "catalog_export"; + + /// + public string IconPath => ""; + + /// + public string LocaleKey => "mods/catalog_title"; + + /// + public bool IsVisible() => true; + } +} diff --git a/src/CatalogExport/CatalogExportToolProvider.cs b/src/CatalogExport/CatalogExportToolProvider.cs new file mode 100644 index 0000000..042575e --- /dev/null +++ b/src/CatalogExport/CatalogExportToolProvider.cs @@ -0,0 +1,23 @@ +using Cthangover.Core.UI.Tool; +using Godot; + +namespace Cthangover.Core.UI.Tool.CatalogExport +{ + /// + /// Registers the catalog export window as a developer tool. Moved here from + /// the old mods menu when mod management UI was delegated to the + /// mod_manager mod — exporting a catalog entry is an authoring task, + /// not part of day-to-day mod management. + /// + public class CatalogExportToolProvider : IToolProvider + { + /// Unique tool identifier. + public string Id => "catalog_export"; + + /// Translation key for the tool's display name. + public string LocaleKey => "mods/catalog_title"; + + /// Creates the export window instance. + public Window CreateWindow() => new CatalogExportWindow(); + } +} diff --git a/src/CatalogExport/CatalogExportWindow.cs b/src/CatalogExport/CatalogExportWindow.cs new file mode 100644 index 0000000..cb0b21a --- /dev/null +++ b/src/CatalogExport/CatalogExportWindow.cs @@ -0,0 +1,367 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using Cthangover.Core.Mods; +using Cthangover.Core.UI.Theming; +using Cthangover.Core.Utils; +using Cthangover.Mods.Interface.Theming; +using Cthangover.Mods.Interface.Tool; +using Cthangover.Tools.Common; +using Godot; + +namespace Cthangover.Core.UI.Tool.CatalogExport +{ + /// + /// Developer tool that builds a catalog entry (JSON for the online mod + /// catalog) from a locally installed mod's manifest. Ported out of the old + /// mods menu so that mod-management UI can live in the mod_manager + /// mod while this authoring utility stays a tool. + /// + /// Left: the form — read-only manifest data, catalog-only metadata + /// (download URL, categories, tags, changelog, status, minimum game + /// version, icon URL) and localized names. Right: the live JSON preview. + /// Actions: copy the JSON or export it next to the mod's zip via + /// (archive and hashes are computed there). + /// + public partial class CatalogExportWindow : ToolWindow + { + private static readonly string[] Statuses = { "stable", "beta", "deprecated", "archived" }; + private static readonly CategoryType[] Categories = Enum.GetValues(); + + private OptionButton _modSelect; + private VBoxContainer _formHost; + private CodeEdit _previewEdit; + + private ModInfo _modInfo; + private ModManifest _manifest; + private LineEdit _urlEdit; + private readonly List _categoryChecks = new(); + private LineEdit _tagsEdit; + private TextEdit _changelogEdit; + private OptionButton _statusOpt; + private LineEdit _minGameVerEdit; + private LineEdit _iconUrlEdit; + private VBoxContainer _localeContainer; + + public CatalogExportWindow() : base("mods/catalog_title") + { + Size = new Vector2I(1200, 820); + CthangoverTheme.Apply(this); + + var outer = CreateFillContainer(); + AddChild(outer); + + var toolbar = CreateToolbar(); + outer.AddChild(toolbar); + _modSelect = new OptionButton { CustomMinimumSize = new Vector2(320, 0), TooltipText = ToolUi.Tr("mods/catalog_select_mod") }; + _modSelect.ItemSelected += OnModSelected; + toolbar.AddChild(_modSelect); + toolbar.AddChild(UiKit.Spacer()); + toolbar.AddChild(ToolUi.Button("mods/catalog_copy", OnCopyPressed)); + toolbar.AddChild(ToolUi.Button("mods/catalog_export_file", OnExportPressed, ButtonKind.Primary, "tools/catalog_export/export_tip")); + + var split = new HSplitContainer + { + SizeFlagsHorizontal = Control.SizeFlags.ExpandFill, + SizeFlagsVertical = Control.SizeFlags.ExpandFill + }; + outer.AddChild(split); + + _formHost = new VBoxContainer(); + var form = CreateSidebar(_formHost, 520); + form.SizeFlagsHorizontal = Control.SizeFlags.ExpandFill; + split.AddChild(form); + + var previewColumn = new VBoxContainer + { + SizeFlagsHorizontal = Control.SizeFlags.ExpandFill, + SizeFlagsVertical = Control.SizeFlags.ExpandFill + }; + previewColumn.AddChild(ToolUi.Section("tools/catalog_export/preview")); + _previewEdit = ToolUi.Code(editable: false); + previewColumn.AddChild(_previewEdit); + split.AddChild(previewColumn); + + SetHint(ToolUi.Tr("tools/catalog_export/hint")); + PopulateModList(); + } + + private void PopulateModList() + { + var ordered = ModRegistry.Instance.GetOrderedModIds(filterDisabled: false); + foreach (var id in ordered) + { + var info = ModRegistry.Instance.GetMod(id); + if (info == null) + continue; + + _modSelect.AddItem($"{info.DisplayTitle} ({id})"); + _modSelect.SetItemMetadata(_modSelect.ItemCount - 1, id); + } + + if (_modSelect.ItemCount > 0) + { + _modSelect.Selected = 0; + BuildForm(_modSelect.GetItemMetadata(0).AsString()); + } + } + + private void OnModSelected(long index) + { + BuildForm(_modSelect.GetItemMetadata((int)index).AsString()); + } + + private void BuildForm(string modId) + { + foreach (var child in _formHost.GetChildren()) + child.QueueFree(); + _categoryChecks.Clear(); + + _modInfo = ModRegistry.Instance.GetMod(modId) as ModInfo; + _manifest = _modInfo?.Manifest; + if (_modInfo == null || _manifest == null) + return; + + _formHost.AddChild(ToolUi.Section("tools/catalog_export/mod_info")); + AddReadOnly("tools/catalog_export/id", _modInfo.Id); + AddReadOnly("tools/catalog_export/name", _modInfo.DisplayTitle); + AddReadOnly("mods/version", _modInfo.Version ?? "—"); + AddReadOnly("mods/author", _modInfo.Author ?? "—"); + + _formHost.AddChild(ToolUi.Section("tools/catalog_export/metadata")); + _urlEdit = ToolUi.Field(_formHost, "mods/catalog_download_url", ToolUi.Text("https://…/" + modId + ".zip", _ => UpdatePreview())); + _statusOpt = ToolUi.Field(_formHost, "mods/catalog_status", new OptionButton()); + foreach (var status in Statuses) + _statusOpt.AddItem(status); + _statusOpt.ItemSelected += _ => UpdatePreview(); + _minGameVerEdit = ToolUi.Field(_formHost, "mods/catalog_min_game_version", ToolUi.Text("1.0.0", _ => UpdatePreview())); + _iconUrlEdit = ToolUi.Field(_formHost, "mods/catalog_icon_url", ToolUi.Text("https://…/icon.png", _ => UpdatePreview())); + _tagsEdit = ToolUi.Field(_formHost, "mods/catalog_tags", ToolUi.Text("story, ru", _ => UpdatePreview())); + + _formHost.AddChild(ToolUi.Section("mods/catalog_category")); + var grid = new GridContainer { Columns = 3 }; + grid.AddThemeConstantOverride("h_separation", UiTokens.Space5); + var preselected = _manifest.Category ?? CategoryType.Other; + foreach (var category in Categories) + { + var check = new CheckBox { Text = GetCategoryDisplayName(category), ButtonPressed = (preselected & category) != 0 }; + check.Toggled += _ => UpdatePreview(); + _categoryChecks.Add(check); + grid.AddChild(check); + } + _formHost.AddChild(grid); + + _formHost.AddChild(ToolUi.Section("mods/catalog_changelog")); + _changelogEdit = new TextEdit + { + CustomMinimumSize = new Vector2(0, 80), + WrapMode = TextEdit.LineWrappingMode.Boundary, + }; + _changelogEdit.TextChanged += UpdatePreview; + _formHost.AddChild(_changelogEdit); + + _formHost.AddChild(ToolUi.Section("tools/catalog_export/locales")); + _formHost.AddChild(ToolUi.Hint(ToolUi.Tr("tools/catalog_export/locales_hint"))); + _localeContainer = new VBoxContainer(); + _localeContainer.AddThemeConstantOverride("separation", UiTokens.Space1); + _formHost.AddChild(_localeContainer); + _formHost.AddChild(ToolUi.Button("mods/catalog_add_locale", () => AddLocaleRow(string.Empty, string.Empty, string.Empty))); + + UpdatePreview(); + SetStatus(string.Empty); + } + + private void AddReadOnly(string labelKey, string value) + { + var label = UiKit.Label(value, UiTokens.FontBody, UiTokens.Body); + label.AddThemeFontOverride("font", ToolUi.Mono()); + ToolUi.Field(_formHost, labelKey, label); + } + + private static string GetCategoryDisplayName(CategoryType cat) => cat switch + { + CategoryType.Story => ToolUi.Tr("mods/category_story"), + CategoryType.Characters => ToolUi.Tr("mods/category_characters"), + CategoryType.Gameplay => ToolUi.Tr("mods/category_gameplay"), + CategoryType.Visual => ToolUi.Tr("mods/category_visual"), + CategoryType.Audio => ToolUi.Tr("mods/category_audio"), + CategoryType.UI => ToolUi.Tr("mods/category_ui"), + CategoryType.Locale => ToolUi.Tr("mods/category_locale"), + CategoryType.Library => ToolUi.Tr("mods/category_library"), + CategoryType.Engine => ToolUi.Tr("mods/category_engine"), + CategoryType.Overhaul => ToolUi.Tr("mods/category_overhaul"), + CategoryType.Tools => ToolUi.Tr("mods/category_tools"), + CategoryType.Editor => ToolUi.Tr("mods/category_editor"), + CategoryType.Debug => ToolUi.Tr("mods/category_debug"), + CategoryType.Other => ToolUi.Tr("mods/category_other"), + _ => cat.ToString(), + }; + + private void AddLocaleRow(string lang, string name, string description) + { + var row = new HBoxContainer(); + row.AddThemeConstantOverride("separation", UiTokens.Space1); + + var langEdit = new LineEdit { CustomMinimumSize = new Vector2(52, 0), PlaceholderText = "en", MaxLength = 5, Text = lang }; + row.AddChild(langEdit); + var nameEdit = new LineEdit { SizeFlagsHorizontal = Control.SizeFlags.ExpandFill, PlaceholderText = ToolUi.Tr("mods/catalog_locale_name"), Text = name }; + row.AddChild(nameEdit); + var descEdit = new LineEdit { SizeFlagsHorizontal = Control.SizeFlags.ExpandFill, PlaceholderText = ToolUi.Tr("mods/catalog_locale_desc"), Text = description }; + row.AddChild(descEdit); + + var removeBtn = UiKit.IconButton("✕", ToolUi.Tr("tools/catalog_export/remove_locale")); + removeBtn.Pressed += () => RemoveLocaleRow(row); + row.AddChild(removeBtn); + + langEdit.TextChanged += _ => UpdatePreview(); + nameEdit.TextChanged += _ => UpdatePreview(); + descEdit.TextChanged += _ => UpdatePreview(); + + _localeContainer.AddChild(row); + UpdatePreview(); + } + + private void RemoveLocaleRow(HBoxContainer row) + { + _localeContainer.RemoveChild(row); + row.QueueFree(); + UpdatePreview(); + } + + private void UpdatePreview() + { + if (_previewEdit == null || _modInfo == null || _manifest == null || _changelogEdit == null) + return; + + var entry = BuildExportEntry(); + // Hashes are computed by the exporter from the real archive. + entry.Downloads[0].ArchiveSha256 = "computed-on-export"; + entry.Downloads[0].InstallSha256 = "computed-on-export"; + _previewEdit.Text = JsonSerializer.Serialize(entry, JsonOptionsProvider.WriteIndentedIgnoreNullOptions); + } + + private List CollectLocales() + { + var list = new List(); + foreach (var child in _localeContainer.GetChildren()) + { + if (child is not HBoxContainer row || row.IsQueuedForDeletion() || row.GetChildCount() < 3) + continue; + + var lang = ((LineEdit)row.GetChild(0)).Text.Trim(); + if (lang.Length == 0) + continue; + + list.Add(new CatalogLocaleEntry + { + Lang = lang, + Name = NullIfEmpty(((LineEdit)row.GetChild(1)).Text), + Description = NullIfEmpty(((LineEdit)row.GetChild(2)).Text), + }); + } + + if (list.Count == 0) + list.Add(new CatalogLocaleEntry { Lang = "en", Name = _manifest.Name, Description = _manifest.Description }); + + return list; + } + + private CatalogExportEntry BuildExportEntry() + { + var entry = BuildEntryFromManifest(_manifest); + entry.Downloads = new List + { + new() + { + Version = entry.Version, + Urls = new List { _urlEdit.Text.Trim() }, + SizeBytes = 0, + Changelog = NullIfEmpty(_changelogEdit.Text), + }, + }; + entry.Category = CollectSelectedCategories(); + entry.Tags = ParseTags(_tagsEdit.Text); + entry.Status = Statuses[Math.Max(0, _statusOpt.Selected)]; + entry.MinGameVersion = NullIfEmpty(_minGameVerEdit.Text); + entry.IconUrl = NullIfEmpty(_iconUrlEdit.Text); + entry.Locale = CollectLocales(); + return entry; + } + + private void OnCopyPressed() + { + DisplayServer.ClipboardSet(_previewEdit.Text); + SetStatus(ToolUi.Tr("tools/catalog_export/copied"), ToolStatusKind.Ok); + } + + private void OnExportPressed() + { + if (_modInfo == null) + return; + + if (string.IsNullOrWhiteSpace(_urlEdit.Text)) + { + SetStatus(ToolUi.Tr("tools/catalog_export/url_required"), ToolStatusKind.Error); + return; + } + + try + { + var entry = BuildExportEntry(); + var modsRoot = ModRegistry.ModsPath; + var isZip = _modInfo.FileProvider.RootPath.EndsWith(".zip", StringComparison.OrdinalIgnoreCase); + var path = isZip + ? ModCatalogExporter.ExportFromZip(_modInfo, entry, modsRoot) + : ModCatalogExporter.ExportFromFolder(_modInfo, entry, modsRoot); + SetStatus(string.Format(ToolUi.Tr("tools/catalog_export/exported"), path), ToolStatusKind.Ok); + } + catch (Exception ex) + { + GameLogger.Log("CATALOG_EXPORT", $"export of '{_modInfo.Id}' failed: {ex.Message}", LogLevel.Error); + SetStatus($"{ToolUi.Tr("tools/catalog_export/export_error")}: {ex.Message}", ToolStatusKind.Error); + } + } + + private static List ParseTags(string text) + { + if (string.IsNullOrWhiteSpace(text)) + return null; + return text.Split(',').Select(t => t.Trim()).Where(t => t.Length > 0).ToList(); + } + + private static string NullIfEmpty(string text) + { + var trimmed = text?.Trim(); + return string.IsNullOrEmpty(trimmed) ? null : trimmed; + } + + private static CatalogExportEntry BuildEntryFromManifest(ModManifest manifest) + { + var depends = manifest.Depends?.Select(d => d.ToString()).Where(s => s.Length > 0).ToList(); + + return new CatalogExportEntry + { + Id = manifest.Id, + Name = manifest.Name, + Author = manifest.Author, + Version = manifest.Version, + Description = manifest.Description, + Category = manifest.Category ?? CategoryType.Other, + Depends = depends, + ConflictsWith = manifest.ConflictsWith, + }; + } + + private CategoryType CollectSelectedCategories() + { + var selected = (CategoryType)0; + for (var i = 0; i < Categories.Length && i < _categoryChecks.Count; i++) + { + if (_categoryChecks[i].ButtonPressed) + selected |= Categories[i]; + } + return selected != 0 ? selected : CategoryType.Other; + } + } +}