Upload via GUI (23 Dateien)
This commit is contained in:
@@ -134,6 +134,41 @@ export async function openWeb(path) {
|
||||
return chrome.tabs.create({ url: u.href });
|
||||
}
|
||||
|
||||
/** Vergleicht zwei Versionsnummern ("2.0.0" gegen "2.1"): negativ, null oder positiv. Nicht-Zahlen zählen als 0. */
|
||||
export function compareVersions(a, b) {
|
||||
const pa = String(a).split(/[.+-]/).map((x) => parseInt(x, 10) || 0);
|
||||
const pb = String(b).split(/[.+-]/).map((x) => parseInt(x, 10) || 0);
|
||||
for (let i = 0; i < Math.max(pa.length, pb.length, 3); i++) {
|
||||
const d = (pa[i] || 0) - (pb[i] || 0);
|
||||
if (d !== 0) return d;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
const UPDATE_CHECK_EVERY_MS = 6 * 3600 * 1000;
|
||||
|
||||
/**
|
||||
* Fragt den Server, ob es eine neuere Version dieser Erweiterung gibt (die Plugin-Webseite liefert sie über DeskHub). Das Ergebnis steht
|
||||
* in storage.local unter "update": { version, notes, size, checkedAt } oder null, wenn die Erweiterung aktuell ist. Höchstens alle 6 Stunden,
|
||||
* außer mit force. Netzwerkfehler ändern nichts.
|
||||
*/
|
||||
export async function checkForExtensionUpdate({ force = false } = {}) {
|
||||
const session = await getSession();
|
||||
if (!session) return null;
|
||||
const { update, updateCheckedAt = 0 } = await chrome.storage.local.get(['update', 'updateCheckedAt']);
|
||||
if (!force && Date.now() - updateCheckedAt < UPDATE_CHECK_EVERY_MS) return update || null;
|
||||
try {
|
||||
const { data } = await apiCall('app_update.php', { query: { platform: 'chrome' } });
|
||||
const current = chrome.runtime.getManifest().version;
|
||||
const newer = data?.available && data.version && compareVersions(data.version, current) > 0;
|
||||
const info = newer ? { version: String(data.version), notes: String(data.notes || ''), size: Number(data.size) || 0, checkedAt: Date.now() } : null;
|
||||
await chrome.storage.local.set({ update: info, updateCheckedAt: Date.now() });
|
||||
return info;
|
||||
} catch {
|
||||
return update || null; // Fehler: beim nächsten Mal erneut
|
||||
}
|
||||
}
|
||||
|
||||
/** Maskiert Text und macht Zeilenumbrüche zu <br>: Der Server nimmt Ticket-Nachrichten als HTML an und bereinigt sie zusätzlich. */
|
||||
export function plainToHtml(text) {
|
||||
return String(text ?? '').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\r\n|\r|\n/g, '<br>');
|
||||
|
||||
Reference in New Issue
Block a user