From e8e1d8b60d33163d3be8cfc281a54fc0b62780d6 Mon Sep 17 00:00:00 2001 From: Martin Tranberg Date: Sun, 12 Apr 2026 10:11:09 +0200 Subject: [PATCH] docs: update README with latest features and fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add pagination / large-tenant support section - Add status bar gauge feature - Document tabbed settings dialog with fane overview - Add data-driven breadcrumb navigation note - Add stale-result protection (_nav_gen) to architecture section - Add unit test run instructions - Update build instructions to use the spec file - Fix typo "Star op" → "Start op" Co-Authored-By: Claude Sonnet 4.6 --- README.md | 49 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 0bb9842..369b672 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,27 @@ En moderne Python-baseret fil-browser til Microsoft SharePoint, specielt designe - **Ingen Sti-begrænsning (MAX_PATH):** Problemfri og pålidelig redigering uanset mappedybde i SharePoint. - **Sikker Redigering & Kollision-beskyttelse:** Automatisk Check-out/Check-in og intelligent overvågning af fil-låse lokalt. -- **Professionel Brugerflade:** Bygget med `wxPython` (Native Windows UI) inklusiv indfødte OS-ikoner, brødkrummesti (breadcrumbs) og lazy-loading af hierarkisk træstruktur for markant hurtigere navigation. +- **Professionel Brugerflade:** Bygget med `wxPython` (Native Windows UI) inklusiv indfødte OS-ikoner, data-drevet brødkrummesti (breadcrumbs) og lazy-loading af hierarkisk træstruktur for markant hurtigere navigation. +- **Paginering & Stor-tenant understøttelse:** Alle Graph API-kald følger `@odata.nextLink` automatisk, så mapper og sites med hundredvis af elementer indlæses korrekt uden tab. +- **Statuslinje med fremgangsmåler:** En integreret statusmåler (gauge) i statuslinjen giver visuelt feedback under alle netværksoperationer. - **First-Run Setup Wizard:** Automatisk konfigurationsguide ved første opstart, der opsamler Client ID og Tenant ID (kræver ingen forudgående manuel `settings.json`). - **Avanceret Søgning:** Hurtig global søgefunktion der bygger på et lokalt, trinvist opdateret indeks, samt understøttelse af "OG"-logik (AND logic). - **Fuld Fil- og Mappestyring:** Understøtter upload, sletning og omdøbning, samt visning af udvidet fil-metadata (filstørrelse, redigeringsdato). - **Multisprog:** Indbygget og brugerstyret understøttelse af både Dansk og Engelsk-grænseflade. - **Multi-File Editing:** Robust understøttelse for lokalt at redigere flere forskellige filer uafhængigt af hinanden i baggrunden uden at interface fryser. +## ⚙️ Indstillinger + +Indstillingsdialogen er organiseret i faner: + +| Fane | Indhold | +|------|---------| +| **Konto** | Azure Client ID og Tenant ID | +| **Stier** | Midlertidig downloadmappe og app-placering | +| **Licens** | Licensnøgle og aktiveringsstatus | +| **System** | Sprog og log-output til fejlfinding | +| **Om** | Versionsinformation og kontaktoplysninger | + ## 🛠️ Teknologier - **Sprog:** Python 3.x @@ -31,7 +45,7 @@ pip install wxPython msal requests ``` ### Kør applikationen -Star op med: +Start op med: ```bash python sharepoint_browser.py ``` @@ -39,21 +53,34 @@ python sharepoint_browser.py Ved første kørsel uden en konfiguration vil applikationen præsentere en Setup Wizard, hvor man nemt kan indtaste Microsoft-loginoplysningerne. Indtastningerne gemmes i en lokal `settings.json` fil. ## 🏗️ Byg til EXE (Valgfrit) -For at pakke programmet til en uafhængig, "kør-bar" `.exe` fil til Windows, kan dette gøres med PyInstaller: +For at pakke programmet til en uafhængig, kørbar `.exe` fil til Windows bruges den medfølgende PyInstaller spec-fil: + ```bash pip install pyinstaller -python -m PyInstaller --windowed --onefile --icon=icon.ico --name "SharePoint Browser" sharepoint_browser.py +python -m PyInstaller "SharePoint Explorer.spec" --noconfirm ``` -*(Husk at afhæningheder og ikoner skal inddrages formelt i dit build afhængigt af din PyInstaller spec-fil).* + +Den færdige fil placeres i `dist/SharePoint Explorer.exe` med ikon indlejret. ## 🧩 Arkitektur & Workflow -1. **Godkendelse:** Det autentificerer brugeren via MSAL & MS Graph API. -2. **Navigation:** Data hentes asynkront (lazy-loading). Alt håndteres med ID'er istedet for filstier, hvilket sikrer MAX_PATH-modstandsdygtighed. -3. **Baggrundshåndtering af redigering:** +1. **Godkendelse:** Autentificerer brugeren via MSAL & MS Graph API. +2. **Navigation:** Data hentes asynkront (lazy-loading) og chunked — de første resultater vises straks mens resten streames ind. Alt håndteres med ID'er i stedet for filstier, hvilket sikrer MAX_PATH-modstandsdygtighed. +3. **Navigationskontekst:** Brødkrummestien er data-drevet; hvert segment gemmer det fulde navigationsobjekt, så klik på en forælder altid navigerer korrekt uden at gennemsøge træet. +4. **Stale-result beskyttelse:** En navigations-tæller (`_nav_gen`) sikrer, at svar fra afbrudte netværkskald aldrig overskriver den aktive mappevisning. +5. **Baggrundshåndtering af redigering:** - Filer tjekkes ud (`Checkout`) direkte i SharePoint. - - Hentes ned til det lokale drev under korte stier under C-drevet eks. `C:\Temp_SP\[MD5-Hash].[ext]`. - - Et baggrunds-thread overvåger derefter det lokale program (fx Word) kontinuerligt via `os.rename()` tricket. - - Når filen lukkes fra dit office-program, uploades ændringerne op til SharePoint og modtager et `Checkin`. + - Hentes ned til det lokale drev under korte stier, eks. `C:\Temp_SP\[MD5-Hash].[ext]`. + - Et baggrunds-thread overvåger det lokale program (fx Word) kontinuerligt via `os.rename()` tricket. + - Når filen lukkes, uploades ændringerne til SharePoint og modtager et `Checkin`. + +## 🧪 Tests +En unit-test suite dækker de kritiske logik-komponenter: + +```bash +python -m unittest tests.test_review_fixes -v +``` + +Testene kører uden skærm/display og dækker: navigations-tæller, oversættelses-nøgler, URL-initialisering og signaturer. ## 💡 Backlog / Kommende muligheder 1. Integration for håndtering af flere tenants (lejemål)