4.4 KiB
Perfetto Fabio — suddividere gli hybrid in device, user e common è non solo possibile, ma è la scelta MIGLIORE per ottenere:
- controllo totale
- zero ricalcoli inutili
- zero ambiguità
- zero conflitti tra locale e remoto
- una UI pulita senza “@”
E soprattutto: ti permette di modellare esattamente la semantica che vuoi.
Ti costruisco ora la struttura definitiva, già pronta per essere usata in Aves, con i tre tipi di hybrid che vuoi.
🎯 OBIETTIVO
Ogni cartella può essere:
- Locale pura
- Remota pura
- Hybrid → ma con tre varianti:
- Hybrid-Device (locale + remoto stesso device)
- Hybrid-User (locale + remoto stesso user)
- Hybrid-Common (locale + remoto “common”)
E tutto questo senza usare @ nel nome visuale, ma solo come logica interna.
🟩 MODELLO DEFINITIVO DELLA TABELLA folders
Eccolo, completo e pulito:
CREATE TABLE IF NOT EXISTS folders (
id INTEGER PRIMARY KEY AUTOINCREMENT,
-- percorso canonico
path TEXT NOT NULL, -- locale: '/storage/...', remoto: 'DCIM', ibrido: '/storage/...'
-- identificazione remota
user TEXT, -- 'fabio', 'common', 'device123'
device_id TEXT, -- per distinguere device diversi dello stesso user
-- flags
is_remote INTEGER NOT NULL DEFAULT 0, -- 0=locale, 1000=remoto
hybrid_type INTEGER NOT NULL DEFAULT 0, -- 0=none, 1=device, 2=user, 3=common
-- tipo album (Aves + estensioni)
album_type INTEGER NOT NULL DEFAULT 0, -- 0=regular,1=app,2=special,3=vault,4=remote,5=hybrid
-- ordinamento globale
priority INTEGER NOT NULL DEFAULT 0,
-- nome visuale (senza @)
display_name TEXT
);
CREATE INDEX IF NOT EXISTS idx_folders_path ON folders(path);
CREATE INDEX IF NOT EXISTS idx_folders_is_remote ON folders(is_remote);
CREATE INDEX IF NOT EXISTS idx_folders_priority ON folders(priority);
CREATE INDEX IF NOT EXISTS idx_folders_hybrid ON folders(hybrid_type);
🟦 COME FUNZIONA LA LOGICA DEI TRE TIPI DI HYBRID
1️⃣ Hybrid-Device
Locale + remoto dello stesso device.
Esempio:
- locale:
/storage/emulated/0/DCIM/Camera - remoto:
DCIM/Cameracondevice_id = pixel7
Tabella:
is_remote = 1000
hybrid_type = 1
user = NULL
device_id = 'pixel7'
2️⃣ Hybrid-User
Locale + remoto dello stesso user (ma device diverso).
Esempio:
- locale:
/storage/emulated/0/DCIM/Camera - remoto:
DCIM/Cameraconuser = fabio
Tabella:
is_remote = 1000
hybrid_type = 2
user = 'fabio'
device_id = NULL
3️⃣ Hybrid-Common
Locale + remoto “common” (cartella condivisa tra device/user).
Esempio:
- locale:
/storage/emulated/0/Shared - remoto:
Sharedconuser = common
Tabella:
is_remote = 1000
hybrid_type = 3
user = 'common'
device_id = NULL
🟧 COME SI LEGGE path (senza @)
Tu hai detto:
la visualizzazione del nome deve essere sempre senza @ o @user
Perfetto.
Quindi:
pathcontiene il percorso “pulito”useredevice_idcontengono l’identitàhybrid_typedice come interpretarlo
👉 La UI mostra sempre display_name = basename(path)
👉 La logica interna usa user/device/common
🟩 COME SI POPOLA LA TABELLA (regole chiare)
✔ Locale puro
is_remote = 0
hybrid_type = 0
user = NULL
device_id = NULL
✔ Remoto puro
is_remote = 1000
hybrid_type = 0
user = 'fabio' | 'common' | 'device123'
device_id = 'pixel7' (se serve)
✔ Hybrid-Device
is_remote = 1000
hybrid_type = 1
device_id = 'pixel7'
✔ Hybrid-User
is_remote = 1000
hybrid_type = 2
user = 'fabio'
✔ Hybrid-Common
is_remote = 1000
hybrid_type = 3
user = 'common'
🟦 MANCANO I GRUPPI DI AVES?
Tu hai chiesto:
mancano i raggruppamenti che aves già fa e la sua indicizzazione dentro i gruppi. Sarebbe bene inserirli?
Risposta: SÌ, assolutamente.
Aves raggruppa gli album in:
- Special (Camera, Download, Screenshots)
- App
- Regular
- Vault
E tu devi aggiungere:
- Remote
- Hybrid
👉 Questo è esattamente il campo album_type.
🟩 PROSSIMO STEP (scegli tu)
Ora che abbiamo la tabella perfetta, possiamo procedere con:
- Popolare la tabella dai remoti
- Popolare la tabella dai locali
- Patch AlbumSource per usare la tabella folders
- Patch CollectionSource per ignorare i remoti
Dimmi quale vuoi fare come prossimo passo.