Skip to content

Commit 1837316

Browse files
author
Lukas Geiger
committed
feat: add windows store readiness baseline
1 parent 54ab674 commit 1837316

15 files changed

Lines changed: 496 additions & 27 deletions

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,15 @@ Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.1.0/).
1212
- `README_de.md` als separate deutsche README und `llms.txt` als maschinenlesbarer Projektkontext ergänzt.
1313
- Redigierter Workspace-Austausch über `profiler-workspace-v1.json` mit Menüaktionen für Export und Import ergänzt.
1414
- `pyproject.toml` zur Standardisierung der Paketmetadaten und Abhängigkeiten angelegt.
15+
- Windows-Store-Basismaterialien ergänzt: `store_package.json`, `STORE_LISTING.md`, `PRIVACY_POLICY.md`, `SUPPORT.md`, `WINDOWS_STORE_PREP.md` und `scripts/check_store_readiness.py`.
16+
- Neue Tests `tests/test_app_paths.py` und `tests/test_store_materials.py` für App-Datenpfade und Store-Materialien.
1517

1618
### Geändert / Changed
1719
- `profiler_settings.json` um `prosync_path` erweitert.
1820
- Getrackte Beispielkonfigurationen enthalten keine lokalen Benutzerpfade mehr.
1921
- `README.md` auf English-first GitHub-SEO, klare Usecases, PySide6-Positionierung und Discovery-Keywords umgestellt.
2022
- Workspace-Import übernimmt bewusst nur sichere Einstellungen; lokale DB-Pfade bleiben redigiert und werden nicht automatisch reaktiviert.
23+
- Windows-Konfigurationsdateien und Datenschutzampel nutzen für neue Installationen `%LOCALAPPDATA%\ProFilerSuite`; bestehende `~/.profiler_suite`-Dateien bleiben lesbar.
2124

2225
### Behoben / Fixed
2326
- `Profiler_Suite_V15.py` (Anonymisierungs-Worker): Ausgabedateinamen `_geschwrzt``_geschwärzt` korrigiert (3 Stellen); Log-Meldung ergänzt um fehlendes ✅-Emoji und korrekten Umlaut.

PRIVACY_POLICY.md

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# Privacy Policy - ProFiler Suite
2+
3+
Stand: 2026-06-12
4+
5+
## Deutsch
6+
7+
ProFiler Suite arbeitet lokal auf dem Gerät des Nutzers. Die Anwendung lädt
8+
Dateien, Dokumentinhalte, OCR-Ergebnisse, SQLite-Indizes oder Workspace-Exporte
9+
nicht an einen eigenen ProFiler-Server hoch.
10+
11+
### Lokal verarbeitete Daten
12+
13+
- lokale Ordner, Dateinamen, Metadaten und Vorschaudaten
14+
- SQLite-Indizes für Suche, Versionen und Duplikaterkennung
15+
- OCR-Ergebnisse über Tesseract
16+
- PDF-Arbeitsstände und Redaktionsläufe, optional mit PyMuPDF
17+
- UI- und Tool-Einstellungen unter `%LOCALAPPDATA%\ProFilerSuite`
18+
- redigierte Workspace-Exporte wie `profiler-workspace-v1.json`
19+
20+
### Keine Standard-Telemetrie
21+
22+
- keine Pflicht-Cloud
23+
- keine Werbe-IDs
24+
- keine eingebaute Nutzerverfolgung
25+
- kein automatischer Upload privater Dokumente
26+
27+
### Externe Komponenten
28+
29+
ProFiler kann lokale Drittkomponenten wie PyMuPDF, Tesseract, pdf2image,
30+
watchdog oder ReportLab verwenden. Diese Bibliotheken laufen im lokalen Prozess
31+
des Nutzers. Lizenzdetails stehen in `THIRD_PARTY_LICENSES.txt`.
32+
33+
### Support
34+
35+
Support-Kanäle und Hinweise zum anonymisierten Fehlerbericht stehen in
36+
`SUPPORT.md`.
37+
38+
---
39+
40+
## English
41+
42+
ProFiler Suite processes user data locally on the user's device. The
43+
application does not upload files, document contents, OCR results, SQLite
44+
indexes, or workspace exports to a dedicated ProFiler service.
45+
46+
### Data processed locally
47+
48+
- local folders, filenames, metadata, and preview data
49+
- SQLite indexes for search, versions, and duplicate detection
50+
- OCR results through Tesseract
51+
- PDF workflows and redaction runs, optionally with PyMuPDF
52+
- UI and tool settings under `%LOCALAPPDATA%\ProFilerSuite`
53+
- redacted workspace exports such as `profiler-workspace-v1.json`
54+
55+
### No default telemetry
56+
57+
- no mandatory cloud
58+
- no advertising identifiers
59+
- no built-in user tracking
60+
- no automatic upload of private documents
61+
62+
### External components
63+
64+
ProFiler may use local third-party components such as PyMuPDF, Tesseract,
65+
pdf2image, watchdog, and ReportLab. These libraries run locally on the user's
66+
machine. License details are documented in `THIRD_PARTY_LICENSES.txt`.

ProFiler_Datenschutzampel.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@
2121
from PySide6.QtCore import Qt, QTimer
2222
from PySide6.QtGui import QAction, QColor, QPixmap, QPainter, QBrush, QIcon
2323

24+
from app_paths import config_path, resolve_read_path
25+
2426
# ============================================================================
2527
# KONFIGURATION
2628
# ============================================================================
2729

28-
CONFIG_PATH = Path.home() / ".profiler_suite" / "datenschutzampel.json"
30+
CONFIG_PATH = config_path("datenschutzampel.json")
2931
HISTORY_LIMIT = 15
3032

3133
STYLESHEET = """
@@ -483,9 +485,10 @@ def update_history_display(self):
483485

484486
def load_config(self):
485487
"""Lädt Konfiguration"""
486-
if CONFIG_PATH.exists():
488+
read_path = resolve_read_path(CONFIG_PATH.name)
489+
if read_path.exists():
487490
try:
488-
with open(CONFIG_PATH, 'r', encoding='utf-8') as f:
491+
with open(read_path, 'r', encoding='utf-8') as f:
489492
data = json.load(f)
490493

491494
self.sensitive = data.get('blacklist', [])
@@ -540,4 +543,4 @@ def main():
540543

541544

542545
if __name__ == "__main__":
543-
main()
546+
main()

Profiler_Suite_V15.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
export_workspace as export_redacted_workspace,
3434
import_workspace as import_redacted_workspace,
3535
)
36+
from app_paths import app_data_dir, config_path, resolve_read_path
3637

3738
# Optionale Bibliotheken
3839
try:
@@ -116,10 +117,10 @@ def setup_windows_encoding():
116117
# 1. SHARED UTILS & CONFIG
117118
# ============================================================================
118119

119-
_CONFIG_DIR = Path.home() / ".profiler_suite"
120-
SEARCH_CONFIG_PATH = str(_CONFIG_DIR / "search_config.json")
121-
SYNC_CONFIG_PATH = str(_CONFIG_DIR / "profiler_config.json")
122-
SETTINGS_PATH = str(_CONFIG_DIR / "profiler_settings.json")
120+
_CONFIG_DIR = app_data_dir()
121+
SEARCH_CONFIG_PATH = str(config_path("search_config.json"))
122+
SYNC_CONFIG_PATH = str(config_path("profiler_config.json"))
123+
SETTINGS_PATH = str(config_path("profiler_settings.json"))
123124

124125
# Konstanten für File Processing
125126
DEFAULT_CHUNK_SIZE = 1024 * 1024 # 1 MB für Hash-Berechnung
@@ -339,9 +340,10 @@ def __init__(self):
339340
self.dbs = []
340341
self.load()
341342
def load(self):
342-
if os.path.exists(SEARCH_CONFIG_PATH):
343+
load_path = resolve_read_path(Path(SEARCH_CONFIG_PATH).name)
344+
if load_path.exists():
343345
try:
344-
with open(SEARCH_CONFIG_PATH, "r", encoding="utf-8") as f:
346+
with open(load_path, "r", encoding="utf-8") as f:
345347
self.dbs = json.load(f).get("databases", [])
346348
except (OSError, json.JSONDecodeError, KeyError):
347349
self.save()
@@ -362,9 +364,10 @@ def __init__(self, path):
362364
self.data = {"connections": []}
363365
self.load()
364366
def load(self):
365-
if os.path.exists(self.path):
367+
load_path = resolve_read_path(Path(self.path).name)
368+
if load_path.exists():
366369
try:
367-
with open(self.path, "r", encoding="utf-8") as f:
370+
with open(load_path, "r", encoding="utf-8") as f:
368371
self.data = json.load(f)
369372
except (OSError, json.JSONDecodeError):
370373
self.save()
@@ -402,9 +405,10 @@ def __init__(self):
402405
self.load()
403406

404407
def load(self):
405-
if os.path.exists(SETTINGS_PATH):
408+
load_path = resolve_read_path(Path(SETTINGS_PATH).name)
409+
if load_path.exists():
406410
try:
407-
with open(SETTINGS_PATH, "r", encoding="utf-8") as f:
411+
with open(load_path, "r", encoding="utf-8") as f:
408412
loaded = json.load(f)
409413
self.data.update(loaded)
410414
except (OSError, json.JSONDecodeError):
@@ -2250,9 +2254,10 @@ def __init__(self, path):
22502254
self.sync_all_to_search()
22512255

22522256
def load(self):
2253-
if os.path.exists(self.path):
2257+
load_path = resolve_read_path(Path(self.path).name)
2258+
if load_path.exists():
22542259
try:
2255-
with open(self.path, "r", encoding="utf-8") as f:
2260+
with open(load_path, "r", encoding="utf-8") as f:
22562261
self.data = json.load(f)
22572262
except (OSError, json.JSONDecodeError):
22582263
self.save()
@@ -7756,12 +7761,7 @@ def __init__(self, parent=None):
77567761
super().__init__(parent)
77577762

77587763
# Config Manager
7759-
config_path = os.path.join(
7760-
os.path.expanduser("~"),
7761-
".profiler_suite",
7762-
"connections.json"
7763-
)
7764-
self.cfg = ConnectionConfigManager(config_path)
7764+
self.cfg = ConnectionConfigManager(str(config_path("connections.json")))
77657765
self.worker = None
77667766

77677767
self.init_ui()

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ START.bat
5757

5858
OCR requires [Tesseract](https://github.com/tesseract-ocr/tesseract). Configure the executable path in `profiler_config.json` if the portable copy or system installation is not auto-detected.
5959

60+
On Windows, local app data and settings are stored under `%LOCALAPPDATA%\ProFilerSuite`. Legacy reads from `~/.profiler_suite` are still accepted for existing local installs.
61+
6062
## Configuration
6163

6264
| File | Purpose |
@@ -108,6 +110,8 @@ ProFiler Suite is licensed under AGPL-3.0. See [LICENSE](LICENSE).
108110

109111
This project uses PySide6 and PyMuPDF among other dependencies; see `requirements.txt` and `THIRD_PARTY_LICENSES.txt` for the full dependency list.
110112

113+
Windows Store preparation materials live in `store_package.json`, `STORE_LISTING.md`, `PRIVACY_POLICY.md`, `SUPPORT.md`, and `WINDOWS_STORE_PREP.md`.
114+
111115
## Discoverability Keywords
112116

113117
`local-first file manager`, `desktop document manager`, `private document archive`, `OCR desktop app`, `PDF OCR tool`, `PDF redaction`, `document privacy checker`, `PySide6 file management`, `SQLite document index`, `Windows file organizer`.

README_de.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ START.bat
5757

5858
OCR benötigt [Tesseract](https://github.com/tesseract-ocr/tesseract). Der Pfad kann in `profiler_config.json` gesetzt werden, falls die portable Kopie oder Systeminstallation nicht automatisch erkannt wird.
5959

60+
Unter Windows liegen lokale App-Daten und Einstellungen jetzt unter `%LOCALAPPDATA%\ProFilerSuite`. Alte lokale Installationen dürfen weiterhin aus `~/.profiler_suite` gelesen werden.
61+
6062
## Konfiguration
6163

6264
| Datei | Zweck |
@@ -107,3 +109,5 @@ ProFiler unterstützt Datenschutz-Workflows, Schwärzung und Anonymisierung, gar
107109
ProFiler Suite steht unter AGPL-3.0. Siehe [LICENSE](LICENSE).
108110

109111
Dieses Projekt verwendet unter anderem PySide6 und PyMuPDF; siehe `requirements.txt` und `THIRD_PARTY_LICENSES.txt`.
112+
113+
Die Windows-Store-Basisdokumente liegen in `store_package.json`, `STORE_LISTING.md`, `PRIVACY_POLICY.md`, `SUPPORT.md` und `WINDOWS_STORE_PREP.md`.

STORE_LISTING.md

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# Store Listing - ProFiler Suite
2+
3+
## Deutsch
4+
5+
### Kurzbeschreibung
6+
Lokale Dokumentverwaltung mit Suche, OCR, PDF-Werkzeugen und Datenschutzprüfung.
7+
8+
### Beschreibung
9+
ProFiler Suite ist eine lokale Windows-Desktop-App für private und berufliche
10+
Dokumentbestände. Die Anwendung kombiniert Dateisuche, OCR, PDF-Workflows,
11+
Duplikaterkennung und Datenschutzprüfung in einer Oberfläche, ohne eigene
12+
Cloud-Pflicht oder Upload-Zwang.
13+
14+
**Wichtige Funktionen**
15+
16+
- lokale Volltextsuche über PDFs, Office-Dateien, Bilder, Tabellen und Textdateien
17+
- OCR für Scans und Bilder über Tesseract
18+
- PDF-Werkzeuge für Entschlüsselung, Schwärzung, Seitenextraktion und Export
19+
- Datenschutzampel für sensible Begriffe vor Weitergabe oder Archivierung
20+
- redigierter Workspace-Export für sichere Reviews und Cross-Platform-Smokes
21+
- optionaler Start benachbarter Desktop-Tools wie ProSync und SQLiteViewer
22+
23+
**Windows-Store-Relevanz**
24+
25+
- App-Daten liegen auf Windows unter `%LOCALAPPDATA%\ProFilerSuite`
26+
- die App nutzt `runFullTrust`, weil lokale Ordner, OCR-Tools und Desktop-Workflows
27+
bewusst außerhalb einer reinen Sandbox laufen
28+
- PyMuPDF und Tesseract werden offen dokumentiert; Lizenz- und Drittanbieterhinweise
29+
bleiben im Repository, in `THIRD_PARTY_LICENSES.txt` und in der Datenschutzdoku sichtbar
30+
- ProFiler bleibt ein AGPL-3.0-offengelegtes Desktop-Projekt; der Store-Kanal ist
31+
nur ein Distributionsweg für dieselbe lokale Windows-App
32+
33+
### Datenschutz
34+
https://github.com/file-bricks/ProFiler/blob/main/PRIVACY_POLICY.md
35+
36+
### Support
37+
https://github.com/file-bricks/ProFiler/blob/main/SUPPORT.md
38+
39+
### Schlüsselwörter
40+
Dokumentverwaltung, OCR, PDF, Datenschutz, Suche, lokal, Offline, Dateimanager, Produktivität
41+
42+
### Screenshot-Bedarf
43+
- vorhandener Basisscreenshot: `screenshots/main.png`
44+
- vor Einreichung ergänzen: Suche, PDF-Workflow, Datenschutzampel, Workspace-Export
45+
46+
---
47+
48+
## English
49+
50+
### Short Description
51+
Local document manager with search, OCR, PDF tools, and privacy review.
52+
53+
### Description
54+
ProFiler Suite is a local Windows desktop application for private and
55+
professional document collections. It combines file search, OCR, PDF workflows,
56+
duplicate detection, and privacy review in one interface without requiring a
57+
cloud account or forced upload path.
58+
59+
**Key capabilities**
60+
61+
- local full-text search across PDFs, Office files, images, spreadsheets, and text files
62+
- OCR for scans and image documents via Tesseract
63+
- PDF tools for decryption, redaction, page extraction, and export
64+
- privacy traffic light for sensitive terms before sharing or archiving
65+
- redacted workspace export for secure reviews and cross-platform smoke runs
66+
- optional launcher path to adjacent desktop tools such as ProSync and SQLiteViewer
67+
68+
**Windows Store note**
69+
70+
- app data lives under `%LOCALAPPDATA%\ProFilerSuite` on Windows
71+
- the app uses `runFullTrust` because local folders, OCR tools, and desktop workflows
72+
intentionally operate outside a sandbox-only model
73+
- PyMuPDF and Tesseract are disclosed in the repository, `THIRD_PARTY_LICENSES.txt`,
74+
and the privacy documentation
75+
- ProFiler remains an AGPL-3.0 disclosed desktop project; the Store channel is
76+
only a distribution path for the same local Windows application
77+
78+
### Privacy Policy
79+
https://github.com/file-bricks/ProFiler/blob/main/PRIVACY_POLICY.md
80+
81+
### Support
82+
https://github.com/file-bricks/ProFiler/blob/main/SUPPORT.md

SUPPORT.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Support - ProFiler Suite
2+
3+
## Deutsch
4+
5+
Primärer Support-Kanal:
6+
7+
https://github.com/file-bricks/ProFiler/issues
8+
9+
Bitte keine privaten Dokumente, vollständigen lokalen Pfade, echten OCR-Inhalt
10+
oder unredigierte Workspace-Exporte öffentlich posten. Für reproduzierbare
11+
Fehler reichen anonymisierte Testdateien, Screenshots ohne Personendaten und
12+
die genaue App-Version.
13+
14+
Bei Store-, OCR- oder PDF-Problemen sind diese Angaben besonders hilfreich:
15+
16+
- Windows-Version
17+
- ob Tesseract lokal verfügbar ist
18+
- ob PyMuPDF aktiv genutzt wurde
19+
- ob das Problem nur im installierten Store-/EXE-Build auftritt
20+
21+
## English
22+
23+
Primary support channel:
24+
25+
https://github.com/file-bricks/ProFiler/issues
26+
27+
Do not post private documents, full local paths, real OCR content, or
28+
unredacted workspace exports publicly. For reproducible bugs, anonymized sample
29+
files, screenshots without personal data, and the exact app version are enough.

WINDOWS_STORE_PREP.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Windows Store Prep - ProFiler Suite
2+
3+
Stand: 2026-06-12
4+
5+
## Erledigt
6+
7+
- `store_package.json` angelegt
8+
- `STORE_LISTING.md`, `PRIVACY_POLICY.md` und `SUPPORT.md` ergänzt
9+
- App-Datenpfad auf Windows für Store-/Desktop-Readiness auf `%LOCALAPPDATA%\ProFilerSuite` umgestellt
10+
- Legacy-Lese-Fallback für alte `~/.profiler_suite`-Dateien bleibt erhalten
11+
- `scripts/check_store_readiness.py` prüft Store-Basismaterialien reproduzierbar
12+
- `THIRD_PARTY_LICENSES.txt` liegt vor und dokumentiert PyMuPDF/Tesseract-Kontext
13+
14+
## Vor der Einreichung noch offen
15+
16+
- finalen EXE-/MSIX-Pfad festziehen
17+
- dediziertes Screenshot-Set ergänzen
18+
- WACK-Lauf dokumentieren
19+
- Poppler-/Tesseract-Bündelung gegen Store-Paket final prüfen
20+
21+
## Technische Hinweise
22+
23+
- lokaler Konfigurationspfad: `%LOCALAPPDATA%\ProFilerSuite` (`LOCALAPPDATA\ProFilerSuite`)
24+
- OCR bleibt lokaler Desktop-Workflow über Tesseract
25+
- PDF-Redaktion kann PyMuPDF nutzen; AGPL-Hinweise bleiben sichtbar dokumentiert
26+
- `runFullTrust` ist bewusst gesetzt, weil lokale Dateisystem-, OCR- und Tool-Workflows benötigt werden

0 commit comments

Comments
 (0)