mirror of
https://github.com/modrinth/code.git
synced 2026-08-30 19:46:33 +00:00
* pnpm prepr * feat(instance-sync): screenshots sync * fix: prepr + fmt * fix: qa * feat: screenshit editor * feat: screenshot* editor qa * fix: qa * fix: lint * fix: aecsocket rev * qa: a11y tab navigation focus is cut off * qa: Change “Edited” badge to be bg-highlight-green * qa: friends list input style wrong * qa: toolbar width + labels * qa: multiselect changes * qa: anim changes * qa: card hover colors * qa: copy feedback * qa: hide date * qa: instance icon in overflow/contextmenu * qa: spacing * qa: group empty state text * qa: drag preview badge * qa: group deletion skip warning if no screenshots * qa: redesign editor * qa: remove screenshot parent/edited badge stuff * qa: control font size consistency * qa: viewer copy control * qa: editor fixes * qa: redirect on disable screenshot sync * qa: margin police * fix: crop * fix: qa * feat: initial start on basic instance file syncing (#7220) * qa: final * qa: final 2 * fix: lint + prepr * fix: copy * fix: screenshot editing outside of app causing ghost files in db + sync fail rollback impl * chore: split up * fix: fmt --------- Co-authored-by: tdgao <mr.trumgao@gmail.com>
124 lines
4.2 KiB
SQL
124 lines
4.2 KiB
SQL
-- Global switches and defaults for each sync feature.
|
|
CREATE TABLE sync_feature_settings (
|
|
feature TEXT PRIMARY KEY NOT NULL,
|
|
globally_enabled INTEGER NOT NULL CHECK (globally_enabled IN (0, 1)),
|
|
new_instance_default INTEGER NOT NULL CHECK (new_instance_default IN (0, 1))
|
|
);
|
|
|
|
INSERT INTO sync_feature_settings
|
|
(feature, globally_enabled, new_instance_default)
|
|
VALUES
|
|
('command_history', 1, 1),
|
|
('multiplayer_servers', 1, 1),
|
|
('creative_hotbars', 1, 1),
|
|
('screenshots', 1, 1);
|
|
|
|
-- Each instance's switches for the sync features.
|
|
CREATE TABLE instance_sync_preferences (
|
|
instance_id TEXT NOT NULL,
|
|
feature TEXT NOT NULL,
|
|
enabled INTEGER NOT NULL CHECK (enabled IN (0, 1)),
|
|
PRIMARY KEY (instance_id, feature),
|
|
FOREIGN KEY (instance_id) REFERENCES instances (id)
|
|
ON DELETE CASCADE,
|
|
FOREIGN KEY (feature) REFERENCES sync_feature_settings (feature)
|
|
ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE INDEX instance_sync_preferences_feature_enabled ON instance_sync_preferences (
|
|
feature,
|
|
enabled
|
|
);
|
|
|
|
-- Existing instances pre-update will have screenshots on, everything else off.
|
|
INSERT INTO instance_sync_preferences (instance_id, feature, enabled)
|
|
SELECT instances.id, features.feature, features.enabled
|
|
FROM
|
|
instances
|
|
CROSS JOIN (
|
|
SELECT 'command_history' AS feature, 0 AS enabled
|
|
UNION ALL
|
|
SELECT 'multiplayer_servers', 0
|
|
UNION ALL
|
|
SELECT 'creative_hotbars', 0
|
|
UNION ALL
|
|
SELECT 'screenshots', 1
|
|
) AS features;
|
|
|
|
-- The file each instance should have, and whether writing it finished.
|
|
-- For hotbars, merge_base is the last file we generated.
|
|
CREATE TABLE instance_sync_checkpoints (
|
|
instance_id TEXT NOT NULL,
|
|
feature TEXT NOT NULL,
|
|
variant TEXT NOT NULL CHECK (variant IN ('default', 'legacy', 'components')),
|
|
expected_sha1 TEXT NOT NULL,
|
|
merge_base BLOB,
|
|
source_revision INTEGER NOT NULL CHECK (source_revision >= 0),
|
|
status TEXT NOT NULL CHECK (status IN ('pending', 'ready')),
|
|
link_mode TEXT CHECK (link_mode IS NULL OR link_mode IN ('copy', 'hard', 'symbolic')),
|
|
PRIMARY KEY (instance_id, feature, variant),
|
|
FOREIGN KEY (instance_id, feature) REFERENCES instance_sync_preferences (instance_id, feature)
|
|
ON DELETE CASCADE
|
|
);
|
|
|
|
-- The shared hotbars. No row means they have not been set up yet.
|
|
CREATE TABLE synced_hotbar_state (
|
|
singleton INTEGER PRIMARY KEY NOT NULL CHECK (singleton = 1),
|
|
schema_version INTEGER NOT NULL CHECK (schema_version >= 1),
|
|
revision INTEGER NOT NULL CHECK (revision >= 0),
|
|
nbt BLOB NOT NULL
|
|
);
|
|
|
|
-- The shared server-list revision after server sync has been set up.
|
|
-- This row still exists when the shared server list is empty.
|
|
CREATE TABLE synced_server_state (
|
|
singleton INTEGER PRIMARY KEY NOT NULL CHECK (singleton = 1),
|
|
revision INTEGER NOT NULL CHECK (revision >= 0)
|
|
);
|
|
|
|
-- The shared multiplayer server list.
|
|
CREATE TABLE synced_servers (
|
|
id TEXT PRIMARY KEY NOT NULL,
|
|
position INTEGER NOT NULL UNIQUE CHECK (position >= 0),
|
|
nbt BLOB NOT NULL
|
|
);
|
|
|
|
-- Servers that only belong to one instance.
|
|
-- excluded_synced_server_id is the shared server replaced by a local copy.
|
|
CREATE TABLE instance_servers (
|
|
instance_id TEXT NOT NULL,
|
|
id TEXT NOT NULL,
|
|
source TEXT NOT NULL CHECK (source IN ('modpack', 'local_desynced')),
|
|
excluded_synced_server_id TEXT,
|
|
nbt BLOB NOT NULL,
|
|
position INTEGER NOT NULL CHECK (position >= 0),
|
|
PRIMARY KEY (instance_id, id),
|
|
UNIQUE (instance_id, position),
|
|
FOREIGN KEY (instance_id) REFERENCES instances (id)
|
|
ON DELETE CASCADE,
|
|
FOREIGN KEY (excluded_synced_server_id) REFERENCES synced_servers (id)
|
|
ON DELETE SET NULL
|
|
);
|
|
|
|
-- The servers.dat we last wrote for each instance.
|
|
-- Used to work out what changed the next time we read it.
|
|
CREATE TABLE instance_server_projection_entries (
|
|
instance_id TEXT NOT NULL,
|
|
owner TEXT NOT NULL CHECK (owner IN ('synced', 'instance')),
|
|
server_id TEXT NOT NULL,
|
|
nbt BLOB NOT NULL,
|
|
position INTEGER NOT NULL CHECK (position >= 0),
|
|
PRIMARY KEY (instance_id, owner, server_id),
|
|
UNIQUE (instance_id, position),
|
|
FOREIGN KEY (instance_id) REFERENCES instances (id)
|
|
ON DELETE CASCADE
|
|
);
|
|
|
|
-- Tracks whether we have read the modpack's server list for this instance.
|
|
CREATE TABLE instance_server_pack_state (
|
|
instance_id TEXT PRIMARY KEY NOT NULL,
|
|
version_id TEXT,
|
|
FOREIGN KEY (instance_id) REFERENCES instances (id)
|
|
ON DELETE CASCADE
|
|
);
|