3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,2 +1,5 @@
|
|||||||
.venv
|
.venv
|
||||||
*.db
|
*.db
|
||||||
|
/dist
|
||||||
|
/build
|
||||||
|
__pycache__/
|
||||||
38
UFF-Search.spec
Normal file
38
UFF-Search.spec
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# -*- mode: python ; coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
a = Analysis(
|
||||||
|
['uff_app.py'],
|
||||||
|
pathex=[],
|
||||||
|
binaries=[],
|
||||||
|
datas=[],
|
||||||
|
hiddenimports=['rapidfuzz', 'pypdf'],
|
||||||
|
hookspath=[],
|
||||||
|
hooksconfig={},
|
||||||
|
runtime_hooks=[],
|
||||||
|
excludes=[],
|
||||||
|
noarchive=False,
|
||||||
|
optimize=0,
|
||||||
|
)
|
||||||
|
pyz = PYZ(a.pure)
|
||||||
|
|
||||||
|
exe = EXE(
|
||||||
|
pyz,
|
||||||
|
a.scripts,
|
||||||
|
a.binaries,
|
||||||
|
a.datas,
|
||||||
|
[],
|
||||||
|
name='UFF-Search',
|
||||||
|
debug=False,
|
||||||
|
bootloader_ignore_signals=False,
|
||||||
|
strip=False,
|
||||||
|
upx=True,
|
||||||
|
upx_exclude=[],
|
||||||
|
runtime_tmpdir=None,
|
||||||
|
console=False,
|
||||||
|
disable_windowed_traceback=False,
|
||||||
|
argv_emulation=False,
|
||||||
|
target_arch=None,
|
||||||
|
codesign_identity=None,
|
||||||
|
entitlements_file=None,
|
||||||
|
)
|
||||||
BIN
UFF_Search_Installer_v3.exe
Normal file
BIN
UFF_Search_Installer_v3.exe
Normal file
Binary file not shown.
3
requirements.txt
Normal file
3
requirements.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
pypdf
|
||||||
|
rapidfuzz
|
||||||
|
PyQt6
|
||||||
52
setup-file.iss
Normal file
52
setup-file.iss
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
; -- UFF-Search Installer Skript --
|
||||||
|
|
||||||
|
[Setup]
|
||||||
|
; Der Name, der überall steht
|
||||||
|
AppName=UFF Text Search
|
||||||
|
AppVersion=3.0
|
||||||
|
AppPublisher=Konstantin Roßmann
|
||||||
|
AppPublisherURL=https://rossmann-it-solutions.de
|
||||||
|
|
||||||
|
; Wo soll standardmäßig installiert werden? {autopf} ist "Program Files"
|
||||||
|
DefaultDirName={autopf}\UFF-Search
|
||||||
|
; Name der Gruppe im Startmenü
|
||||||
|
DefaultGroupName=UFF Search
|
||||||
|
|
||||||
|
; Speicherort der fertigen setup.exe (z.B. auf dem Desktop oder im Projektordner)
|
||||||
|
OutputDir=.
|
||||||
|
OutputBaseFilename=UFF_Search_Installer_v3
|
||||||
|
Compression=lzma
|
||||||
|
SolidCompression=yes
|
||||||
|
|
||||||
|
; Icon für den Installer selbst (optional, sonst weglassen)
|
||||||
|
; SetupIconFile=app.ico
|
||||||
|
|
||||||
|
; Administrator-Rechte anfordern für Installation in Program Files
|
||||||
|
PrivilegesRequired=admin
|
||||||
|
|
||||||
|
[Languages]
|
||||||
|
Name: "german"; MessagesFile: "compiler:Languages\German.isl"
|
||||||
|
|
||||||
|
[Tasks]
|
||||||
|
; Checkbox: "Desktop Verknüpfung erstellen"
|
||||||
|
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
||||||
|
|
||||||
|
[Files]
|
||||||
|
; !!! WICHTIG: HIER DEN PFAD ZU DEINER EXE ANPASSEN !!!
|
||||||
|
; "Source" muss auf die Datei zeigen, die PyInstaller im "dist" Ordner erstellt hat.
|
||||||
|
Source: "C:\Users\konst\Arbeit\unsorted-folder-full-text-search\dist\UFF-Search.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
|
|
||||||
|
; Falls du ein Icon mitliefern willst (optional)
|
||||||
|
; Source: "C:\Pfad\Zu\Deinem\Projekt\app.ico"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
|
|
||||||
|
[Icons]
|
||||||
|
; Verknüpfung im Startmenü
|
||||||
|
Name: "{group}\UFF Text Search"; Filename: "{app}\UFF-Search.exe"
|
||||||
|
; Verknüpfung zum Deinstallieren
|
||||||
|
Name: "{group}\Uninstall UFF Search"; Filename: "{uninstallexe}"
|
||||||
|
; Verknüpfung auf dem Desktop (wenn vom User ausgewählt)
|
||||||
|
Name: "{commondesktop}\UFF Text Search"; Filename: "{app}\UFF-Search.exe"; Tasks: desktopicon
|
||||||
|
|
||||||
|
[Run]
|
||||||
|
; Checkbox am Ende: "Programm jetzt starten"
|
||||||
|
Description: "{cm:LaunchProgram,UFF Text Search}"; Filename: "{app}\UFF-Search.exe"; Flags: nowait postinstall skipifsilent
|
||||||
31
uff_app.py
31
uff_app.py
@@ -16,8 +16,28 @@ from PyQt6.QtGui import QDesktopServices
|
|||||||
# --- 1. DATENBANK MANAGER (Mit Fuzzy-Ranking) ---
|
# --- 1. DATENBANK MANAGER (Mit Fuzzy-Ranking) ---
|
||||||
|
|
||||||
class DatabaseHandler:
|
class DatabaseHandler:
|
||||||
def __init__(self, db_name="uff_index.db"):
|
def __init__(self):
|
||||||
self.db_name = db_name
|
# 1. Wir ermitteln den korrekten AppData Ordner für den User
|
||||||
|
# Windows: C:\Users\Name\AppData\Local\UFF_Search
|
||||||
|
if os.name == 'nt':
|
||||||
|
base_dir = os.getenv('LOCALAPPDATA')
|
||||||
|
else:
|
||||||
|
# Mac/Linux: ~/.local/share/uff_search
|
||||||
|
base_dir = os.path.join(os.path.expanduser("~"), ".local", "share")
|
||||||
|
|
||||||
|
# 2. Wir erstellen unseren eigenen Unterordner
|
||||||
|
self.app_data_dir = os.path.join(base_dir, "UFF_Search")
|
||||||
|
|
||||||
|
# Falls der Ordner nicht existiert, erstellen wir ihn
|
||||||
|
if not os.path.exists(self.app_data_dir):
|
||||||
|
os.makedirs(self.app_data_dir)
|
||||||
|
|
||||||
|
# 3. Der Pfad zur Datenbank
|
||||||
|
self.db_name = os.path.join(self.app_data_dir, "uff_index.db")
|
||||||
|
|
||||||
|
# Debug-Info (falls du es im Terminal testest)
|
||||||
|
print(f"Datenbank Pfad: {self.db_name}")
|
||||||
|
|
||||||
self.init_db()
|
self.init_db()
|
||||||
|
|
||||||
def init_db(self):
|
def init_db(self):
|
||||||
@@ -324,7 +344,12 @@ class UffWindow(QMainWindow):
|
|||||||
def start_indexing(self, folder):
|
def start_indexing(self, folder):
|
||||||
self.set_ui_busy(True)
|
self.set_ui_busy(True)
|
||||||
self.lbl_status.setText(f"Starte... {os.path.basename(folder)}")
|
self.lbl_status.setText(f"Starte... {os.path.basename(folder)}")
|
||||||
self.indexer_thread = IndexerThread(folder)
|
|
||||||
|
# HIER WAR DER FEHLER:
|
||||||
|
# Wir müssen dem Thread explizit sagen, wo die Datenbank liegt!
|
||||||
|
# self.db.db_name enthält den korrekten Pfad (C:\Users\...\AppData\...)
|
||||||
|
self.indexer_thread = IndexerThread(folder, db_name=self.db.db_name)
|
||||||
|
|
||||||
self.indexer_thread.progress_signal.connect(lambda msg: self.lbl_status.setText(msg))
|
self.indexer_thread.progress_signal.connect(lambda msg: self.lbl_status.setText(msg))
|
||||||
self.indexer_thread.finished_signal.connect(self.indexing_finished)
|
self.indexer_thread.finished_signal.connect(self.indexing_finished)
|
||||||
self.indexer_thread.start()
|
self.indexer_thread.start()
|
||||||
|
|||||||
Reference in New Issue
Block a user