Equicord/src/equicordplugins/moreStickers/migrate-v1.ts
leko 70066cae7f
Fix: MoreStickers tab (#94)
* feat(MoreStickers): ready for dynamic sticker pack feature

* fix(MoreStickers): Sticker+ tab

---------

Co-authored-by: thororen1234 <thororen1234@users.noreply.github.com>
Co-authored-by: thororen1234 <78185467+thororen1234@users.noreply.github.com>
2024-11-10 15:10:06 -05:00

147 lines
4.9 KiB
TypeScript

/*
* Vencord, a Discord client mod
* Copyright (c) 2024 Vendicated and contributors
* SPDX-License-Identifier: GPL-3.0-or-later
*/
import { DataStore } from "@api/index";
import { Toasts } from "@webpack/common";
import { getRecentStickers, setRecentStickers } from "./components/misc";
import { deleteStickerPack, getStickerPack, getStickerPackMetas, saveStickerPack } from "./stickers";
import { Sticker, StickerPack } from "./types";
const PACKS_KEY = "MoreStickers:Packs";
const PACKS_KEY_OLD = "Vencord-MoreStickers-Packs";
const RECENT_STICKERS_KEY = "MoreStickers:RecentStickers";
const RECENT_STICKERS_KEY_OLD = "Vencord-MoreStickers-RecentStickers";
function migrateStickerPackId(oldStickerPackId: string): string {
if (oldStickerPackId.startsWith("Vencord-MoreStickers-Line-Pack")) {
const id = oldStickerPackId.replace("Vencord-MoreStickers-Line-Pack-", "");
return "MoreStickers:Line:Pack:" + id;
} else if (oldStickerPackId.startsWith("Vencord-MoreStickers-Line-Emoji-Pack")) {
const id = oldStickerPackId.replace("Vencord-MoreStickers-Line-Emoji-Pack-", "");
return "MoreStickers:Line:Emoji:Pack:" + id;
} else {
return oldStickerPackId;
}
}
function migrateStickerId(oldStickerId: string): string {
if (oldStickerId.startsWith("Vencord-MoreStickers-Line-Sticker")) {
const [stickerPackId, stickerId] = oldStickerId.replace("Vencord-MoreStickers-Line-Sticker", "").split("-", 2);
return "MoreStickers:Line:Sticker:" + stickerPackId + ":" + stickerId;
} else if (oldStickerId.startsWith("Vencord-MoreStickers-Line-Emoji")) {
const [stickerPackId, stickerId] = oldStickerId.replace("Vencord-MoreStickers-Line-Emoji", "").split("-", 2);
return "MoreStickers:Line:Emoji:" + stickerPackId + ":" + stickerId;
} else {
return oldStickerId;
}
}
function migrateSticker(oldSticker: Sticker): Sticker {
return {
...oldSticker,
id: migrateStickerId(oldSticker.id),
};
}
function migrateStickerPack(oldStickerPack: StickerPack): StickerPack {
return {
...oldStickerPack,
id: migrateStickerPackId(oldStickerPack.id),
logo: migrateSticker(oldStickerPack.logo),
stickers: oldStickerPack.stickers.map(migrateSticker),
};
}
export async function isV1() {
const newPackMetas = await getStickerPackMetas(PACKS_KEY);
if (newPackMetas.length > 0) {
return false;
}
const oldPackMetas = await getStickerPackMetas(PACKS_KEY_OLD);
if (oldPackMetas.length === 0) {
return false;
}
return true;
}
export async function migrate() {
const newPackMetas = await getStickerPackMetas(PACKS_KEY);
if (newPackMetas.length > 0) {
Toasts.show({
message: "New sticker packs already exist, migration not needed",
type: Toasts.Type.FAILURE,
id: Toasts.genId(),
options: {
duration: 1000
}
});
return;
}
let oldPackMetas = await getStickerPackMetas(PACKS_KEY_OLD);
if (oldPackMetas.length === 0) {
Toasts.show({
message: "Old sticker packs not found, nothing to migrate",
type: Toasts.Type.FAILURE,
id: Toasts.genId(),
options: {
duration: 1000
}
});
return;
}
for (const oldStickerPackMeta of oldPackMetas) {
try {
const oldStickerPack = await getStickerPack(oldStickerPackMeta.id);
if (oldStickerPack === null) continue;
const newStickerPack = migrateStickerPack(oldStickerPack);
try {
await saveStickerPack(newStickerPack, PACKS_KEY);
await deleteStickerPack(oldStickerPackMeta.id, PACKS_KEY_OLD);
} catch (e) {
await deleteStickerPack(newStickerPack.id, PACKS_KEY);
}
} catch (e) {
console.error(e);
Toasts.show({
message: `Migration failed: ${oldStickerPackMeta.title} (${oldStickerPackMeta.id})`,
type: Toasts.Type.FAILURE,
id: Toasts.genId(),
options: {
duration: 1000
}
});
}
}
oldPackMetas = await getStickerPackMetas(PACKS_KEY_OLD);
if (oldPackMetas.length === 0) {
await DataStore.del(PACKS_KEY_OLD);
}
const oldRecentStickers = await getRecentStickers(RECENT_STICKERS_KEY_OLD);
if (oldRecentStickers.length > 0) {
const newRecentStickers = oldRecentStickers.map(migrateSticker);
await setRecentStickers(newRecentStickers, RECENT_STICKERS_KEY);
await DataStore.del(RECENT_STICKERS_KEY_OLD);
}
console.log("Migration complete");
Toasts.show({
message: "Sticker Pack Migration Complete",
type: Toasts.Type.SUCCESS,
id: Toasts.genId(),
options: {
duration: 1000
}
});
}