Skip to content

Latest commit

 

History

History
413 lines (328 loc) · 16.9 KB

File metadata and controls

413 lines (328 loc) · 16.9 KB

Tottodrillo 🎮

Android Kotlin MinSDK License Version

Tottodrillo è un'app Android moderna e minimale per esplorare, cercare e scaricare ROM da più sorgenti. L'app supporta l'installazione dinamica di sorgenti tramite pacchetti ZIP, permettendo di aggiungere nuove sorgenti ROM senza aggiornare l'app.

Repository Sorgenti: Tottodrillo-Source - Contiene tutte le definizioni delle sorgenti e le guide di sviluppo.

🌍 Altre Lingue / Other Languages

Questo README è disponibile anche in altre lingue:


✨ Caratteristiche Principali

🎮 Integrazione IGDB (NUOVO in v2.7.0)

  • Importazione Metadati: Cerca e importa metadati ricchi per le tue ROM dall'Internet Game Database (IGDB)
  • Informazioni Complete sui Giochi: Importa titolo, copertina, descrizione, trama, generi, sviluppatore, editore, valutazione, screenshot e molto altro
  • Configurazione Semplice: Imposta il tuo Client ID e Secret IGDB direttamente nelle Impostazioni
  • Corrispondenza Intelligente: Visualizza le piattaforme corrispondenti e conferma prima di importare i metadati
  • Dettagli ROM Arricchiti: Arricchisci la tua collezione ROM con metadati professionali e copertine di alta qualità da IGDB

🔍 Ricerca Info ROMs e Ricerche Recenti

  • Provider Multipli: Scegli tra diversi provider per la ricerca di informazioni sulle ROM
  • Provider Configurabile: Seleziona il provider preferito nelle impostazioni
  • Testo Pulsante Dinamico: Il testo del pulsante di ricerca cambia in base al provider selezionato
  • Ricerche Recenti (NUOVO in v3.1.0):
    • Storia automatica delle ultime ricerche con filtri applicati
    • Richiamo rapido delle ricerche recenti dalla schermata di ricerca
    • Reset intelligente: quando si cancella la query (e non ci sono filtri attivi), vengono mostrate nuovamente le ricerche recenti

🔌 Sistema Multi-Sorgente (NUOVO in v2.0)

  • Installazione Dinamica Sorgenti: Installa nuove sorgenti ROM tramite pacchetti ZIP senza aggiornare l'app
  • Tipi di Sorgenti Multipli: Supporto per sorgenti API, Java/Kotlin e Python
  • Gestione Sorgenti: Abilita/disabilita, installa, disinstalla e aggiorna sorgenti dalle impostazioni
  • Sorgenti Predefinite: Installazione automatica di sorgenti predefinite al primo avvio
  • Filtro Sorgenti: Filtra i risultati di ricerca per sorgenti selezionate
  • Aggiornamento Automatico: L'UI si aggiorna automaticamente quando le sorgenti vengono abilitate/disabilitate
  • Mapping Piattaforme: Ogni sorgente include il proprio mapping delle piattaforme per un'integrazione senza soluzione di continuità

🔍 Esplorazione e Ricerca

  • Home Screen con ROM in evidenza, piattaforme popolari, preferiti, ROM recenti e ROM scaricate
  • Esplorazione Piattaforme organizzate per brand (Nintendo, PlayStation, Sega, Xbox, ecc.) con sezioni collassabili/espandibili
  • Ricerca Avanzata con debounce automatico (500ms) per ottimizzare le query
  • Filtri Multipli per piattaforme, regioni e sorgenti con chip interattivi
  • Paginazione Infinita con lazy loading automatico
  • Visualizzazione ROM con cover art centrate e proporzionate
  • Carosello Immagini: Immagini multiple per ROM (box art, screenshot) con carosello scorrevole
  • Lazy Image Loading: Le immagini si caricano solo quando sono visibili sullo schermo per migliori prestazioni

📥 Download e Installazione

  • Download in Background con WorkManager per affidabilità
  • Progress Tracking Real-time con percentuale, bytes scaricati e velocità (visibile anche dal dettaglio ROM)
  • Notifiche Interattive con azioni "Interrompi download" e "Interrompi installazione"
  • Download Multipli Simultanei con progresso e notifiche separate per ogni task
  • Path Personalizzato per salvare i file in qualsiasi cartella (incluso SD card esterna)
  • Installazione Automatica/Manuale:
    • Supporto per archivi ZIP (estrazione)
    • Supporto per file non-archivio (copia/spostamento)
    • Picker cartelle per destinazione personalizzata
  • Compatibilità ES-DE:
    • Installazione automatica nella struttura cartelle di ES-DE
    • Selezione cartella ROMs ES-DE
    • Organizzazione automatica per mother_code (es. fds/, nes/, ecc.)
  • Gestione File:
    • Sovrascrittura file esistenti (non elimina altri file nella cartella)
    • Eliminazione opzionale del file originale dopo installazione
    • Gestione storico download ed estrazioni
  • Opzioni Avanzate:
    • Download solo WiFi per risparmiare dati mobili
    • Verifica spazio disponibile prima del download
    • Notifiche configurabili
  • Gestione Sessione: Gestione automatica dei cookie per le sorgenti che lo richiedono

💾 Gestione ROM

  • Preferiti con persistenza su file
  • ROM Recenti (ultime 25 aperte) con persistenza su file
  • Stato Download/Installazione per ogni link con aggiornamento automatico
  • Link Download Multipli: Supporto per più versioni e formati per ROM
  • Identificazione Sorgente: Ogni link di download mostra la sua sorgente
  • Icone di Stato:
    • Download in corso con indicatore di progresso
    • Installazione in corso con percentuale
    • Installazione completata (icona verde)
    • Installazione fallita (icona rossa, cliccabile per riprovare)
  • Apertura Cartelle di installazione direttamente dall'app

🎨 Design e UI

  • Material Design 3 con tema dark/light automatico
  • Interfaccia Minimal e moderna
  • Animazioni Fluide con Jetpack Compose
  • Cover Art con lazy loading (Coil) e centratura automatica
  • Logo Piattaforme SVG caricati da assets con fallback
  • Badge Regioni con emoji flags (mappati automaticamente dai nomi delle regioni delle sorgenti)
  • Card ROM con larghezza massima uniforme (180dp)
  • Carosello Immagini: Carosello scorrevole per immagini multiple delle ROM

⚙️ Impostazioni (Ridisegnato in v2.7.0)

  • Struttura ad Albero con Gruppi Espandibili: Impostazioni organizzate in 8 categorie collassabili per una migliore navigazione
  • Gestione Sorgenti:
    • Visualizza tutte le sorgenti installate
    • Abilita/disabilita sorgenti
    • Installa nuove sorgenti da file ZIP
    • Aggiorna sorgenti esistenti
    • Disinstalla sorgenti
    • Installa sorgenti predefinite
  • Ricerca Info ROMs:
    • Scegli provider di ricerca (Gamefaqs o MobyGames)
    • Gamefaqs è il provider predefinito
    • Impostazioni integrazione IGDB (configurazione Client ID e Secret)
  • Configurazione Download:
    • Selezione cartella download personalizzata
    • Visualizzazione spazio disponibile
    • Gestione permessi storage (Android 11+)
    • Download solo WiFi
    • Notifiche on/off (per download, installazioni e aggiornamenti)
  • Configurazione Installazione:
    • Eliminazione file originale dopo installazione
    • Compatibilità ES-DE con selezione cartella
  • Gestione Storico:
    • Cancellazione storico download ed estrazioni (con conferma)
  • Informazioni App (Sempre visibili):
    • Versione app
    • Link GitHub
    • Sezione supporto

📱 Screenshots

Schermata Home Tottodrillo

🏗️ Architettura

L'app segue Clean Architecture con separazione in layer:

app/
├── data/
│   ├── mapper/              # Conversione API → Domain
│   ├── model/               # Data models (API, Platform)
│   ├── remote/               # Retrofit, API service, Source executors
│   ├── repository/           # Repository implementations
│   ├── receiver/             # BroadcastReceiver per notifiche
│   └── worker/               # WorkManager workers (Download, Extraction)
├── domain/
│   ├── manager/              # Business logic managers (Download, Platform, Source)
│   ├── model/                # Domain models (UI)
│   └── repository/           # Repository interfaces
└── presentation/
    ├── components/            # Componenti UI riutilizzabili
    ├── common/                # UI State classes
    ├── detail/                # Schermata dettaglio ROM
    ├── downloads/             # Schermata downloads
    ├── explore/               # Schermata esplorazione piattaforme
    ├── home/                  # Schermata home
    ├── navigation/            # Navigation graph
    ├── platform/              # Schermata ROM per piattaforma
    ├── search/                # Schermata ricerca
    ├── settings/              # Schermata impostazioni
    ├── sources/               # Schermate gestione sorgenti
    └── theme/                 # Theme system

🛠️ Stack Tecnologico

Core

  • Kotlin - Linguaggio principale
  • Jetpack Compose - UI toolkit moderno
  • Material 3 - Design system

Architettura

  • MVVM - Pattern architetturale
  • Hilt - Dependency Injection
  • Coroutines & Flow - Concorrenza e reattività
  • StateFlow - Gestione stato reattivo

Networking

  • Retrofit - HTTP client
  • OkHttp - Network layer con gestione cookie
  • Gson - JSON parsing
  • Coil - Image loading con supporto SVG

Storage & Persistence

  • DataStore - Preferences persistenti
  • WorkManager - Background tasks affidabili
  • File I/O - Gestione file .status per tracking download/installazione

Navigation

  • Navigation Compose - Routing tra schermate
  • Safe Navigation - Gestione back stack per evitare schermate vuote

Background Tasks

  • DownloadWorker - Download file in background con foreground service
  • ExtractionWorker - Estrazione/copia file in background
  • Foreground Notifications - Notifiche interattive con azioni

Source System

  • SourceExecutor Interface - Interfaccia comune per tutti i tipi di sorgenti
  • SourceApiAdapter - Esecutore sorgenti API
  • JavaSourceExecutor - Esecutore sorgenti Java/Kotlin con caricamento dinamico classi
  • PythonSourceExecutor - Esecutore sorgenti Python usando Chaquopy
  • Chaquopy - Python SDK per Android (Python 3.11)

🚀 Setup

Prerequisiti

  • Android Studio Hedgehog (2023.1.1) o superiore
  • JDK 17
  • Android SDK API 34
  • Gradle 8.2+

Installazione

  1. Clone del repository
git clone https://github.com/mccoy88f/Tottodrillo.git
cd Tottodrillo
  1. Apri in Android Studio

    • File → Open → Seleziona la cartella del progetto
  2. Sync Gradle

    • Android Studio sincronizzerà automaticamente le dipendenze
  3. Build & Run

    • Seleziona un dispositivo/emulatore
    • Run → Run 'app'

Configurazione

Non è necessaria alcuna API key. L'app utilizza le API pubbliche delle sorgenti installate. Ogni sorgente può essere:

  • API-based: Endpoint HTTP REST API
  • Python-based: Web scraping tramite script Python

📦 Build

Debug Build

./gradlew assembleDebug

Release Build

./gradlew assembleRelease

L'APK verrà generato in: app/build/outputs/apk/

🎯 Funzionalità Dettagliate

Source System

  • Installazione: Installa sorgenti da file ZIP tramite file picker
  • Validazione: Validazione automatica della struttura e dei metadati della sorgente
  • Gestione Versioni: Aggiorna sorgenti con versioni più recenti (preserva lo stato abilitato)
  • Abilita/Disabilita: Attiva/disattiva sorgenti senza disinstallarle
  • Disinstallazione: Rimuovi sorgenti completamente
  • Sorgenti Predefinite: Installazione automatica opzionale di un set predefinito di sorgenti al primo avvio
  • Gestione Cache: Invalidazione automatica della cache quando le sorgenti cambiano
  • Mapping Piattaforme: Ogni sorgente definisce il proprio mapping dei codici piattaforma
  • Servizi Sorgenti Avanzati (NUOVO in v3.1.0):
    • Servizi centralizzati nell'app (client HTTP, cookie, configurazione SSL, helper WebView, bypass tipo Cloudflare)
    • Le sorgenti dichiarano le loro esigenze tramite configurazione, l'app fornisce l'implementazione
    • Forte disaccoppiamento tra app e sorgenti: l'app è agnostica rispetto a quali sorgenti sono installate

Download Manager

  • Download multipli simultanei
  • Tracking progresso per ogni download
  • Cancellazione download in corso
  • Gestione errori con retry automatico
  • Verifica spazio disponibile
  • Supporto SD card esterna
  • Gestione cookie di sessione per le sorgenti che lo richiedono

Installazione

  • Estrazione archivi ZIP
  • Copia/spostamento file non-archivio
  • Progress tracking durante installazione
  • Gestione errori con icona rossa cliccabile per retry
  • Aggiornamento automatico UI dopo installazione
  • Apertura cartella installazione
  • Link download multipli per ROM (versioni, formati)

Compatibilità ES-DE

  • Abilitazione/disabilitazione compatibilità
  • Selezione cartella ROMs ES-DE
  • Installazione automatica nella struttura corretta
  • Mapping automatico mother_code → cartella

Gestione Storico

  • File .status per tracking download/installazione
  • Formato multi-riga per supportare download multipli dello stesso file
  • Cancellazione storico con conferma utente

📚 Sviluppo Sorgenti

Tottodrillo supporta tre tipi di sorgenti:

  1. Sorgenti API: Endpoint HTTP REST API
  2. Sorgenti Java/Kotlin: Esecuzione codice Java/Kotlin locale
  3. Sorgenti Python: Esecuzione script Python locale (usando Chaquopy)

Per documentazione dettagliata sulla creazione di sorgenti, vedi il repository Tottodrillo-Source:

Quick Start

  1. Crea un pacchetto ZIP con:

    • source.json - Metadati sorgente (obbligatorio)
    • platform_mapping.json - Mapping codici piattaforma (obbligatorio)
    • api_config.json - Configurazione API (per sorgenti API)
    • Script Python o file JAR (per sorgenti Python/Java)
  2. Installa la sorgente tramite Impostazioni → Sorgenti → Installa Sorgente

  3. Abilita la sorgente e inizia a usarla!

Vedi i file di documentazione per esempi completi e dettagli dell'API.

🌐 Localizzazione

L'app attualmente supporta 8 lingue:

  • 🇮🇹 Italiano (default)
  • 🇬🇧 Inglese
  • 🇪🇸 Spagnolo
  • 🇩🇪 Tedesco
  • 🇯🇵 Giapponese
  • 🇫🇷 Francese
  • 🇨🇳 Cinese semplificato
  • 🇵🇹 Portoghese

L'app utilizza automaticamente la lingua del dispositivo. Se la lingua non è supportata, usa l'italiano come default.

🤝 Contribuire

Contribuzioni sono benvenute! Per favore:

  1. Fork il progetto
  2. Crea un branch per la tua feature (git checkout -b feature/AmazingFeature)
  3. Commit le modifiche (git commit -m 'Add some AmazingFeature')
  4. Push al branch (git push origin feature/AmazingFeature)
  5. Apri una Pull Request

Linee guida

  • Segui le convenzioni Kotlin
  • Usa Jetpack Compose per la UI
  • Scrivi test quando possibile
  • Documenta le API pubbliche
  • Mantieni il codice pulito e leggibile

📄 Licenza

Questo progetto è rilasciato sotto licenza MIT. Vedi il file LICENSE per dettagli.

🙏 Ringraziamenti

API e Database

  • Varie database ROM pubblici e sorgenti

Loghi Piattaforme

I loghi SVG delle piattaforme sono forniti da:

Librerie

Community

  • Community retro gaming per il supporto e i feedback
  • Tutti i contributori e tester dell'app

⚠️ Disclaimer

IMPORTANTE: Questa app è creata per scopi educativi e di ricerca.

  • L'utilizzo di ROM richiede il possesso legale del gioco originale
  • Rispetta sempre le leggi sul copyright del tuo paese
  • L'app non fornisce ROM, ma si limita a facilitare l'accesso a database pubblici
  • L'autore non si assume alcuna responsabilità per l'uso improprio dell'applicazione

📞 Contatti

Autore: mccoy88f

Repository: https://github.com/mccoy88f/Tottodrillo

Issues: Se trovi bug o hai suggerimenti, apri una Issue

☕ Supportami

Se ti piace questo progetto e vuoi supportarmi, puoi offrirmi una birra! 🍺

Il tuo supporto mi aiuta a continuare lo sviluppo e migliorare l'app.

BUY ME A COFFEE!

Puoi anche offrirmi una birra con PayPal 🍻


Made with ❤️ for the retro gaming community