Commit Graph

113 Commits

Author SHA1 Message Date
Dev
158aab96b2 feat(01-04): SessionManager singleton holding all ClientContext instances
- SessionManager owns all ClientContexts; callers must not store references
- IsAuthenticated(tenantUrl) returns false before auth, true after GetOrCreateContextAsync
- ClearSessionAsync disposes ClientContext and removes state (idempotent for unknown tenants)
- GetOrCreateContextAsync validates null/empty TenantUrl and ClientId (ArgumentException)
- MsalClientFactory.GetCacheHelper() added — exposes helper for PnP tokenCacheCallback wiring
- 8 unit tests pass, 1 interactive-login test skipped (integration-only)
2026-04-02 12:25:01 +02:00
Dev
02955199f6 feat(01-04): MsalClientFactory with per-clientId PCA and MsalCacheHelper
- Creates one IPublicClientApplication per ClientId (never shared)
- Persists token cache to configurable directory (default: %AppData%\SharepointToolbox\auth\msal_{clientId}.cache)
- SemaphoreSlim(1,1) prevents duplicate creation under concurrent calls
- CacheDirectory property exposed for test injection
- 4 unit tests: same-instance, different-instance, concurrent, AppData path
2026-04-02 12:22:54 +02:00
Dev
466bef3e87 docs(01-05): complete localization and logging plan
- 01-05-SUMMARY.md: TranslationSource + EN/FR resx + Serilog integration tests
- STATE.md: progress 50% (4/8 plans), metrics recorded, decisions added
- ROADMAP.md: phase 1 progress updated (4/8 summaries)
- REQUIREMENTS.md: FOUND-09 marked complete
2026-04-02 12:20:08 +02:00
Dev
1c532d1f6b feat(01-05): add Serilog integration tests and App.xaml.cs LogPanelSink comment
- LoggingIntegrationTests: verifies Serilog writes rolling log file with correct content
- LogPanelSink structural smoke test: confirms type implements ILogEventSink
- App.xaml.cs: added comment for LogPanelSink DI registration deferred to plan 01-06
2026-04-02 12:18:02 +02:00
Dev
a287ed83ab feat(01-05): implement TranslationSource singleton + EN/FR resx files
- TranslationSource singleton with INotifyPropertyChanged indexer binding
- PropertyChanged fires with string.Empty on culture switch (signals all bindings refresh)
- Missing key returns [key] placeholder (prevents null in WPF bindings)
- Strings.resx with 27 Phase 1 UI string keys (EN)
- Strings.fr.resx with same 27 keys stubbed with EN text (FR completeness Phase 5)
- Strings.Designer.cs ResourceManager for dotnet build compatibility
- SharepointToolbox.csproj updated with EmbeddedResource metadata
2026-04-02 12:16:57 +02:00
Dev
8a58140f9b test(01-05): add failing tests for TranslationSource singleton
- Instance singleton test
- EN string lookup test
- FR culture fallback test
- Missing key returns bracketed key
- PropertyChanged fires with empty string on culture switch
- Same culture does not fire PropertyChanged
2026-04-02 12:14:49 +02:00
Dev
dd2f179c2d docs(01-03): complete persistence layer plan — ProfileService + SettingsService
- SUMMARY.md: 7 files, 18 tests, write-then-replace pattern documented
- STATE.md: plan 03 complete, progress 38%, decisions recorded
- ROADMAP.md: phase 1 progress updated (3/8 plans done)
- REQUIREMENTS.md: FOUND-02, FOUND-10, FOUND-12 marked complete
2026-04-02 12:13:35 +02:00
Dev
ac3fa5c8eb feat(01-03): SettingsRepository and SettingsService with write-then-replace
- AppSettings model: DataFolder + Lang with camelCase JSON serialization
- SettingsRepository: SemaphoreSlim write lock + write-then-replace (tmp→validate→move)
- SettingsService: GetSettings/SetLanguage/SetDataFolder; SetLanguage validates en/fr only
- All 8 SettingsServiceTests pass; all 18 Unit tests pass
2026-04-02 12:12:02 +02:00
Dev
769196dabe feat(01-03): ProfileRepository and ProfileService with write-then-replace
- ProfileRepository: SemaphoreSlim write lock + write-then-replace (tmp→validate→move)
- ProfileRepository: camelCase JSON serialization matching existing schema
- ProfileService: CRUD operations (Add/Rename/Delete) with validation
- All 10 ProfileServiceTests pass (round-trip, missing file, corrupt JSON, concurrency, schema check)
2026-04-02 12:10:56 +02:00
Dev
ff29d4ec19 docs(01-02): complete core models and helpers plan — SUMMARY, STATE, ROADMAP updated
- 01-02-SUMMARY.md created with 7 files, 2 tasks, 1 auto-fix deviation
- STATE.md: progress 25% (2/8 plans), 2 new decisions added
- ROADMAP.md: phase 1 updated (2/8 summaries, In Progress)
- REQUIREMENTS.md: FOUND-05/06/07/08 marked complete
2026-04-02 12:08:16 +02:00
Dev
c2978016b0 feat(01-02): add SharePointPaginationHelper, ExecuteQueryRetryHelper, LogPanelSink
- SharePointPaginationHelper: async iterator with ListItemCollectionPosition loop (bypasses 5k limit); RowLimit=2000; [EnumeratorCancellation] for correct WithCancellation support
- ExecuteQueryRetryHelper: exponential backoff on 429/503/throttle; surfaces retry events via IProgress<OperationProgress>; max 5 retries
- LogPanelSink: custom Serilog ILogEventSink writing color-coded entries to RichTextBox via Dispatcher.InvokeAsync for thread safety
2026-04-02 12:06:39 +02:00
Dev
ddb216b1fb feat(01-02): add Core models and WeakReferenceMessenger messages
- TenantProfile (plain class, mutable, fields match JSON schema: Name/TenantUrl/ClientId)
- OperationProgress (record with Indeterminate factory, used by all feature services via IProgress<T>)
- TenantSwitchedMessage (ValueChangedMessage<TenantProfile>, broadcast-ready)
- LanguageChangedMessage (ValueChangedMessage<string>, broadcast-ready)
2026-04-02 12:05:27 +02:00
Dev
41f8844a16 docs(01-01): complete solution scaffold plan — SUMMARY, STATE, ROADMAP updated
- 01-01-SUMMARY.md created with deviations, decisions, and metrics
- STATE.md: progress 13% (1/8 plans), 3 decisions added, metrics recorded
- ROADMAP.md: Phase 1 marked In Progress (1/8 summaries)
- REQUIREMENTS.md: FOUND-01 marked complete
2026-04-02 12:04:19 +02:00
Dev
eac34e3e2c feat(01-01): add xUnit test project with 7 stub test files
- SharepointToolbox.Tests targeting net10.0-windows with UseWPF=true
- Moq 4.20.72 added for future mocking
- 7 stub test files across Services, Auth, ViewModels, Localization, Integration
- All tests marked [Fact(Skip)] referencing implementation plan — 0 failed, 7 skipped
- Solution build: 0 errors, 0 warnings
2026-04-02 12:02:30 +02:00
Dev
f469804810 feat(01-01): create WPF solution with Generic Host entry point and NuGet packages
- SharepointToolbox.slnx solution with WPF project
- net10.0-windows target, PublishTrimmed=false, StartupObject set
- App.xaml StartupUri removed, App demoted from ApplicationDefinition to Page
- App.xaml.cs: [STAThread] Main with Host.CreateDefaultBuilder + Serilog rolling file
- All NuGet packages: CommunityToolkit.Mvvm 8.4.2, MSAL 4.83.3, PnP.Framework 1.18.0, Serilog 4.3.1
- Build: 0 errors, 0 warnings
2026-04-02 12:00:47 +02:00
Dev
b4a901e52a fix(01-foundation): revise plans based on checker feedback
- 01-04: wave 3 → 4 (01-03 is also wave 3; parallel executor would race)
- 01-06: wave 4 → 5 (cascades from 01-04 fix); add FeatureTabBase UserControl
  for per-tab progress/cancel strip; bind StatusBar middle item to ProgressStatus
  instead of ConnectionStatus per locked CONTEXT.md decision
- 01-07: wave 5 → 6 (cascades)
- 01-08: wave 6 → 7 (cascades)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 11:53:41 +02:00
Dev
eeb9a3bcd1 fix(01-foundation): revise plans based on checker feedback
- 01-03: wave 2 → wave 3 (depends on 01-02 which is also wave 2; must be wave 3)
- 01-06: add ProgressUpdatedMessage.cs to files_modified; add third StatusBarItem (progress %) to XAML per locked CONTEXT.md decision; add ProgressUpdatedMessage subscription in MainWindowViewModel.OnActivated()
- 01-08: add comment to empty <files> element (auto task with no file output)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 11:44:54 +02:00
Dev
ff5ac94ae2 docs(01-foundation): create phase plan (8 plans, 6 waves)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 11:38:35 +02:00
Dev
f303a60018 docs(phase-1): add research and validation strategy for foundation phase
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 11:29:00 +02:00
Dev
eba593c7ef docs(01-foundation): research phase 1 foundation
Research covering WPF Generic Host wiring, MSAL per-tenant token cache
(MsalCacheHelper), CommunityToolkit.Mvvm async patterns, dynamic resx
localization, Serilog setup, JSON write-then-replace, and ObservableCollection
threading rules. Includes validation architecture and test gap list.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 11:27:50 +02:00
8102994aa5 docs: create roadmap (5 phases), research complete
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 10:14:13 +02:00
8a393aa540 docs: define v1 requirements (42 requirements across 8 categories)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 10:11:11 +02:00
0c2e26e597 docs: complete project research for SharePoint Toolbox rewrite
Research covers stack (NET10/WPF/PnP.Framework), features (v1 parity + v1.x
differentiators), architecture (MVVM four-layer pattern), and pitfalls
(10 critical pitfalls all addressed in foundation phase). SUMMARY.md
synthesizes findings with phase-structured roadmap implications.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 10:07:47 +02:00
d372fc10f2 chore: add project config, update gitignore for .planning/
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 09:54:02 +02:00
1619cfbb7d docs: initialize project
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 09:52:41 +02:00
63cf69f114 docs: map existing codebase
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 09:28:40 +02:00
10bfe6debc Merge branch 'main' of https://git.azuze.fr/kawa/Sharepoint-Toolbox
All checks were successful
Release zip package / release (push) Successful in 1s
v1.0.6.3
2026-04-01 17:12:30 +02:00
945a4e110d Update TODO.md 2026-04-01 17:12:24 +02:00
109d0d5f1e Update TODO.md 2026-03-27 09:57:13 +01:00
b4f0fecad2 Merge branch 'main' of https://git.azuze.fr/kawa/Sharepoint-Toolbox
All checks were successful
Release zip package / release (push) Successful in 1s
v1.0.6.2
2026-03-27 09:54:11 +01:00
903fa17f8a Updated workflow to include CSV examples folder 2026-03-27 09:54:01 +01:00
693f21915d Updated workflow to include CSV examples folder
All checks were successful
Release zip package / release (push) Successful in 1s
v1.0.6.1
2026-03-17 11:03:23 +01:00
ab39e55194 Added mass-transfer
All checks were successful
Release zip package / release (push) Successful in 1s
v1.0.6
2026-03-17 10:57:11 +01:00
a1edea3007 Cleanup2
All checks were successful
Release zip package / release (push) Successful in 1s
v1.0.5
2026-03-17 10:36:59 +01:00
db0f87dc00 Cleanup 2026-03-17 10:36:41 +01:00
28e4c21e80 Added version cleanup feature 2026-03-17 10:35:39 +01:00
5c5e4b1415 Buttons size fix 2026-03-16 16:55:27 +01:00
086804edf9 Added functionnality : you can vcreate a whole folder tree by importing a CSV (see examples fodler) 2026-03-16 16:39:37 +01:00
9dc85c8057 Added sample CSV files for user/sites importation.
All checks were successful
Release zip package / release (push) Successful in 1s
Fixed a few bugs.
v1.0.4
2026-03-16 13:45:00 +01:00
9bcbad5d5b Ajoute de barres de recherches dans les rapports HTML de permissions et stockage
All checks were successful
Release zip package / release (push) Successful in 1s
v1.0.3
2026-03-16 11:44:17 +01:00
0e5f67bfa4 Added 2 new features :
All checks were successful
Release zip package / release (push) Successful in 1s
- File/folder transfer betrween sites
- Bulk site creation
v1.0.2 v1.0.1
2026-03-16 11:22:01 +01:00
14bb1a7c13 Merge branch 'main' of https://git.azuze.fr/kawa/Sharepoint-Toolbox 2026-03-11 11:05:52 +01:00
a256e30c59 New logo 2026-03-11 11:05:17 +01:00
2856964858 Update README.md 2026-03-10 17:11:07 +01:00
3ca58a4da0 Updated Workflow 2026-03-10 17:09:08 +01:00
2cc9d91f5a Do not upload wiki files here 2026-03-10 15:29:05 +01:00
ee609cfaa4 Update
All checks were successful
Release zip package / release (push) Successful in 0s
v0.9.0
2026-03-10 14:59:23 +01:00
245f2d6b69 Updated workflow
All checks were successful
Release zip package / release (push) Successful in 9s
v1.0
2026-03-10 14:50:06 +01:00
ae0106eff9 Updated workflow
Some checks failed
Release zip package / release (push) Failing after 3s
v1.0.0
2026-03-10 14:27:51 +01:00
ebcf1c871c Added release workflow 2026-03-10 14:22:31 +01:00