# ShaarIt **ShaarIt** est un client Android natif pour [Shaarli](https://github.com/shaarli/Shaarli), le gestionnaire de favoris auto-hébergé. Développé avec les technologies Android modernes, il offre une expérience mobile fluide pour gérer vos liens.     --- ## 📱 Fonctionnalités ### 🔐 Authentification - Connexion sécurisée à votre instance Shaarli auto-hébergée (API v1) - Stockage chiffré des tokens JWT et secrets API via `EncryptedSharedPreferences` - Génération automatique de tokens JWT avec algorithme HS512 ### 📚 Gestion des Favoris - **Flux infini** : Défilement continu avec chargement progressif (Paging 3) - **Recherche avancée** : Recherche locale avec FTS4 (full-text search) et filtrage par tags - **Mode hors-ligne** : Consultation et modification des liens même sans connexion - **Ajout rapide** : Création de liens privés/publics avec description, tags et extraction automatique de métadonnées - **Édition** : Modification complète des liens existants avec éditeur Markdown - **Suppression** : Gestion facile des favoris avec file d'attente de sync - **Détection des doublons** : Alerte lors de l'ajout d'un lien existant avec option de mise à jour - **Liens épinglés** : Mise en avant des liens importants ### 🏷️ Gestion des Tags - Vue dédiée pour parcourir tous les tags - Compteur d'utilisation par tag - Filtrage rapide du flux par tag - Tags favoris pour accès rapide ### 📁 Collections - Organisation des liens en collections - Collections intelligentes avec filtres automatiques - Vue grille adaptative pour les collections ### 📝 Éditeur Markdown - Édition avec prévisualisation en temps réel - Mode édition/prévisualisation/split - Mode lecture focus sans distraction - Barre d'outils de formatage ### 🌐 Extraction de Métadonnées - Extraction automatique des OpenGraph (titre, description, image) - Détection du type de contenu (article, vidéo, image, audio, code, etc.) - Estimation du temps de lecture - Extraction du nom du site ### 📊 Tableau de Bord - Statistiques d'utilisation (liens totaux, cette semaine, ce mois) - Temps de lecture total et moyen - Répartition par type de contenu - Tags les plus utilisés - Graphique d'activité sur 30 jours ### 💾 Import/Export - Export JSON (format complet avec métadonnées) - Export CSV (compatible Excel) - Export HTML (format Netscape/Chrome bookmarks) - Import depuis JSON (export ShaarIt) - Import depuis HTML (bookmarks Chrome/Firefox) ### 🔄 Synchronisation - Synchronisation automatique en arrière-plan (WorkManager) - Mode offline-first : modifications en attente - Résolution de conflits intelligente - File d'attente des opérations ### 🔗 Intégration système - **Share Intent Android** : Sauvegarde rapide depuis n'importe quelle app - **App Shortcuts** : Accès rapide via appui long sur l'icône (Ajouter, Aléatoire, Rechercher, Collections) - **Quick Settings Tile** : Tuile pour ajouter rapidement un lien - **Widget** : Widget d'accueil affichant les liens récents - Ouverture des liens dans le navigateur par défaut ### 🎨 Interface Utilisateur - **Material You (Monet)** : Couleurs dynamiques basées sur le fond d'écran (Android 12+) - **Mode OLED** : Noir pur pour les écrans AMOLED - **Design premium** : Thème sombre moderne avec dégradés - **Material Design 3** : Composants UI natifs Android - **Animations fluides** : Transitions et effets visuels - **Trois modes d'affichage** : Liste détaillée, grille compacte, ou vue compacte - **Pull-to-refresh** : Actualisation du flux par glissement --- ## 🛠️ Stack Technique | Catégorie | Technologie | |-----------|-------------| | **Langage** | Kotlin 2.0.0 | | **UI** | Jetpack Compose + Material Design 3 | | **Architecture** | Clean Architecture + MVVM | | **Injection de dépendances** | Dagger Hilt 2.51.1 | | **Réseau** | Retrofit 2.11.0 + Moshi 1.15.1 + OkHttp 4.12.0 | | **Base de données locale** | Room 2.6.1 | | **Pagination** | Paging 3 | | **Concurrence** | Coroutines & Flow | | **Background work** | WorkManager 2.9.0 | | **Stockage sécurisé** | AndroidX Security Crypto | | **Navigation** | Navigation Compose | | **Compilation** | Gradle 8.0+ avec KSP | ### Compatibilité - **minSdk**: 24 (Android 7.0) - **targetSdk**: 34 (Android 14) - **compileSdk**: 34 - **JDK requis**: 17+ --- ## 📥 Installation ### Prérequis utilisateur - Un serveur Shaarli auto-hébergé (v0.12+) avec l'API v1 activée - Un appareil Android 7.0+ ou un émulateur ### Obtenir l'APK #### Méthode 1 : Téléchargement direct Récupérez le dernier APK depuis la section [Releases](../../releases). #### Méthode 2 : Compilation depuis les sources 1. Clonez le repository : ```bash git clone https://github.com/votre-username/ShaarIt.git cd ShaarIt ``` 2. Compilez l'APK debug : ```bash ./gradlew assembleDebug ``` L'APK sera généré dans `app/build/outputs/apk/debug/` 3. Ou compilez l'APK release (nécessite une configuration de signature) : ```bash ./gradlew assembleRelease ``` --- ## 📖 Guide d'utilisation ### Première configuration 1. Ouvrez l'application 2. Entrez l'URL de votre instance Shaarli 3. Entrez votre nom d'utilisateur et mot de passe 4. L'application générera automatiquement les tokens API nécessaires ### Ajouter un lien - **Via l'app** : Appuyez sur le bouton + et entrez l'URL - **Via le partage Android** : Partagez n'importe quelle URL vers ShaarIt depuis n'importe quelle app - **Via Quick Settings** : Ajoutez la tuile ShaarIt dans vos paramètres rapides ### Organiser vos liens - Utilisez les tags pour catégoriser vos liens - Créez des collections pour regrouper des liens par thème - Épinglez les liens importants pour un accès rapide ### Mode hors-ligne - Tous les liens sont stockés localement dans la base de données Room - Les modifications sont synchronisées automatiquement quand la connexion est disponible - Consultez vos favoris même sans connexion Internet --- ## 🏗️ Architecture Le projet suit les principes de la **Clean Architecture** avec une séparation claire des couches : ``` ├── data/ # Couche de données │ ├── api/ # API Retrofit │ ├── local/ # Base de données Room │ │ ├── dao/ # Data Access Objects │ │ ├── entity/ # Entités Room │ │ └── database/ # Configuration de la DB │ ├── sync/ # Synchronisation │ ├── export/ # Import/Export │ └── repository/ # Implémentations des repositories ├── domain/ # Couche domaine │ ├── model/ # Modèles métier │ └── repository/ # Interfaces des repositories ├── presentation/ # Couche présentation │ ├── feed/ # Écran principal │ ├── add/ # Ajout de liens │ ├── edit/ # Édition de liens │ ├── tags/ # Gestion des tags │ ├── collections/ # Collections │ ├── dashboard/ # Tableau de bord │ ├── settings/ # Paramètres │ └── nav/ # Navigation └── core/ # Utilitaires ├── di/ # Injection de dépendances ├── network/ # Configuration réseau └── storage/ # Stockage local ``` --- ## 🚀 Roadmap - [x] Synchronisation en arrière-plan avec WorkManager - [x] Mode hors-ligne avec Room - [x] Éditeur Markdown - [x] Extraction de métadonnées OpenGraph - [x] Collections d'organisation - [x] Liens épinglés - [x] Widget d'accueil - [x] App Shortcuts - [x] Quick Settings Tile - [x] Tableau de bord analytique - [x] Import/Export - [x] Material You (Monet) - [ ] Recherche avancée avec filtres multiples - [ ] Suggestions de tags par IA - [ ] Mode lecture sans distraction pour les articles - [ ] Partage de collections --- ## 🤝 Contribution Les contributions sont les bienvenues ! N'hésitez pas à : - Ouvrir une issue pour signaler un bug ou suggérer une fonctionnalité - Soumettre une pull request - Améliorer la documentation ### Signaler un bug 1. Vérifiez que le bug n'a pas déjà été signalé 2. Ouvrez une issue avec : - Description claire du problème - Étapes pour reproduire - Comportement attendu vs réel - Version Android et de l'app - Logs si disponibles --- ## 📝 Licence Ce projet est sous licence MIT. Voir le fichier [LICENSE](LICENSE) pour plus de détails. --- ## 🙏 Remerciements - [Shaarli](https://github.com/shaarli/Shaarli) - Le projet original de gestionnaire de favoris - [Jetpack Compose](https://developer.android.com/jetpack/compose) - Framework UI moderne d'Android - La communauté open source pour les excellentes bibliothèques utilisées ---