Display versions: Add new version notification in footer (#101)

* feat: Add new version notification in footer

This commit implements a system to check for new application versions and notify the user.

On page load, the server-side code now fetches the latest release from the GitHub repository API. It uses `semver` to compare the current application version with the latest release tag.

If a newer version is available, an alert is displayed in the footer with a link to the release page. The current application version is also now displayed in the footer. The version check is cached for one hour to minimize API requests.

* Modify version notification

* current version 0.3.1

* Resolve conflicts

* Code formatting

---------

Co-authored-by: Wayne <5291640+ringoinca@users.noreply.github.com>
This commit is contained in:
Wei S.
2025-09-10 12:09:12 +03:00
committed by GitHub
parent 4a23f8f29f
commit 6be0774bc4
5 changed files with 305 additions and 301 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "open-archiver", "name": "open-archiver",
"version": "0.3.0", "version": "0.3.1",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "dotenv -- pnpm --filter \"./packages/*\" --parallel dev", "dev": "dotenv -- pnpm --filter \"./packages/*\" --parallel dev",

View File

@@ -52,16 +52,16 @@
<div class="mt-2 rounded-md border bg-white p-4"> <div class="mt-2 rounded-md border bg-white p-4">
{#if isLoading} {#if isLoading}
<p>{$t('components.email_preview.loading')}</p> <p>{$t('app.components.email_preview.loading')}</p>
{:else if emailHtml} {:else if emailHtml}
<iframe <iframe
title={$t('archive.email_preview')} title={$t('app.archive.email_preview')}
srcdoc={emailHtml()} srcdoc={emailHtml()}
class="h-[600px] w-full border-none" class="h-[600px] w-full border-none"
></iframe> ></iframe>
{:else if raw} {:else if raw}
<p>{$t('components.email_preview.render_error')}</p> <p>{$t('app.components.email_preview.render_error')}</p>
{:else} {:else}
<p class="text-gray-500">{$t('components.email_preview.not_available')}</p> <p class="text-gray-500">{$t('app.components.email_preview.not_available')}</p>
{/if} {/if}
</div> </div>

View File

@@ -15,12 +15,14 @@
<Alert.Title class="flex items-center gap-2"> <Alert.Title class="flex items-center gap-2">
<Info class="h-4 w-4" /> <Info class="h-4 w-4" />
{$t('app.components.footer.new_version_available')} {$t('app.components.footer.new_version_available')}
</Alert.Title> <a
<Alert.Description> href={newVersionInfo.url}
<a href={newVersionInfo.url} target="_blank" class="underline"> target="_blank"
class=" text-muted-foreground underline"
>
{newVersionInfo.description} {newVersionInfo.description}
</a> </a>
</Alert.Description> </Alert.Title>
</Alert.Root> </Alert.Root>
{/if} {/if}
<p class="text-balance text-center text-xs font-medium leading-loose"> <p class="text-balance text-center text-xs font-medium leading-loose">

View File

@@ -1,289 +1,289 @@
{ {
"app": { "app": {
"auth": { "auth": {
"login": "Accedi", "login": "Accedi",
"login_tip": "Inserisci la tua email qui sotto per accedere al tuo account.", "login_tip": "Inserisci la tua email qui sotto per accedere al tuo account.",
"email": "Email", "email": "Email",
"password": "Password" "password": "Password"
}, },
"common": { "common": {
"working": "In corso" "working": "In corso"
}, },
"archive": { "archive": {
"title": "Archivio", "title": "Archivio",
"no_subject": "Nessun Oggetto", "no_subject": "Nessun Oggetto",
"from": "Da", "from": "Da",
"sent": "Inviato", "sent": "Inviato",
"recipients": "Destinatari", "recipients": "Destinatari",
"to": "A", "to": "A",
"meta_data": "Metadati", "meta_data": "Metadati",
"folder": "Cartella", "folder": "Cartella",
"tags": "Tag", "tags": "Tag",
"size": "Dimensione", "size": "Dimensione",
"email_preview": "Anteprima Email", "email_preview": "Anteprima Email",
"attachments": "Allegati", "attachments": "Allegati",
"download": "Scarica", "download": "Scarica",
"actions": "Azioni", "actions": "Azioni",
"download_eml": "Scarica Email (.eml)", "download_eml": "Scarica Email (.eml)",
"delete_email": "Elimina Email", "delete_email": "Elimina Email",
"email_thread": "Thread Email", "email_thread": "Thread Email",
"delete_confirmation_title": "Sei sicuro di voler eliminare questa email?", "delete_confirmation_title": "Sei sicuro di voler eliminare questa email?",
"delete_confirmation_description": "Questa azione non può essere annullata e rimuoverà permanentemente l'email e i suoi allegati.", "delete_confirmation_description": "Questa azione non può essere annullata e rimuoverà permanentemente l'email e i suoi allegati.",
"deleting": "Eliminazione in corso", "deleting": "Eliminazione in corso",
"confirm": "Conferma", "confirm": "Conferma",
"cancel": "Annulla", "cancel": "Annulla",
"not_found": "Email non trovata." "not_found": "Email non trovata."
}, },
"ingestions": { "ingestions": {
"title": "Sorgenti di Ingestione", "title": "Sorgenti di Ingestione",
"ingestion_sources": "Sorgenti di Ingestione", "ingestion_sources": "Sorgenti di Ingestione",
"bulk_actions": "Azioni di Massa", "bulk_actions": "Azioni di Massa",
"force_sync": "Forza Sincronizzazione", "force_sync": "Forza Sincronizzazione",
"delete": "Elimina", "delete": "Elimina",
"create_new": "Crea Nuovo", "create_new": "Crea Nuovo",
"name": "Nome", "name": "Nome",
"provider": "Provider", "provider": "Provider",
"status": "Stato", "status": "Stato",
"active": "Attivo", "active": "Attivo",
"created_at": "Creato il", "created_at": "Creato il",
"actions": "Azioni", "actions": "Azioni",
"last_sync_message": "Ultimo messaggio di sincronizzazione", "last_sync_message": "Ultimo messaggio di sincronizzazione",
"empty": "Vuoto", "empty": "Vuoto",
"open_menu": "Apri menu", "open_menu": "Apri menu",
"edit": "Modifica", "edit": "Modifica",
"create": "Crea", "create": "Crea",
"ingestion_source": "Sorgente di Ingestione", "ingestion_source": "Sorgente di Ingestione",
"edit_description": "Apporta modifiche alla tua sorgente di ingestione qui.", "edit_description": "Apporta modifiche alla tua sorgente di ingestione qui.",
"create_description": "Aggiungi una nuova sorgente di ingestione per iniziare ad archiviare le email.", "create_description": "Aggiungi una nuova sorgente di ingestione per iniziare ad archiviare le email.",
"read": "Leggi", "read": "Leggi",
"docs_here": "documenti qui", "docs_here": "documenti qui",
"delete_confirmation_title": "Sei sicuro di voler eliminare questa ingestione?", "delete_confirmation_title": "Sei sicuro di voler eliminare questa ingestione?",
"delete_confirmation_description": "Questo cancellerà tutte le email archiviate, gli allegati, l'indicizzazione e i file associati a questa ingestione. Se vuoi solo interrompere la sincronizzazione di nuove email, puoi mettere in pausa l'ingestione.", "delete_confirmation_description": "Questo cancellerà tutte le email archiviate, gli allegati, l'indicizzazione e i file associati a questa ingestione. Se vuoi solo interrompere la sincronizzazione di nuove email, puoi mettere in pausa l'ingestione.",
"deleting": "Eliminazione in corso", "deleting": "Eliminazione in corso",
"confirm": "Conferma", "confirm": "Conferma",
"cancel": "Annulla", "cancel": "Annulla",
"bulk_delete_confirmation_title": "Sei sicuro di voler eliminare {{count}} ingestioni selezionate?", "bulk_delete_confirmation_title": "Sei sicuro di voler eliminare {{count}} ingestioni selezionate?",
"bulk_delete_confirmation_description": "Questo cancellerà tutte le email archiviate, gli allegati, l'indicizzazione e i file associati a queste ingestioni. Se vuoi solo interrompere la sincronizzazione di nuove email, puoi mettere in pausa le ingestioni." "bulk_delete_confirmation_description": "Questo cancellerà tutte le email archiviate, gli allegati, l'indicizzazione e i file associati a queste ingestioni. Se vuoi solo interrompere la sincronizzazione di nuove email, puoi mettere in pausa le ingestioni."
}, },
"search": { "search": {
"title": "Ricerca", "title": "Ricerca",
"description": "Ricerca email archiviate.", "description": "Ricerca email archiviate.",
"email_search": "Ricerca Email", "email_search": "Ricerca Email",
"placeholder": "Cerca per parola chiave, mittente, destinatario...", "placeholder": "Cerca per parola chiave, mittente, destinatario...",
"search_button": "Cerca", "search_button": "Cerca",
"search_options": "Opzioni di ricerca", "search_options": "Opzioni di ricerca",
"strategy_fuzzy": "Approssimativa", "strategy_fuzzy": "Approssimativa",
"strategy_verbatim": "Esatta", "strategy_verbatim": "Esatta",
"strategy_frequency": "Frequenza", "strategy_frequency": "Frequenza",
"select_strategy": "Seleziona una strategia", "select_strategy": "Seleziona una strategia",
"error": "Errore", "error": "Errore",
"found_results_in": "Trovati {{total}} risultati in {{seconds}}s", "found_results_in": "Trovati {{total}} risultati in {{seconds}}s",
"found_results": "Trovati {{total}} risultati", "found_results": "Trovati {{total}} risultati",
"from": "Da", "from": "Da",
"to": "A", "to": "A",
"in_email_body": "Nel corpo dell'email", "in_email_body": "Nel corpo dell'email",
"in_attachment": "Nell'allegato: {{filename}}", "in_attachment": "Nell'allegato: {{filename}}",
"prev": "Prec", "prev": "Prec",
"next": "Succ" "next": "Succ"
}, },
"roles": { "roles": {
"title": "Gestione Ruoli", "title": "Gestione Ruoli",
"role_management": "Gestione Ruoli", "role_management": "Gestione Ruoli",
"create_new": "Crea Nuovo", "create_new": "Crea Nuovo",
"name": "Nome", "name": "Nome",
"created_at": "Creato il", "created_at": "Creato il",
"actions": "Azioni", "actions": "Azioni",
"open_menu": "Apri menu", "open_menu": "Apri menu",
"view_policy": "Visualizza Policy", "view_policy": "Visualizza Policy",
"edit": "Modifica", "edit": "Modifica",
"delete": "Elimina", "delete": "Elimina",
"no_roles_found": "Nessun ruolo trovato.", "no_roles_found": "Nessun ruolo trovato.",
"role_policy": "Policy Ruolo", "role_policy": "Policy Ruolo",
"viewing_policy_for_role": "Visualizzazione policy per il ruolo: {{name}}", "viewing_policy_for_role": "Visualizzazione policy per il ruolo: {{name}}",
"create": "Crea", "create": "Crea",
"role": "Ruolo", "role": "Ruolo",
"edit_description": "Apporta modifiche al ruolo qui.", "edit_description": "Apporta modifiche al ruolo qui.",
"create_description": "Aggiungi un nuovo ruolo al sistema.", "create_description": "Aggiungi un nuovo ruolo al sistema.",
"delete_confirmation_title": "Sei sicuro di voler eliminare questo ruolo?", "delete_confirmation_title": "Sei sicuro di voler eliminare questo ruolo?",
"delete_confirmation_description": "Questa azione non può essere annullata. Questo eliminerà permanentemente il ruolo.", "delete_confirmation_description": "Questa azione non può essere annullata. Questo eliminerà permanentemente il ruolo.",
"deleting": "Eliminazione in corso", "deleting": "Eliminazione in corso",
"confirm": "Conferma", "confirm": "Conferma",
"cancel": "Annulla" "cancel": "Annulla"
}, },
"system_settings": { "system_settings": {
"title": "Impostazioni di Sistema", "title": "Impostazioni di Sistema",
"system_settings": "Impostazioni di Sistema", "system_settings": "Impostazioni di Sistema",
"description": "Gestisci le impostazioni globali dell'applicazione.", "description": "Gestisci le impostazioni globali dell'applicazione.",
"language": "Lingua", "language": "Lingua",
"default_theme": "Tema predefinito", "default_theme": "Tema predefinito",
"light": "Chiaro", "light": "Chiaro",
"dark": "Scuro", "dark": "Scuro",
"system": "Sistema", "system": "Sistema",
"support_email": "Email di Supporto", "support_email": "Email di Supporto",
"saving": "Salvataggio in corso", "saving": "Salvataggio in corso",
"save_changes": "Salva Modifiche" "save_changes": "Salva Modifiche"
}, },
"users": { "users": {
"title": "Gestione Utenti", "title": "Gestione Utenti",
"user_management": "Gestione Utenti", "user_management": "Gestione Utenti",
"create_new": "Crea Nuovo", "create_new": "Crea Nuovo",
"name": "Nome", "name": "Nome",
"email": "Email", "email": "Email",
"role": "Ruolo", "role": "Ruolo",
"created_at": "Creato il", "created_at": "Creato il",
"actions": "Azioni", "actions": "Azioni",
"open_menu": "Apri menu", "open_menu": "Apri menu",
"edit": "Modifica", "edit": "Modifica",
"delete": "Elimina", "delete": "Elimina",
"no_users_found": "Nessun utente trovato.", "no_users_found": "Nessun utente trovato.",
"create": "Crea", "create": "Crea",
"user": "Utente", "user": "Utente",
"edit_description": "Apporta modifiche all'utente qui.", "edit_description": "Apporta modifiche all'utente qui.",
"create_description": "Aggiungi un nuovo utente al sistema.", "create_description": "Aggiungi un nuovo utente al sistema.",
"delete_confirmation_title": "Sei sicuro di voler eliminare questo utente?", "delete_confirmation_title": "Sei sicuro di voler eliminare questo utente?",
"delete_confirmation_description": "Questa azione non può essere annullata. Questo eliminerà permanentemente l'utente e rimuoverà i suoi dati dai nostri server.", "delete_confirmation_description": "Questa azione non può essere annullata. Questo eliminerà permanentemente l'utente e rimuoverà i suoi dati dai nostri server.",
"deleting": "Eliminazione in corso", "deleting": "Eliminazione in corso",
"confirm": "Conferma", "confirm": "Conferma",
"cancel": "Annulla" "cancel": "Annulla"
}, },
"components": { "components": {
"charts": { "charts": {
"emails_ingested": "Email Acquisite", "emails_ingested": "Email Acquisite",
"storage_used": "Spazio di Archiviazione Utilizzato", "storage_used": "Spazio di Archiviazione Utilizzato",
"emails": "Email" "emails": "Email"
}, },
"common": { "common": {
"submitting": "Invio in corso...", "submitting": "Invio in corso...",
"submit": "Invia", "submit": "Invia",
"save": "Salva" "save": "Salva"
}, },
"email_preview": { "email_preview": {
"loading": "Caricamento anteprima email...", "loading": "Caricamento anteprima email...",
"render_error": "Impossibile renderizzare l'anteprima dell'email.", "render_error": "Impossibile renderizzare l'anteprima dell'email.",
"not_available": "File .eml grezzo non disponibile per questa email." "not_available": "File .eml grezzo non disponibile per questa email."
}, },
"footer": { "footer": {
"all_rights_reserved": "Tutti i diritti riservati." "all_rights_reserved": "Tutti i diritti riservati."
}, },
"ingestion_source_form": { "ingestion_source_form": {
"provider_generic_imap": "IMAP Generico", "provider_generic_imap": "IMAP Generico",
"provider_google_workspace": "Google Workspace", "provider_google_workspace": "Google Workspace",
"provider_microsoft_365": "Microsoft 365", "provider_microsoft_365": "Microsoft 365",
"provider_pst_import": "Importazione PST", "provider_pst_import": "Importazione PST",
"provider_eml_import": "Importazione EML", "provider_eml_import": "Importazione EML",
"select_provider": "Seleziona un provider", "select_provider": "Seleziona un provider",
"service_account_key": "Chiave Account di Servizio (JSON)", "service_account_key": "Chiave Account di Servizio (JSON)",
"service_account_key_placeholder": "Incolla il contenuto JSON della chiave del tuo account di servizio", "service_account_key_placeholder": "Incolla il contenuto JSON della chiave del tuo account di servizio",
"impersonated_admin_email": "Email dell'Amministratore Impersonato", "impersonated_admin_email": "Email dell'Amministratore Impersonato",
"client_id": "ID Applicazione (Client)", "client_id": "ID Applicazione (Client)",
"client_secret": "Valore Segreto Client", "client_secret": "Valore Segreto Client",
"client_secret_placeholder": "Inserisci il Valore segreto, non l'ID Segreto", "client_secret_placeholder": "Inserisci il Valore segreto, non l'ID Segreto",
"tenant_id": "ID Directory (Tenant)", "tenant_id": "ID Directory (Tenant)",
"host": "Host", "host": "Host",
"port": "Porta", "port": "Porta",
"username": "Nome Utente", "username": "Nome Utente",
"use_tls": "Usa TLS", "use_tls": "Usa TLS",
"allow_insecure_cert": "Consenti certificato non sicuro", "allow_insecure_cert": "Consenti certificato non sicuro",
"pst_file": "File PST", "pst_file": "File PST",
"eml_file": "File EML", "eml_file": "File EML",
"heads_up": "Attenzione!", "heads_up": "Attenzione!",
"org_wide_warning": "Si prega di notare che questa è un'operazione a livello di organizzazione. Questo tipo di ingestione importerà e indicizzerà <b>tutte</b> le caselle di posta elettronica nella tua organizzazione. Se vuoi importare solo caselle di posta elettronica specifiche, usa il connettore IMAP.", "org_wide_warning": "Si prega di notare che questa è un'operazione a livello di organizzazione. Questo tipo di ingestione importerà e indicizzerà <b>tutte</b> le caselle di posta elettronica nella tua organizzazione. Se vuoi importare solo caselle di posta elettronica specifiche, usa il connettore IMAP.",
"upload_failed": "Caricamento Fallito, riprova" "upload_failed": "Caricamento Fallito, riprova"
}, },
"role_form": { "role_form": {
"policies_json": "Policy (JSON)", "policies_json": "Policy (JSON)",
"invalid_json": "Formato JSON non valido per le policy." "invalid_json": "Formato JSON non valido per le policy."
}, },
"theme_switcher": { "theme_switcher": {
"toggle_theme": "Cambia tema" "toggle_theme": "Cambia tema"
}, },
"user_form": { "user_form": {
"select_role": "Seleziona un ruolo" "select_role": "Seleziona un ruolo"
} }
}, },
"setup": { "setup": {
"title": "Configurazione", "title": "Configurazione",
"description": "Configura l'account amministratore iniziale per Open Archiver.", "description": "Configura l'account amministratore iniziale per Open Archiver.",
"welcome": "Benvenuto", "welcome": "Benvenuto",
"create_admin_account": "Crea il primo account amministratore per iniziare.", "create_admin_account": "Crea il primo account amministratore per iniziare.",
"first_name": "Nome", "first_name": "Nome",
"last_name": "Cognome", "last_name": "Cognome",
"email": "Email", "email": "Email",
"password": "Password", "password": "Password",
"creating_account": "Creazione Account", "creating_account": "Creazione Account",
"create_account": "Crea Account" "create_account": "Crea Account"
}, },
"layout": { "layout": {
"dashboard": "Dashboard", "dashboard": "Dashboard",
"ingestions": "Ingestioni", "ingestions": "Ingestioni",
"archived_emails": "Email archiviate", "archived_emails": "Email archiviate",
"search": "Ricerca", "search": "Ricerca",
"settings": "Impostazioni", "settings": "Impostazioni",
"system": "Sistema", "system": "Sistema",
"users": "Utenti", "users": "Utenti",
"roles": "Ruoli", "roles": "Ruoli",
"api_keys": "Chiavi API", "api_keys": "Chiavi API",
"logout": "Esci" "logout": "Esci"
}, },
"api_keys_page": { "api_keys_page": {
"title": "Chiavi API", "title": "Chiavi API",
"header": "Chiavi API", "header": "Chiavi API",
"generate_new_key": "Genera Nuova Chiave", "generate_new_key": "Genera Nuova Chiave",
"name": "Nome", "name": "Nome",
"key": "Chiave", "key": "Chiave",
"expires_at": "Scade il", "expires_at": "Scade il",
"created_at": "Creato il", "created_at": "Creato il",
"actions": "Azioni", "actions": "Azioni",
"delete": "Elimina", "delete": "Elimina",
"no_keys_found": "Nessuna chiave API trovata.", "no_keys_found": "Nessuna chiave API trovata.",
"generate_modal_title": "Genera Nuova Chiave API", "generate_modal_title": "Genera Nuova Chiave API",
"generate_modal_description": "Fornisci un nome e una scadenza per la tua nuova chiave API.", "generate_modal_description": "Fornisci un nome e una scadenza per la tua nuova chiave API.",
"expires_in": "Scade Tra", "expires_in": "Scade Tra",
"select_expiration": "Seleziona una scadenza", "select_expiration": "Seleziona una scadenza",
"30_days": "30 Giorni", "30_days": "30 Giorni",
"60_days": "60 Giorni", "60_days": "60 Giorni",
"6_months": "6 Mesi", "6_months": "6 Mesi",
"12_months": "12 Mesi", "12_months": "12 Mesi",
"24_months": "24 Mesi", "24_months": "24 Mesi",
"generate": "Genera", "generate": "Genera",
"new_api_key": "Nuova Chiave API", "new_api_key": "Nuova Chiave API",
"failed_to_delete": "Impossibile eliminare la chiave API", "failed_to_delete": "Impossibile eliminare la chiave API",
"api_key_deleted": "Chiave API eliminata", "api_key_deleted": "Chiave API eliminata",
"generated_title": "Chiave API Generata", "generated_title": "Chiave API Generata",
"generated_message": "La tua chiave API è stata generata, per favore copiala e salvala in un luogo sicuro. Questa chiave verrà mostrata solo una volta." "generated_message": "La tua chiave API è stata generata, per favore copiala e salvala in un luogo sicuro. Questa chiave verrà mostrata solo una volta."
}, },
"archived_emails_page": { "archived_emails_page": {
"title": "Email archiviate", "title": "Email archiviate",
"header": "Email Archiviate", "header": "Email Archiviate",
"select_ingestion_source": "Seleziona una sorgente di ingestione", "select_ingestion_source": "Seleziona una sorgente di ingestione",
"date": "Data", "date": "Data",
"subject": "Oggetto", "subject": "Oggetto",
"sender": "Mittente", "sender": "Mittente",
"inbox": "Posta in arrivo", "inbox": "Posta in arrivo",
"path": "Percorso", "path": "Percorso",
"actions": "Azioni", "actions": "Azioni",
"view": "Visualizza", "view": "Visualizza",
"no_emails_found": "Nessuna email archiviata trovata.", "no_emails_found": "Nessuna email archiviata trovata.",
"prev": "Prec", "prev": "Prec",
"next": "Succ" "next": "Succ"
}, },
"dashboard_page": { "dashboard_page": {
"title": "Dashboard", "title": "Dashboard",
"meta_description": "Panoramica del tuo archivio email.", "meta_description": "Panoramica del tuo archivio email.",
"header": "Dashboard", "header": "Dashboard",
"create_ingestion": "Crea un'ingestione", "create_ingestion": "Crea un'ingestione",
"no_ingestion_header": "Non hai impostato nessuna sorgente di ingestione.", "no_ingestion_header": "Non hai impostato nessuna sorgente di ingestione.",
"no_ingestion_text": "Aggiungi una sorgente di ingestione per iniziare ad archiviare le tue caselle di posta.", "no_ingestion_text": "Aggiungi una sorgente di ingestione per iniziare ad archiviare le tue caselle di posta.",
"total_emails_archived": "Totale Email Archiviate", "total_emails_archived": "Totale Email Archiviate",
"total_storage_used": "Spazio di Archiviazione Totale Utilizzato", "total_storage_used": "Spazio di Archiviazione Totale Utilizzato",
"failed_ingestions": "Ingestioni Fallite (Ultimi 7 Giorni)", "failed_ingestions": "Ingestioni Fallite (Ultimi 7 Giorni)",
"ingestion_history": "Cronologia Ingestioni", "ingestion_history": "Cronologia Ingestioni",
"no_ingestion_history": "Nessuna cronologia delle ingestioni disponibile.", "no_ingestion_history": "Nessuna cronologia delle ingestioni disponibile.",
"storage_by_source": "Spazio di Archiviazione per Sorgente di Ingestione", "storage_by_source": "Spazio di Archiviazione per Sorgente di Ingestione",
"no_ingestion_sources": "Nessuna sorgente di ingestione disponibile.", "no_ingestion_sources": "Nessuna sorgente di ingestione disponibile.",
"indexed_insights": "Approfondimenti indicizzati", "indexed_insights": "Approfondimenti indicizzati",
"top_10_senders": "I 10 Mittenti Principali", "top_10_senders": "I 10 Mittenti Principali",
"no_indexed_insights": "Nessun approfondimento indicizzato disponibile." "no_indexed_insights": "Nessun approfondimento indicizzato disponibile."
} }
} }
} }

View File

@@ -40,7 +40,9 @@ export const load: LayoutServerLoad = async (event) => {
const now = new Date(); const now = new Date();
if (!lastChecked || now.getTime() - lastChecked.getTime() > 1000 * 60 * 60) { if (!lastChecked || now.getTime() - lastChecked.getTime() > 1000 * 60 * 60) {
try { try {
const res = await fetch('https://api.github.com/repos/LogicLabs-OU/OpenArchiver/releases/latest'); const res = await fetch(
'https://api.github.com/repos/LogicLabs-OU/OpenArchiver/releases/latest'
);
if (res.ok) { if (res.ok) {
const latestRelease = await res.json(); const latestRelease = await res.json();
const latestVersion = latestRelease.tag_name.replace('v', ''); const latestVersion = latestRelease.tag_name.replace('v', '');
@@ -48,7 +50,7 @@ export const load: LayoutServerLoad = async (event) => {
newVersionInfo = { newVersionInfo = {
version: latestVersion, version: latestVersion,
description: latestRelease.name, description: latestRelease.name,
url: latestRelease.html_url url: latestRelease.html_url,
}; };
} }
} }
@@ -64,6 +66,6 @@ export const load: LayoutServerLoad = async (event) => {
isDemo: process.env.IS_DEMO === 'true', isDemo: process.env.IS_DEMO === 'true',
systemSettings, systemSettings,
currentVersion: version, currentVersion: version,
newVersionInfo: newVersionInfo newVersionInfo: newVersionInfo,
}; };
}; };