mirror of
https://github.com/SoPat712/videospeed.git
synced 2026-04-21 04:42:35 -04:00
125 lines
3.1 KiB
JavaScript
125 lines
3.1 KiB
JavaScript
(function(root, factory) {
|
|
var exports = factory();
|
|
|
|
if (typeof module === "object" && module.exports) {
|
|
module.exports = exports;
|
|
}
|
|
|
|
root.SpeederShared = root.SpeederShared || {};
|
|
root.SpeederShared.importExport = exports;
|
|
})(typeof globalThis !== "undefined" ? globalThis : this, function() {
|
|
var rawSettingsKeys = new Set([
|
|
"audioBoolean",
|
|
"controllerButtons",
|
|
"controllerLocation",
|
|
"controllerMarginBottom",
|
|
"controllerMarginLeft",
|
|
"controllerMarginRight",
|
|
"controllerMarginTop",
|
|
"controllerOpacity",
|
|
"enableSubtitleNudge",
|
|
"enabled",
|
|
"forceLastSavedSpeed",
|
|
"hideWithControls",
|
|
"hideWithControlsTimer",
|
|
"hideWithYouTubeControls",
|
|
"keyBindings",
|
|
"lastSpeed",
|
|
"popupControllerButtons",
|
|
"popupMatchHoverControls",
|
|
"rememberSpeed",
|
|
"showPopupControlBar",
|
|
"siteRules",
|
|
"speed",
|
|
"startHidden",
|
|
"subtitleNudgeAmount",
|
|
"subtitleNudgeInterval"
|
|
]);
|
|
|
|
function isRecognizedRawSettingsObject(backup) {
|
|
if (!backup || typeof backup !== "object" || Array.isArray(backup)) {
|
|
return false;
|
|
}
|
|
|
|
return Object.keys(backup).some(function(key) {
|
|
return rawSettingsKeys.has(key);
|
|
});
|
|
}
|
|
|
|
function generateBackupFilename(now) {
|
|
var date = now instanceof Date ? now : new Date(now || Date.now());
|
|
var year = date.getFullYear();
|
|
var month = String(date.getMonth() + 1).padStart(2, "0");
|
|
var day = String(date.getDate()).padStart(2, "0");
|
|
var hours = String(date.getHours()).padStart(2, "0");
|
|
var minutes = String(date.getMinutes()).padStart(2, "0");
|
|
var seconds = String(date.getSeconds()).padStart(2, "0");
|
|
|
|
return (
|
|
"speeder-backup_" +
|
|
year +
|
|
"-" +
|
|
month +
|
|
"-" +
|
|
day +
|
|
"_" +
|
|
hours +
|
|
"." +
|
|
minutes +
|
|
"." +
|
|
seconds +
|
|
".json"
|
|
);
|
|
}
|
|
|
|
function buildBackupPayload(settings, localSettings, now) {
|
|
return {
|
|
version: "1.1",
|
|
exportDate: new Date(now || Date.now()).toISOString(),
|
|
settings: settings,
|
|
localSettings: localSettings || {}
|
|
};
|
|
}
|
|
|
|
function extractImportSettings(backup) {
|
|
var settingsToImport = null;
|
|
var isWrappedBackup = false;
|
|
|
|
if (backup && backup.settings && typeof backup.settings === "object") {
|
|
settingsToImport = backup.settings;
|
|
isWrappedBackup = true;
|
|
} else if (
|
|
backup &&
|
|
typeof backup === "object" &&
|
|
isRecognizedRawSettingsObject(backup)
|
|
) {
|
|
settingsToImport = backup;
|
|
}
|
|
|
|
if (!settingsToImport) return null;
|
|
|
|
return {
|
|
isWrappedBackup: isWrappedBackup,
|
|
settings: settingsToImport,
|
|
localSettings:
|
|
backup &&
|
|
backup.localSettings &&
|
|
typeof backup.localSettings === "object"
|
|
? backup.localSettings
|
|
: null
|
|
};
|
|
}
|
|
|
|
function parseImportText(text) {
|
|
return extractImportSettings(JSON.parse(text));
|
|
}
|
|
|
|
return {
|
|
buildBackupPayload: buildBackupPayload,
|
|
extractImportSettings: extractImportSettings,
|
|
generateBackupFilename: generateBackupFilename,
|
|
isRecognizedRawSettingsObject: isRecognizedRawSettingsObject,
|
|
parseImportText: parseImportText
|
|
};
|
|
});
|