mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-11-05 09:33:25 -08:00
- Fail the run when the connection drops while a sync is running, and clear the active conflict, so the queue is not sent on a dead client and a re-login as another account never receives this profile's uploads. - Backfill last_modified from upload_time in the 37 -> 38 migration and drop the "last_modified is null" arm from the sync-check query, so rows that predate the column stop reporting as changed on every poll. - Skip conflicts during auto runs and report how many were skipped, instead of opening the modal conflict dialog from a timer or a file-watcher event.
38 lines
1.9 KiB
SQL
38 lines
1.9 KiB
SQL
-- Servatrice db migration from version 40 to version 41
|
|
|
|
-- Deck collection sync + versioning.
|
|
--
|
|
-- 1. Stable per-deck identity and change detection for two-way sync:
|
|
-- guid links a local file to its server row across renames, hash detects
|
|
-- content changes without downloading, last_modified drives newest-wins
|
|
-- default and conflict highlighting, deleted implements tombstones so a
|
|
-- delete on one device does not resurrect from the other.
|
|
-- 2. Limited per-deck version history: every hash-changing upload inserts a
|
|
-- row; the server prunes beyond the configured retention (default 20).
|
|
|
|
ALTER TABLE `cockatrice_decklist_files`
|
|
ADD COLUMN `guid` char(36) NULL AFTER `tags`,
|
|
ADD COLUMN `hash` char(40) NULL AFTER `guid`,
|
|
ADD COLUMN `last_modified` datetime NULL AFTER `hash`,
|
|
ADD COLUMN `deleted` tinyint(1) NOT NULL DEFAULT 0 AFTER `last_modified`;
|
|
|
|
-- Rows created before this migration only get a last_modified when a client
|
|
-- re-uploads them, so every sync check would keep reporting them as changed.
|
|
-- Backfill from the upload time once, here, instead of carrying a
|
|
-- "last_modified is null" branch in the poll query forever.
|
|
UPDATE `cockatrice_decklist_files` SET `last_modified` = `upload_time` WHERE `last_modified` IS NULL;
|
|
|
|
CREATE TABLE IF NOT EXISTS `cockatrice_deck_versions` (
|
|
`id` int(7) unsigned zerofill NOT NULL auto_increment,
|
|
`deck_id` int(7) unsigned zerofill NOT NULL,
|
|
`version_no` int(7) unsigned NOT NULL,
|
|
`content` text NOT NULL,
|
|
`hash` char(40) NULL,
|
|
`created_at` datetime NOT NULL,
|
|
`created_by_clientid` varchar(15) NULL,
|
|
PRIMARY KEY (`id`),
|
|
KEY `deck_id` (`deck_id`),
|
|
FOREIGN KEY(`deck_id`) REFERENCES `cockatrice_decklist_files`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
|
|
|
|
UPDATE cockatrice_schema_version SET version=41 WHERE version=40;
|