Sharrit/README.md
Bruno Charest 7277342d4a docs: Comprehensive README update with new features and architecture details
- Add extensive documentation for offline mode, sync, collections, and dashboard features
- Document new Material You theming, OLED mode, and widget capabilities
- Include detailed sections on metadata extraction, Markdown editor, and import/export
- Update technology stack versions (Kotlin 2.0.0, Hilt 2.51.1, Retrofit 2.11.0, Room 2.6.1)
- Simplify installation and compilation instructions
- Add user guide with first-time setup and
2026-01-29 13:14:47 -05:00

263 lines
9.2 KiB
Markdown

# 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.
![Tech Stack](https://img.shields.io/badge/Kotlin-7F52FF?style=flat&logo=kotlin&logoColor=white)
![Android](https://img.shields.io/badge/Android-3DDC84?style=flat&logo=android&logoColor=white)
![Jetpack Compose](https://img.shields.io/badge/Jetpack%20Compose-4285F4?style=flat&logo=jetpack-compose&logoColor=white)
![License](https://img.shields.io/badge/License-MIT-yellow.svg)
---
## 📱 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
---
<div align="center">
<sub>Fait avec ❤️ pour la communauté Shaarli</sub>
</div>