Meta sync: pull the club's metas and navs into the shared profiles

The original kept VTank's profile folder in step with the club's metas
repository; the port does the same against host.VtankProfiles, dropping
.met files under mosstank/metas and .nav files under mosstank/navs where
MossTank reads dropped profiles, flattened to their bare names as the
original flattened them. The Gitea tree and raw endpoints are the
original's; the repository address is the metas_repository_url setting,
defaulting to the original repository. An overwritten file keeps its old
copy as .bak (MossTank's pickers skip .bak side files).

Storage is text-only, so the SHA-256 compare hashes the text a stored read
gives back (UTF-8, BOM dropped); for the plain-text files in the repo that
equals the original's byte compare. Network work runs on the thread pool,
one operation after another; chat lines and window updates are applied on
the tick. The four /mm verbs keep their chat lines, and the Metas tab is
its own markup window with IsVisible for the main window to open.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-09-25 12:26:14 +02:00
parent 714fbfa2e8
commit 162d242c06
8 changed files with 1380 additions and 1 deletions

View file

@ -1,5 +1,6 @@
using OpenAC.MosswartMassacre.Backend;
using OpenAC.MosswartMassacre.FlagTracker;
using OpenAC.MosswartMassacre.Metas;
using OpenAC.MosswartMassacre.Quests;
namespace OpenAC.MosswartMassacre;
@ -18,5 +19,6 @@ internal static class FeatureCatalog
var quests = new QuestManager(context);
features.Add(quests);
features.Add(new FlagTrackerFeature(context, quests));
features.Add(new MetaSyncFeature(context));
}
}