Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
c612dc1
refactor: replace BookException with RestClientException for error ha…
EdoTXp Mar 14, 2026
f179baf
fix: Update RemoteBooksRepositoryImpl methods to use async/await for …
EdoTXp Mar 14, 2026
5bb3af5
feat: Add CI workflow for testing Bookify Flutter app
EdoTXp Mar 14, 2026
5db66d5
Refactor authentication services and error handling
EdoTXp Apr 21, 2026
1956043
Refactor authentication and notification handling with Cubits
EdoTXp Apr 22, 2026
f6d849c
feat: Enhance error messages for better user guidance and update vers…
EdoTXp Apr 23, 2026
9eb0357
feat: Introduce error handling enums and extensions for authenticatio…
EdoTXp Apr 28, 2026
56d2cd2
fix: update error handling in user page reading time repository
EdoTXp May 4, 2026
7291d55
feat: Improve error handling with detailed messages and update versio…
EdoTXp May 11, 2026
ccabca7
refactor: move enums from core to shared for better accessibility.
EdoTXp May 13, 2026
f80334d
feat: Add first support for localized strings for LocalDatabase
EdoTXp May 15, 2026
00646c4
Refactor local database error handling and localization
EdoTXp May 19, 2026
7a36d3f
Refactor notification channel model and improve notification handling
EdoTXp May 22, 2026
e3c09e7
feat: Add localized notifications for loan insertion and improve rela…
EdoTXp May 22, 2026
304e7b2
feat: Implement platform exception handling across services and blocs
EdoTXp May 24, 2026
cf6a5cc
Refactor error code handling by restructuring error code extensions
EdoTXp May 26, 2026
30a2835
Refactor: Use dart format command
EdoTXp May 26, 2026
1628173
Refactor: Rename code for LocalDatabaseErrorCode (invalidData) to (co…
EdoTXp May 26, 2026
70a92cc
chore(android): temporarily ignore JVM target validation
EdoTXp May 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
name: PR - Test Bookify Flutter App
name: CI - Test Bookify Flutter App

on:
push:
branches:
- '**'

pull_request:
branches:
- main
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@
# Web related
lib/generated_plugin_registrant.dart

# Debug Symbols
/debug_symbols/

# Symbolication related
app.*.symbols

Expand Down
3 changes: 3 additions & 0 deletions android/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,6 @@ android.uniquePackageNames=false
android.dependency.useConstraints=true
android.r8.strictFullModeForKeepRules=false
android.r8.optimizedResourceShrinking=false

#! TODO: Temporarily ignore JVM target validation until Facebook Auth Plugin is updated to support Java 17. --- IGNORE ---
kotlin.jvm.target.validation.mode = IGNORE
41 changes: 39 additions & 2 deletions assets/lang/en_US.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
"reading-time-description": "Scheduling time for reading is the first step to creating a habit.\n\nSet the days and times that work best for your reading, and we'll remind you here in the notifications!",
"reading-time-calculate-success-snackbar": "Reading time successfully calculated.",
"reading-time-notification-removed-success-snackbar": "Notification successfully removed.",
"reading-time-notification-title": "Time to read!",
"reading-time-notification-body": "Many adventures await you!",
"repeat-time-title": "Set the repetition to be notified for your readings:",
"daily-dropdown-menu-entry": "Daily",
"weekly-dropdown-menu-entry": "Weekly",
Expand Down Expand Up @@ -87,6 +89,7 @@
"page-tooltip": "Page %s",
"try-again-button": "Try again",
"no-books-found-with-terms": "No books were found with these terms.\nCheck that you have typed them correctly.",
"no-books-registered": "No books registered. Go back to the home page to register.",
"enter-title-label": "Enter the Title",
"enter-author-label": "Enter the Author",
"enter-category-label": "Enter the Category",
Expand All @@ -101,6 +104,8 @@
"search-by-isbn-tooltip": "Search by ISBN",
"book-successfully-added-snackbar": "Book successfully added.",
"book-successfully-removed-snackbar": "Book successfully removed.",
"bookcase-inserted-success-snackbar": "Bookcase successfully added.",
"bookcase-updated-success-snackbar": "Bookcase successfully updated.",
"remove-book-title": "Remove the book %s",
"remove-book-description": "By clicking \"CONFIRM\" you will remove this book from your bookcase.\nAre you sure?",
"pages-label": "%s PAGES",
Expand All @@ -122,7 +127,6 @@
"field-cannot-be-empty-error": "This field cannot be empty",
"invalid-ISBN-format-error": "Invalid ISBN format",
"camera-error": "An error occurred with the camera: %s",
"unknown-error": "unknown error",
"enter-loaned-title-label": "Enter the title of the loaned book.",
"enter-title-your-book-label": "Enter the title of your book.",
"enter-bookcase-name-label": "Enter the name of the bookcase.",
Expand Down Expand Up @@ -153,6 +157,7 @@
"delete-bookcase-description": "By clicking \"CONFIRM\" you will delete the bookcase %s.\nAre you sure?",
"delete-books-title": "Delete books",
"delete-books-description": "By clicking \"CONFIRM\" you will delete the selected books in this bookcase.\nAre you sure?",
"all-books-already-inserted": "All registered books have already been added to this bookcase.",
"book-added-successfully-snackbar": "Book added successfully.\nWait until you are redirected to the previous page.",
"select-books-title": "Select the books",
"selected-books-quantity-label": "Selected books: %s",
Expand All @@ -178,6 +183,9 @@
"contact-required-field": "Contact *",
"observation-optional-field": "Observation (optional)",
"loan-date-required-field": "Loan date *",
"loan-notification-title": "Hey, your book is coming back!",
"loan-notification-body": "Hi! Just dropping by to remind you that it's time for %s0 to return %s1 that you loaned on %s2.",
"loan-insertion-success-snackbar": "Loan added successfully!",
"devolution-date-required-field": "Devolution date *",
"send-button": "Send",
"contact-selected-label": "Contact selected",
Expand Down Expand Up @@ -243,5 +251,34 @@
"book-on-loan-label": "on loan",
"book-on-reading-label": "on reading",
"previous-month-tooltip": "Previous month",
"next-month-tooltip": "Next month"
"next-month-tooltip": "Next month",
"error-rest-client-connection-timeout": "Connection to server failed due to timeout. Check your internet connection and try again: %s",
"error-rest-client-receive-timeout": "Server response took too long to arrive. Verify your connection quality and retry: %s",
"error-rest-client-not-found": "The requested resource was not found. Verify your search terms or try a different query: %s",
"error-rest-client-socket-exception": "Network connection error detected. Check your internet connection and try again: %s",
"error-invalid-isbn": "The ISBN format is invalid. Enter a valid ISBN number (10 or 13 digits): %s",
"error-unknown": "An unexpected error occurred. Please try again later or contact support: %s",
"error-auth-user-not-found": "Unable to log in. Check that your email is registered or sign up if you don't have an account: %s",
"error-auth-wrong-password": "Incorrect password. Verify your credentials and try again: %s",
"error-auth-invalid-email": "Invalid email format. Enter a valid email address: %s",
"error-auth-account-disabled": "Your account has been temporarily disabled. Contact support for help: %s",
"error-auth-too-many-requests": "Too many login attempts. Wait a few minutes and try again: %s",
"error-auth-operation-not-allowed": "This authentication method is not available right now. Try again later: %s",
"error-auth-network-request-failed": "Connection lost. Check your internet connection and try again: %s",
"error-auth-internal-error": "Something went wrong. If the problem persists, please contact support: %s",
"error-storage-invalid-value": "Data storage issue detected. Try logging out and logging back in: %s",
"error-storage-write-failed": "Unable to save your changes. Check your storage space and try again: %s",
"error-storage-read-failed": "Unable to load your data. Check your internet connection and try again: %s",
"error-local-database-conversion-failed": "Failed to process data from database. %s",
"error-local-database-not-null-constraint": "A required field is empty. %s",
"error-local-database-open-failed": "Could not open the database. %s",
"error-local-database-operation-failed": "Database operation failed during read, write, or update. %s",
"error-local-database-unique-constraint": "This record already exists in the database. %s",
"notification-channel-loan-description": "Channel that notifies when it's time to receive your loaned book.",
"notification-channel-loan-label": "Loans",
"notification-channel-read-description": "Channel that notifies when it's time for reading.",
"notification-channel-read-label": "Readings",
"error-platform-permission-denied": "Permission denied: %s",
"error-platform-permission-permanently-denied": "Permission permanently denied. Open settings to grant it: %s",
"error-platform-unsupported": "Operation not supported on this device: %s"
}
45 changes: 41 additions & 4 deletions assets/lang/it_IT.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"auth-success-snackbar": "Autenticazione avvenuta con successo.",
"reading-time-success-snackbar": "Tempo di lettura calcolato con successo.",
"reading-instruction-title": "Calcoliamo la tua velocità di lettura?",
"reading-instruction-description": "Leggi un breve estratto da un libro generato dall'IA mentre tracciamo il tuo tempo con un cronometro. Dopo il calcolo, ti verrà comunicato il tempo medio che ti ci è voluto per finire di leggere qualsiasi libro nell'app, basato sul tempo impiegato per leggere il testo.",
"reading-instruction-description": "Leggi un breve estratto da un libro generato dalla IA mentre tracciamo il tuo tempo con un cronometro. Dopo il calcolo, ti verrà comunicato il tempo medio che ti ci è voluto per finire di leggere qualsiasi libro nell'app, basato sul tempo impiegato per leggere il testo.",
"calculate-later-button": "Calcola più tardi",
"calculate-time-button": "Calcola tempo",
"close-page-button-tooltip": "Chiudi la pagina",
Expand All @@ -35,6 +35,8 @@
"reading-time-description": "Pianificare un momento dedicato alla lettura è il primo passo per creare l'abitudine.\n\nDecidi quali giorni e quali sono gli orari migliori per le tue letture e noi te lo ricorderemo qui nelle notifiche!",
"reading-time-calculate-success-snackbar": "Tempo di lettura calcolato con successo.",
"reading-time-notification-removed-success-snackbar": "Notifica rimossa con successo.",
"reading-time-notification-title": "È l'ora di leggere!",
"reading-time-notification-body": "Molte avventure ti aspettano!",
"repeat-time-title": "Imposta la ripetizione per ricevere una notifica per le tue letture:",
"daily-dropdown-menu-entry": "Giornaliera",
"weekly-dropdown-menu-entry": "Settimanale",
Expand Down Expand Up @@ -87,9 +89,10 @@
"page-tooltip": "Pagina %s",
"try-again-button": "Riprova",
"no-books-found-with-terms": "Nessun libro trovato con questi termini.\nVerifica che sia stato digitato correttamente.",
"no-books-registered": "Nessun libro registrato. Torna alla pagina iniziale per registrare.",
"enter-title-label": "Inserisci il Titolo",
"enter-author-label": "Inserisci l'Autore",
"enter-category-label": "Inserisci la Categoria",
"enter-category-label": "Inserisci la Categoria (Inglese)",
"enter-publisher-label": "Inserisci l'Editore",
"enter-isbn-label": "Inserisci l'ISBN",
"delete-text-typed-tooltip": "Cancella il testo digitato.",
Expand All @@ -101,6 +104,8 @@
"search-by-isbn-tooltip": "Cerca per ISBN",
"book-successfully-added-snackbar": "Libro aggiunto con successo.",
"book-successfully-removed-snackbar": "Libro rimosso con successo.",
"bookcase-inserted-success-snackbar": "Libreria aggiunta con successo.",
"bookcase-updated-success-snackbar": "Libreria aggiornata con successo.",
"remove-book-title": "Rimuovere il libro %s",
"remove-book-description": "Cliccando su “CONFERMA” rimuoverai questo libro dal tuo Scaffale.\nSei sicuro?",
"pages-label": "%s PAGINE",
Expand All @@ -122,7 +127,6 @@
"field-cannot-be-empty-error": "Questo campo non può essere vuoto",
"invalid-ISBN-format-error": "Formato del ISBN non valido",
"camera-error": "Si è verificato un errore con la fotocamera: %s",
"unknown-error": "errore sconosciuto",
"enter-loaned-title-label": "Inserisci il titolo del libro in prestito.",
"enter-title-your-book-label": "Inserisci il titolo del tuo libro.",
"enter-bookcase-name-label": "Inserisci il nome dello scaffale.",
Expand Down Expand Up @@ -153,6 +157,7 @@
"delete-bookcase-description": "Cliccando su “CONFERMA” eliminerai il scaffale %s.\nSei sicuro?",
"delete-books-title": "Eliminare libri",
"delete-books-description": "Cliccando su “CONFERMA” eliminerai i libri selezionati in questo scaffale.\nSei sicuro?",
"all-books-already-inserted": "Tutti i libri registrati sono già stati aggiunti a questo scaffale.",
"books-added-successfully-snackbar": "Libro aggiunto con successo.\nAttendere fino al ritorno alla pagina precedente.",
"select-books-title": "Seleziona i libri",
"selected-books-quantity-label": "Libri selezionati: %s",
Expand All @@ -178,6 +183,9 @@
"contact-required-field": "Contatto *",
"observation-optional-field": "Osservazione (opzionale)",
"loan-date-required-field": "Data del prestito *",
"loan-notification-title": "Ehi, il tuo libro sta per tornare!",
"loan-notification-body": "Ciao! Solo un promemoria per ricordarti che è ora che %s0 restituisca il libro %s1 che hai prestato il giorno %s2.",
"loan-insertion-success-snackbar": "Prestito inserito con successo!",
"devolution-date-required-field": "Data di restituzione *",
"send-button": "Inviare",
"contact-selected-label": "Contatto selezionato",
Expand Down Expand Up @@ -243,5 +251,34 @@
"book-on-loan-label": "in prestito",
"book-on-reading-label": "in lettura",
"previous-month-tooltip": "Mese precedente",
"next-month-tooltip": "Mese successivo"
"next-month-tooltip": "Mese successivo",
"error-rest-client-connection-timeout": "La connessione al server è scaduta. Controlla la tua connessione internet e riprova: %s",
"error-rest-client-receive-timeout": "Il server ha impiegato troppo tempo per rispondere. Verifica la qualità della connessione e riprova: %s",
"error-rest-client-not-found": "La risorsa cercata non è stata trovata. Verifica i termini di ricerca o prova una query diversa: %s",
"error-rest-client-socket-exception": "Errore di connessione di rete rilevato. Controlla la tua connessione internet e riprova: %s",
"error-invalid-isbn": "Il formato dell'ISBN non è valido. Inserisci un numero ISBN valido (10 o 13 cifre): %s",
"error-unknown": "Si è verificato un errore imprevisto. Riprova più tardi o contatta il supporto: %s",
"error-auth-user-not-found": "Impossibile accedere. Verifica che la tua email sia registrata o iscriviti se non hai ancora un account: %s",
"error-auth-wrong-password": "Password non corretta. Verifica le tue credenziali e riprova: %s",
"error-auth-invalid-email": "Formato email non valido. Inserisci un indirizzo email valido: %s",
"error-auth-account-disabled": "Il tuo account è stato temporaneamente disabilitato. Contatta l'assistenza per ricevere aiuto: %s",
"error-auth-too-many-requests": "Troppi tentativi di accesso. Attendi alcuni minuti e riprova: %s",
"error-auth-operation-not-allowed": "Questo metodo di autenticazione non è disponibile al momento. Riprova più tardi: %s",
"error-auth-network-request-failed": "Connessione persa. Verifica la tua connessione internet e riprova: %s",
"error-auth-internal-error": "Qualcosa è andato storto. Se il problema persiste, contatta l'assistenza: %s",
"error-storage-invalid-value": "Problema rilevato nel salvataggio dei dati. Prova a disconnetterti e riconnetterti: %s",
"error-storage-write-failed": "Impossibile salvare le tue modifiche. Verifica lo spazio di archiviazione e riprova: %s",
"error-storage-read-failed": "Impossibile caricare i tuoi dati. Verifica la tua connessione internet e riprova: %s",
"error-local-database-conversion-failed": "Errore nell'elaborazione dei dati dal database. %s",
"error-local-database-not-null-constraint": "Un campo obbligatorio è vuoto. %s",
"error-local-database-open-failed": "Impossibile aprire il database. %s",
"error-local-database-operation-failed": "Operazione del database fallita durante lettura, scrittura o aggiornamento. %s",
"error-local-database-unique-constraint": "Questo record esiste già nel database. %s",
"notification-channel-loan-description": "Canale che notifica quando è il momento di ricevere il libro prestato.",
"notification-channel-loan-label": "Prestiti",
"notification-channel-read-description": "Canale che notifica quando è il momento della lettura.",
"notification-channel-read-label": "Letture",
"error-platform-permission-denied": "Permesso negato: %s",
"error-platform-permission-permanently-denied": "Permesso negato permanentemente. Apri le impostazioni per concederlo: %s",
"error-platform-unsupported": "Operazione non supportata su questo dispositivo: %s"
}
Loading