docs: update README with latest features and fixes
- 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 <noreply@anthropic.com>
This commit is contained in:
49
README.md
49
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.
|
- **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.
|
- **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`).
|
- **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).
|
- **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).
|
- **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.
|
- **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.
|
- **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
|
## 🛠️ Teknologier
|
||||||
|
|
||||||
- **Sprog:** Python 3.x
|
- **Sprog:** Python 3.x
|
||||||
@@ -31,7 +45,7 @@ pip install wxPython msal requests
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Kør applikationen
|
### Kør applikationen
|
||||||
Star op med:
|
Start op med:
|
||||||
```bash
|
```bash
|
||||||
python sharepoint_browser.py
|
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.
|
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)
|
## 🏗️ 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
|
```bash
|
||||||
pip install pyinstaller
|
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
|
## 🧩 Arkitektur & Workflow
|
||||||
1. **Godkendelse:** Det autentificerer brugeren via MSAL & MS Graph API.
|
1. **Godkendelse:** 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.
|
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. **Baggrundshåndtering af redigering:**
|
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.
|
- 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]`.
|
- Hentes ned til det lokale drev under korte stier, eks. `C:\Temp_SP\[MD5-Hash].[ext]`.
|
||||||
- Et baggrunds-thread overvåger derefter det lokale program (fx Word) kontinuerligt via `os.rename()` tricket.
|
- Et baggrunds-thread overvåger 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`.
|
- 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
|
## 💡 Backlog / Kommende muligheder
|
||||||
1. Integration for håndtering af flere tenants (lejemål)
|
1. Integration for håndtering af flere tenants (lejemål)
|
||||||
|
|||||||
Reference in New Issue
Block a user