Feat/refonte UI#100
Conversation
…ar-team#88) Replace Capture::from_file with File::open + Capture::from_raw_fd so that libpcap receives a FILE* instead of a raw path string, bypassing encoding issues in pcap_open_offline for paths containing spaces, accents or special characters.
Sur Windows, pcap_open_offline utilise l'API narrow string (ANSI) qui ne supporte pas les caractères spéciaux/accentués. On utilise GetShortPathNameW pour obtenir le chemin court 8.3 (ASCII) avant de le passer à libpcap.
…ort NixOS
UI / Design
- Remontée globale de palette : fonds plus clairs (#282838 app, #363648 panneaux,
#2c2c3a champs) avec harmonisation des champs de saisie sur tous les panneaux
- Micro-interactions coordonnées : retour visuel scale sur boutons/chips,
easing uniforme (cubic-bezier(0.25,1,0.5,1)) partout
- Support prefers-reduced-motion via règle CSS globale
- TopBar, StatusBar, BottomLong, widgets status NavBar restylés
- Correction contraste en-têtes tableau (BottomLong)
- Animation d'entrée des lignes dans le tableau de paquets
- Correction débordement IPv6 dans InterfaceStatus (troncature + ellipsis)
- Animation de pulsation du point connecté + correctif alignement dans interfaceSelector
- Panneaux latéraux (Config, Import, Filtre) : animation slide-in harmonisée
- NetworkGraph : correction couleur texte hint, bouton Annuler corrigé,
animations hover/active sur les contrôles du graphe
Dialogues personnalisés (remplace les dialogues natifs Tauri)
- QuitDialog : modale Vue personnalisée pour la confirmation de fermeture
- ErrorDialog : dialogue d'erreur personnalisé écoutant l'événement 'show-error' ;
détecte les erreurs CAP_NET_RAW et affiche la commande setcap copiable + hint NixOS
Filtre BPF
- Correctif : le filtre n'était appliqué qu'au démarrage de la capture ;
redémarre maintenant automatiquement la capture si elle est active
- Correctif : set_filter("") efface désormais le filtre (None) au lieu de
passer une chaîne vide à pcap
- Correctif : canApply ne bloque plus sur le prévisualisation vide (permet d'effacer)
- Correctif : état du panneau Filtre préservé entre ouverture/fermeture
Gestion des erreurs
- capture.ts : remplacement de message() de @tauri-apps/plugin-dialog par
document.dispatchEvent('show-error') pour tous les types d'erreurs de capture
NixOS / shell.nix
- Ajout de libcap dans buildInputs (fournit setcap/getcap)
- Ajout d'un rappel shellHook pour la commande setcap CAP_NET_RAW
README
- Correction du nom du binaire (sonar-desktop-app → sonar)
- Ajout d'une section NixOS avec la dépendance libcap et les instructions setcap
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! Cette pull request réalise une refonte complète de l'interface utilisateur, transformant l'apparence et la convivialité de l'application avec un thème sombre moderne et des composants visuels cohérents. Elle intègre des décorations de fenêtre personnalisées et des icônes SVG pour une navigation intuitive. Parallèlement, des améliorations significatives ont été apportées à la gestion des fichiers PCAP pour garantir une compatibilité optimale sur différentes plateformes, et de nouveaux dialogues personnalisés gèrent les confirmations de sortie et les rapports d'erreurs de manière plus élégante et informative. Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Changelog
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
Cette pull request introduit une refonte majeure de l'interface utilisateur, passant à une fenêtre sans cadre avec des contrôles personnalisés et un thème visuel moderne et cohérent. De nombreux composants ont été redessinés, et de nouveaux dialogues personnalisés pour les erreurs et la confirmation de fermeture améliorent considérablement l'expérience utilisateur. La logique backend pour l'importation de fichiers pcap a également été rendue plus robuste pour les chemins de fichiers non-ASCII sur Windows et Unix. J'ai ajouté deux suggestions dans le code backend pour améliorer la maintenabilité et corriger un bug potentiel dans la gestion des chemins de fichiers sous Windows.
| unsafe { GetShortPathNameW(wide.as_ptr(), buf.as_mut_ptr(), len) }; | ||
| // Retire le null-terminator | ||
| String::from_utf16_lossy(&buf[..len as usize - 1]) |
There was a problem hiding this comment.
L'implémentation actuelle pour Windows ignore la valeur de retour de GetShortPathNameW (ligne 54), qui indique le nombre de caractères réellement écrits dans le buffer. À la place, elle utilise len - 1 (ligne 56), où len est la capacité du buffer. C'est potentiellement dangereux. Si GetShortPathNameW échoue (retourne 0) ou écrit moins de caractères que prévu, vous pourriez soit paniquer, soit lire des données invalides. Il est plus sûr d'utiliser la longueur retournée par l'appel unsafe pour découper le buffer.
| unsafe { GetShortPathNameW(wide.as_ptr(), buf.as_mut_ptr(), len) }; | |
| // Retire le null-terminator | |
| String::from_utf16_lossy(&buf[..len as usize - 1]) | |
| let n_written = unsafe { GetShortPathNameW(wide.as_ptr(), buf.as_mut_ptr(), len) }; | |
| if n_written > 0 && n_written < len { | |
| String::from_utf16_lossy(&buf[..n_written as usize]) | |
| } else { | |
| file_path.to_string() | |
| } |
| unsafe { Capture::from_raw_fd(fd) }.map_err(|e| { | ||
| CaptureStateError::Import(PcapImportError::OpenFileError( | ||
| file_path.to_string(), | ||
| e.to_string(), | ||
| )) | ||
| }) |
There was a problem hiding this comment.
Ce bloc de mappage d'erreur est répété à l'identique dans les autres branches de compilation conditionnelle (lignes 62-67 et 72-77). Pour améliorer la lisibilité et la maintenabilité, vous pourriez extraire cette logique dans une closure locale et la réutiliser. Cela éviterait la duplication de code.
No description provided.