mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2025-01-07 07:37:24 +03:00
parent
8d847eeb18
commit
b0fe6e6c59
2 changed files with 84 additions and 63 deletions
|
@ -53,19 +53,20 @@ window.qBittorrent.Cache ??= (() => {
|
||||||
class BuildInfoCache {
|
class BuildInfoCache {
|
||||||
#m_store = {};
|
#m_store = {};
|
||||||
|
|
||||||
init() {
|
async init() {
|
||||||
new Request.JSON({
|
return fetch("api/v2/app/buildInfo", {
|
||||||
url: "api/v2/app/buildInfo",
|
method: "GET",
|
||||||
method: "get",
|
cache: "no-store"
|
||||||
noCache: true,
|
})
|
||||||
onSuccess: (responseJSON) => {
|
.then(async (response) => {
|
||||||
if (!responseJSON)
|
if (!response.ok)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
const responseText = await response.text();
|
||||||
|
const responseJSON = JSON.parse(responseText);
|
||||||
deepFreeze(responseJSON);
|
deepFreeze(responseJSON);
|
||||||
this.#m_store = responseJSON;
|
this.#m_store = responseJSON;
|
||||||
}
|
});
|
||||||
}).send();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get() {
|
get() {
|
||||||
|
@ -80,26 +81,27 @@ window.qBittorrent.Cache ??= (() => {
|
||||||
// onFailure: () => {},
|
// onFailure: () => {},
|
||||||
// onSuccess: () => {}
|
// onSuccess: () => {}
|
||||||
// }
|
// }
|
||||||
init(obj = {}) {
|
async init(obj = {}) {
|
||||||
new Request.JSON({
|
return fetch("api/v2/app/preferences", {
|
||||||
url: "api/v2/app/preferences",
|
method: "GET",
|
||||||
method: "get",
|
cache: "no-store"
|
||||||
noCache: true,
|
})
|
||||||
onFailure: (xhr) => {
|
.then(async (response) => {
|
||||||
if (typeof obj.onFailure === "function")
|
if (!response.ok)
|
||||||
obj.onFailure(xhr);
|
return;
|
||||||
},
|
|
||||||
onSuccess: (responseJSON, responseText) => {
|
|
||||||
if (!responseJSON)
|
|
||||||
return;
|
|
||||||
|
|
||||||
deepFreeze(responseJSON);
|
const responseText = await response.text();
|
||||||
this.#m_store = responseJSON;
|
const responseJSON = JSON.parse(responseText);
|
||||||
|
deepFreeze(responseJSON);
|
||||||
|
this.#m_store = responseJSON;
|
||||||
|
|
||||||
if (typeof obj.onSuccess === "function")
|
if (typeof obj.onSuccess === "function")
|
||||||
obj.onSuccess(responseJSON, responseText);
|
obj.onSuccess(responseJSON, responseText);
|
||||||
}
|
},
|
||||||
}).send();
|
(error) => {
|
||||||
|
if (typeof obj.onFailure === "function")
|
||||||
|
obj.onFailure(error);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
get() {
|
get() {
|
||||||
|
@ -117,48 +119,53 @@ window.qBittorrent.Cache ??= (() => {
|
||||||
if (typeof obj.data !== "object")
|
if (typeof obj.data !== "object")
|
||||||
throw new Error("`data` is not an object.");
|
throw new Error("`data` is not an object.");
|
||||||
|
|
||||||
new Request({
|
fetch("api/v2/app/setPreferences", {
|
||||||
url: "api/v2/app/setPreferences",
|
method: "POST",
|
||||||
method: "post",
|
body: new URLSearchParams({
|
||||||
data: {
|
"json": JSON.stringify(obj.data)
|
||||||
"json": JSON.stringify(obj.data)
|
})
|
||||||
},
|
})
|
||||||
onFailure: (xhr) => {
|
.then(async (response) => {
|
||||||
if (typeof obj.onFailure === "function")
|
if (!response.ok)
|
||||||
obj.onFailure(xhr);
|
return;
|
||||||
},
|
|
||||||
onSuccess: (responseText, responseXML) => {
|
|
||||||
this.#m_store = structuredClone(this.#m_store);
|
|
||||||
for (const key in obj.data) {
|
|
||||||
if (!Object.hasOwn(obj.data, key))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
const value = obj.data[key];
|
this.#m_store = structuredClone(this.#m_store);
|
||||||
this.#m_store[key] = value;
|
for (const key in obj.data) {
|
||||||
}
|
if (!Object.hasOwn(obj.data, key))
|
||||||
deepFreeze(this.#m_store);
|
continue;
|
||||||
|
|
||||||
if (typeof obj.onSuccess === "function")
|
const value = obj.data[key];
|
||||||
obj.onSuccess(responseText, responseXML);
|
this.#m_store[key] = value;
|
||||||
}
|
}
|
||||||
}).send();
|
deepFreeze(this.#m_store);
|
||||||
|
|
||||||
|
if (typeof obj.onSuccess === "function") {
|
||||||
|
const responseText = await response.text();
|
||||||
|
obj.onSuccess(responseText);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(error) => {
|
||||||
|
if (typeof obj.onFailure === "function")
|
||||||
|
obj.onFailure(error);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class QbtVersionCache {
|
class QbtVersionCache {
|
||||||
#m_store = "";
|
#m_store = "";
|
||||||
|
|
||||||
init() {
|
async init() {
|
||||||
new Request({
|
return fetch("api/v2/app/version", {
|
||||||
url: "api/v2/app/version",
|
method: "GET",
|
||||||
method: "get",
|
cache: "no-store"
|
||||||
noCache: true,
|
})
|
||||||
onSuccess: (responseText) => {
|
.then(async (response) => {
|
||||||
if (!responseText)
|
if (!response.ok)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
const responseText = await response.text();
|
||||||
this.#m_store = responseText;
|
this.#m_store = responseText;
|
||||||
}
|
});
|
||||||
}).send();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get() {
|
get() {
|
||||||
|
|
|
@ -30,6 +30,7 @@ window.qBittorrent.Client ??= (() => {
|
||||||
const exports = () => {
|
const exports = () => {
|
||||||
return {
|
return {
|
||||||
setup: setup,
|
setup: setup,
|
||||||
|
initializeCaches: initializeCaches,
|
||||||
closeWindow: closeWindow,
|
closeWindow: closeWindow,
|
||||||
closeFrameWindow: closeFrameWindow,
|
closeFrameWindow: closeFrameWindow,
|
||||||
getSyncMainDataInterval: getSyncMainDataInterval,
|
getSyncMainDataInterval: getSyncMainDataInterval,
|
||||||
|
@ -45,11 +46,22 @@ window.qBittorrent.Client ??= (() => {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let cacheAllSettled;
|
||||||
const setup = () => {
|
const setup = () => {
|
||||||
// fetch various data and store it in memory
|
// fetch various data and store it in memory
|
||||||
window.qBittorrent.Cache.buildInfo.init();
|
cacheAllSettled = Promise.allSettled([
|
||||||
window.qBittorrent.Cache.preferences.init();
|
window.qBittorrent.Cache.buildInfo.init(),
|
||||||
window.qBittorrent.Cache.qbtVersion.init();
|
window.qBittorrent.Cache.preferences.init(),
|
||||||
|
window.qBittorrent.Cache.qbtVersion.init()
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
|
||||||
|
const initializeCaches = async () => {
|
||||||
|
const results = await cacheAllSettled;
|
||||||
|
for (const [idx, result] of results.entries()) {
|
||||||
|
if (result.status === "rejected")
|
||||||
|
console.error(`Failed to initialize cache. Index: ${idx}. Reason: "${result.reason}".`);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const closeWindow = (windowID) => {
|
const closeWindow = (windowID) => {
|
||||||
|
@ -1771,7 +1783,9 @@ window.addEventListener("DOMContentLoaded", () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
window.addEventListener("load", () => {
|
window.addEventListener("load", async () => {
|
||||||
|
await window.qBittorrent.Client.initializeCaches();
|
||||||
|
|
||||||
// switch to previously used tab
|
// switch to previously used tab
|
||||||
const previouslyUsedTab = LocalPreferences.get("selected_window_tab", "transfers");
|
const previouslyUsedTab = LocalPreferences.get("selected_window_tab", "transfers");
|
||||||
switch (previouslyUsedTab) {
|
switch (previouslyUsedTab) {
|
||||||
|
|
Loading…
Reference in a new issue