Skip to content

Commit 2ce5918

Browse files
committed
v1.0.0 - New Redesign, User Friendly, and Fast!
Major Changes: - Background threading for backup/restore (no more UI freeze) - Cross-platform support with platform adapter - Optimized backup items (9 essential items only) - Duplicate session protection - Fixed build system and PyInstaller configuration - Code cleanup (removed emojis) - Fixed session active status display - Added Windows screenshots to README
1 parent bff29c0 commit 2ce5918

16 files changed

+2414
-406
lines changed

CHANGELOG.md

Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,83 @@
22

33
All notable changes to SurfManager will be documented in this file.
44

5-
## [0.0.2-beta] - 2024-12-04
5+
## [1.0.0] - 2025-12-04
6+
7+
### Highlights
8+
**New Redesign, User Friendly, and Fast - No More Freezing!**
9+
10+
### Added
11+
- **Background Threading**: Backup and restore operations now run in background threads
12+
- No more UI freezing during long operations
13+
- Real-time progress updates via signals
14+
- Responsive interface throughout all operations
15+
- **Cross-Platform Support**: New platform adapter for Windows, Linux, and macOS
16+
- Automatic path detection for each platform
17+
- User-specific directory resolution
18+
- Unified API for all platforms
19+
- **Optimized Backup Items**: Reduced from 16+ items to 9 essential files/folders
20+
- Folders: User, Local Storage, Session Storage, Network
21+
- Files: Preferences, Local State, DIPS, machineid, languagepacks.json
22+
- Faster backup/restore with smaller file sizes
23+
- **Duplicate Protection**: Prevents overwriting existing session backups
24+
- **Screenshots**: Added Windows screenshots to README
25+
26+
### Changed
27+
- **Build System**: Fixed PyInstaller configuration
28+
- Correct icon path resolution
29+
- Proper hidden imports for PyQt6
30+
- Size optimization with module exclusions
31+
- **Code Cleanup**: Removed emojis from code, replaced with text alternatives
32+
- **Session Table**: Disabled auto-sorting, maintains creation order
33+
- **Set Active**: Fixed status display for active sessions
34+
35+
### Fixed
36+
- Variable name errors in backup/restore functions
37+
- Filter combo changing after backup (now stays on "All")
38+
- Session active status not displaying correctly
39+
- Unused highlight methods removed
40+
41+
### Technical
42+
- New `app/core/workers.py` with BackupWorker and RestoreWorker classes
43+
- New `app/core/platform_adapter.py` for cross-platform support
44+
- Updated ConfigManager with platform-aware path resolution
45+
- Signal-based progress communication between threads
46+
47+
---
48+
49+
## [0.0.3-beta-windows] - 2025-12-04
50+
51+
### Added
52+
- **Addon Backup Folders**: Optional additional folders to backup (e.g., ~/.aws, ~/.ssh, custom configs)
53+
- Add extra folders in App Configuration dialog
54+
- Auto-backup and restore with session data
55+
- Support for any folder outside main app data path
56+
- **Right-click Tip**: Added visual tip in Sessions tab about right-click options
57+
- **Smart App Close**: ProcessKiller with graceful termination before operations
58+
- **Auto-Backup Protection**: Automatic backup before reset operations
59+
- **Dual View Mode**: Separate views for manual sessions vs auto-backups toggle
60+
61+
### Changed
62+
- **Reset Tab Refresh**: Fixed app list not updating after adding new app in App Configuration
63+
- **Progress Bars**: Now persist final status instead of resetting
64+
- **Session Storage**: Filesystem-based (no more JSON conflicts)
65+
- **Active Session Tracking**: Using marker files for reliability
66+
67+
### Fixed
68+
- Reset Tab not showing newly added apps after refresh
69+
- Auto-backups showing in main session view (now hidden by default)
70+
- File lock errors during restore with retry mechanism
71+
- Process detection with psutil integration
72+
73+
### Technical
74+
- Added `addon_backup_paths` field in app configuration
75+
- Enhanced `_create_backup()` and `_load_session()` for addon support
76+
- Improved `refresh_ui()` in Reset Tab with proper widget cleanup
77+
- Added psutil to requirements.txt
78+
79+
---
80+
81+
## [0.0.2-beta] - 2025-12-04
682

783
### Added
884
- **Session Backup System**: Full backup/restore functionality
@@ -25,7 +101,7 @@ All notable changes to SurfManager will be documented in this file.
25101
- App Configuration action buttons getting cut off
26102
- Session log timestamp removed for cleaner output
27103

28-
## [0.0.1-beta] - 2024-12-04
104+
## [0.0.1-beta] - 2025-12-04
29105

30106
### Initial Release
31107
- GUI foundation only (base for v6.0.0)

Launcher.cmd

Lines changed: 142 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
@echo off
2+
setlocal enabledelayedexpansion
23
:: Run as Admin check
34
net session >nul 2>&1
45
if %errorlevel% neq 0 (
@@ -10,24 +11,42 @@ if %errorlevel% neq 0 (
1011
title SurfManager Launcher
1112
cd /d "%~dp0"
1213

14+
:: Get version from app/__init__.py
15+
for /f "tokens=2 delims='" %%i in ('findstr "__version__" app\__init__.py') do set VERSION=%%i
16+
17+
:: Detect architecture
18+
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
19+
set ARCH=x64
20+
) else if "%PROCESSOR_ARCHITECTURE%"=="ARM64" (
21+
set ARCH=arm64
22+
) else (
23+
set ARCH=x86
24+
)
25+
1326
:menu
1427
cls
1528
echo ============================================
16-
echo SurfManager Launcher
29+
echo SurfManager Launcher
1730
echo ============================================
1831
echo.
1932
echo [1] Run Normal Mode
2033
echo [2] Run Debug Mode (show terminal)
21-
echo [3] Clean Build Artifacts
22-
echo [4] Exit
34+
echo.
35+
echo [3] Build Windows Stable (Release)
36+
echo [4] Build Windows Debug
37+
echo.
38+
echo [5] Clean Build Artifacts
39+
echo [6] Exit
2340
echo.
2441
echo ============================================
2542
set /p choice="Select option: "
2643

2744
if "%choice%"=="1" goto normal
2845
if "%choice%"=="2" goto debug
29-
if "%choice%"=="3" goto clean
30-
if "%choice%"=="4" exit /b 0
46+
if "%choice%"=="3" goto build_stable
47+
if "%choice%"=="4" goto build_debug
48+
if "%choice%"=="5" goto clean
49+
if "%choice%"=="6" exit /b 0
3150
goto menu
3251

3352
:setup
@@ -69,6 +88,124 @@ python app/main.py
6988
pause
7089
goto menu
7190

91+
:build_stable
92+
call :setup
93+
echo.
94+
echo Building SurfManager Stable (Release)...
95+
echo Architecture: !ARCH!
96+
echo Version: !VERSION!
97+
echo.
98+
pip install pyinstaller -q
99+
100+
set FILENAME=SurfManager-windows-!ARCH!-!VERSION!
101+
102+
echo Generating executable (this may take 2-3 minutes)...
103+
echo Filename: %FILENAME%
104+
105+
pyinstaller --onefile --windowed --clean --icon="%~dp0app/icons/app.ico" --name="%FILENAME%" --distpath="dist/stable" --workpath="build/stable" --specpath="build/stable" ^
106+
--add-data "%~dp0app/icons/app.ico;app/icons" ^
107+
--hidden-import PyQt6.QtCore ^
108+
--hidden-import PyQt6.QtWidgets ^
109+
--hidden-import PyQt6.QtGui ^
110+
--hidden-import PyQt6.QtNetwork ^
111+
--hidden-import qtawesome ^
112+
--hidden-import psutil ^
113+
--exclude-module tkinter ^
114+
--exclude-module matplotlib ^
115+
--exclude-module numpy ^
116+
--exclude-module pandas ^
117+
--exclude-module PyQt6.QtWebEngine ^
118+
--exclude-module PyQt6.QtWebEngineWidgets ^
119+
--exclude-module PyQt6.QtQml ^
120+
--exclude-module PyQt6.QtQuick ^
121+
--exclude-module PyQt6.QtMultimedia ^
122+
--exclude-module PyQt6.QtBluetooth ^
123+
--exclude-module PyQt6.QtPositioning ^
124+
--exclude-module PyQt6.QtPrintSupport ^
125+
--exclude-module PyQt6.QtTest ^
126+
--exclude-module PyQt6.QtSql ^
127+
--exclude-module PyQt6.QtOpenGL ^
128+
--exclude-module PIL ^
129+
--exclude-module IPython ^
130+
--exclude-module pytest ^
131+
--exclude-module unittest ^
132+
--exclude-module test ^
133+
--strip ^
134+
--noupx ^
135+
app/main.py
136+
137+
if %errorlevel% equ 0 (
138+
echo.
139+
echo ✓ Build successful!
140+
echo Executable: dist\stable\%FILENAME%.exe
141+
echo.
142+
) else (
143+
echo.
144+
echo ✗ Build failed!
145+
echo.
146+
)
147+
pause
148+
goto menu
149+
150+
:build_debug
151+
call :setup
152+
echo.
153+
echo Building SurfManager Debug...
154+
echo Architecture: !ARCH!
155+
echo Version: !VERSION!
156+
echo.
157+
pip install pyinstaller -q
158+
159+
set FILENAME=SurfManager-windows-!ARCH!-!VERSION!-debug
160+
161+
echo Generating executable with debug info...
162+
echo Filename: %FILENAME%
163+
164+
pyinstaller --onefile --console --clean --icon="%~dp0app/icons/app.ico" --name="%FILENAME%" --distpath="dist/debug" --workpath="build/debug" --specpath="build/debug" ^
165+
--add-data "%~dp0app/icons/app.ico;app/icons" ^
166+
--hidden-import PyQt6.QtCore ^
167+
--hidden-import PyQt6.QtWidgets ^
168+
--hidden-import PyQt6.QtGui ^
169+
--hidden-import PyQt6.QtNetwork ^
170+
--hidden-import qtawesome ^
171+
--hidden-import psutil ^
172+
--exclude-module tkinter ^
173+
--exclude-module matplotlib ^
174+
--exclude-module numpy ^
175+
--exclude-module pandas ^
176+
--exclude-module PyQt6.QtWebEngine ^
177+
--exclude-module PyQt6.QtWebEngineWidgets ^
178+
--exclude-module PyQt6.QtQml ^
179+
--exclude-module PyQt6.QtQuick ^
180+
--exclude-module PyQt6.QtMultimedia ^
181+
--exclude-module PyQt6.QtBluetooth ^
182+
--exclude-module PyQt6.QtPositioning ^
183+
--exclude-module PyQt6.QtPrintSupport ^
184+
--exclude-module PyQt6.QtTest ^
185+
--exclude-module PyQt6.QtSql ^
186+
--exclude-module PyQt6.QtOpenGL ^
187+
--exclude-module PIL ^
188+
--exclude-module IPython ^
189+
--exclude-module pytest ^
190+
--exclude-module unittest ^
191+
--exclude-module test ^
192+
--debug all ^
193+
--noupx ^
194+
app/main.py
195+
196+
if %errorlevel% equ 0 (
197+
echo.
198+
echo ✓ Build successful!
199+
echo Executable: dist\debug\%FILENAME%.exe
200+
echo.
201+
) else (
202+
echo.
203+
echo ✗ Build failed!
204+
echo.
205+
)
206+
pause
207+
goto menu
208+
72209
:clean
73210
echo.
74211
echo Cleaning build artifacts...

0 commit comments

Comments
 (0)