Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
9e66f9a
work on linux support
Adam-Color Sep 18, 2025
701bb02
Update install_windows.md
Adam-Color Sep 19, 2025
38eb364
Update install_windows.md
Adam-Color Sep 19, 2025
a5ebf37
minor improvements to projects_window
Adam-Color Sep 20, 2025
719d99d
Merge branch 'Develop' of https://github.com/Adam-Color/AppUsageGUI i…
Adam-Color Sep 20, 2025
b9b9654
revamp sessions_window look
Adam-Color Sep 20, 2025
5634018
added forward and back buttons
Adam-Color Sep 20, 2025
0031fde
Redesigned main_window
Adam-Color Sep 20, 2025
f2c24a5
redesigned select_app_window and session_total_window
Adam-Color Sep 20, 2025
9ccba6e
fixed a bug where last run length was sometimes -1
Adam-Color Sep 20, 2025
3181a19
fix forward/back lock
Adam-Color Sep 21, 2025
cbd9d96
formatting
Adam-Color Sep 21, 2025
2ff2893
fixed "No Project" move handling
Adam-Color Sep 21, 2025
adaefa4
better validation for project names
Adam-Color Sep 21, 2025
62badd1
redesigned tracker_window
Adam-Color Sep 21, 2025
370c409
Update README.md
Adam-Color Sep 21, 2025
aa7895d
fixed session duplication bug
Adam-Color Sep 21, 2025
45e1a68
removed unnessesary warning message
Adam-Color Sep 25, 2025
1037bd2
fixed project name check implementation
Adam-Color Oct 1, 2025
f9a5756
Added about page
Adam-Color Oct 1, 2025
f0053ca
Added lock file functionality
Adam-Color Oct 1, 2025
6c6bcd4
more debugging info for updates
Adam-Color Oct 1, 2025
b0191ed
formatting fixes
Adam-Color Oct 1, 2025
1aa1454
add show_license GUI element
Adam-Color Oct 1, 2025
af4d45d
Make default font more readible
Adam-Color Oct 1, 2025
799c1b5
more formatting fixes
Adam-Color Oct 1, 2025
4c4bd74
fixed file path issue
Adam-Color Oct 1, 2025
655dd0a
removed unnessesary import
Adam-Color Oct 1, 2025
1557ba7
Implemented native macOS menu options
Adam-Color Oct 2, 2025
eeaa07c
minor build optimizations
Adam-Color Oct 2, 2025
9b164ff
fix windows menubar
Adam-Color Oct 2, 2025
c9715ee
redesigned pause/resume and stop buttons
Adam-Color Oct 2, 2025
6ae096c
Update python to 3.13
Adam-Color Oct 2, 2025
d960074
update readme
Adam-Color Oct 2, 2025
a1850a8
Fixed #27
Adam-Color Oct 2, 2025
7b8bbb3
bump psutil for noGIL support on macOS
Adam-Color Oct 2, 2025
f156034
add python info to about page
Adam-Color Oct 2, 2025
794adbd
versioning for 1.7.0
Adam-Color Oct 2, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 9 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
![version](https://img.shields.io/badge/Version-1.6.0-white.svg)
![version](https://img.shields.io/badge/Version-1.7.0-white.svg)
![license](https://img.shields.io/badge/License-GPL%20v3-blue.svg)
![python](https://img.shields.io/badge/Python-3.12-green.svg)
![python](https://img.shields.io/badge/Python-3.13-green.svg)

# AppUsageGUI
### Application Runtime Tracker

This program tracks the runtime of specified applications, organizing sessions into projects for better management. Users can create multiple projects, each containing multiple tracking sessions, providing comprehensive time tracking and organization capabilities.
This program tracks the runtime of specified applications, organizing sessions into projects. Users can create multiple projects, each containing multiple tracking sessions, providing comprehensive time tracking and data analysis.

## Installation

Expand All @@ -18,24 +18,25 @@ To install, follow the instructions for your platform found here:
### Contributions are welcome and needed! Here is a TODO list:

* Add integrations with professional applications
* Optimize everything
* Add support for tracking more than one executable per session
* Detach the GIL for windows version
* Add a better way to filter out non-GUI apps on macOS
* Full linux support with packages

NOTE: GIL is detached for the macOS build; use Python 3.13.7t

## How It Works

AppUsageGUI is a cross-platform desktop application built with Python and Tkinter that monitors application usage time with project-based organization. The application works by:

1. **Project Organization**: Users create projects to organize related tracking sessions, with each project containing multiple sessions
2. **Session Creation**: Before tracking begins, users select a project and name their session, establishing clear organization upfront
2. **Session Creation**: Before tracking begins, users select a project and name their session
3. **Process Monitoring**: Uses the `psutil` library to detect running applications and monitor their process status
4. **Time Tracking**: Implements a precise time tracker that runs in a separate thread, capable of pausing and resuming
5. **Session Management**: Creates named sessions within projects that can be saved, loaded, and continued across application restarts
6. **Data Persistence**: Saves session data with integrity checking using hash verification, organized by project directories
7. **Cross-Platform Support**: Handles Windows and macOS differences in process detection and GUI application filtering

The application follows a Model-View-Controller (MVC) architecture with separate logic and GUI components, ensuring clean separation of concerns and maintainable code.
The application follows a Model-View-Controller (MVC) architecture with separate logic and GUI components.

## Project and Session Structure

Expand Down Expand Up @@ -128,18 +129,9 @@ Each session file contains comprehensive tracking information:
}
```

### Benefits of Project Organization

1. **Better Organization**: Group related work sessions together
2. **Easier Management**: Quickly find and manage sessions by project
3. **Project Analytics**: View total time spent on specific projects
4. **Scalability**: Handle many sessions without interface clutter
5. **Backup & Restore**: Backup entire projects or migrate between systems
6. **Future Extensibility**: Foundation for project-specific settings and reporting

## Features

- **Project Management**: Organize sessions into projects for better organization and management
- **Project Management**: Organize sessions into projects for organization and management
- **Session Tracking**: Track the total runtime of any executable with named sessions
- **Session Continuation**: Continue from previous sessions within any project
- **User Customizable Rules**: Configure custom tracking rules and application filtering
Expand Down
22 changes: 12 additions & 10 deletions build.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import shutil
import subprocess
import platform
from src._version import __version__

# Project details
PROJECT_NAME = "AppUsageGUI"
Expand Down Expand Up @@ -31,25 +30,28 @@ def build_executable():
windows_only_1 = ""
else:
run_command('set PYTHONOPTIMIZE=1')
windows_only_1 = '--collect-all pywinauto'
windows_only_1 = '--collect-submodules pywinauto'
run_command(
f'{python_executable} -m PyInstaller -D --clean --name {PROJECT_NAME} '
f'--noconfirm '
f'--windowed --clean '
f'--windowed '
f'--add-data "src/core:core" '
f'--add-data "{icon_file}:." '
f'--collect-submodules core '
f'--collect-all psutil '
f'--collect-all tkinter '
f'--collect-all pynput '
f'--collect-all requests '
f'--collect-all PIL '
f'--add-data "LICENSE.txt:." '
f'{windows_only_1} '
f'--collect-submodules core '
f'--collect-submodules psutil '
f'--collect-submodules tkinter '
f'--collect-submodules pynput '
f'--collect-submodules requests '
f'--collect-submodules PIL '
f'--exclude-module PIL.tests '
f'--exclude-module tkinter.test '
f'--icon={icon_file} '
f'--add-data "src/_version.py:." '
f'--add-data "src/_path.py:." '
f'--target-architecture {platform.machine()} '
f'--debug=imports {ENTRY_POINT}'
f'{ENTRY_POINT}'
)

def clean_up():
Expand Down
2 changes: 1 addition & 1 deletion dev/macos_installer.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash
# This script is used to create the installer for the macOS version of the application
app_version='1.6.0'
app_version='1.7.0'

mv dist/AppUsageGUI.app dist/AppUsageGUI/

Expand Down
4 changes: 2 additions & 2 deletions dev/windows_installer.iss
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "AppUsageGUI"
#define MyAppVersion "1.6.0"
#define MyAppVersion "1.7.0"
#define MyAppPublisher "Adam Blair-Smith"
#define MyAppURL "https://github.com/Adam-Color/AppUsageGUI"
#define MyAppExeName "AppUsageGUI.exe"
#define MyInstallerName "AppUsageGUI_v1.6.0_WINDOWS_setup"
#define MyInstallerName "AppUsageGUI_v1.7.0_WINDOWS_setup"

[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
Expand Down
1 change: 1 addition & 0 deletions docs/install_windows.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
## Windows Installation Steps:
* download the windows setup .exe [here](https://github.com/Adam-Color/AppUsageGUI/releases/latest) (under the "assets" section)
* ensure that the old version of AppUsageGUI is closed if you are updating
* double-click the setup .exe to open it
* click "More info"
* click "Run anyway"
Expand Down
4 changes: 2 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
MouseInfo==0.1.3
psutil==5.9.8
psutil==7.1.0
pynput==1.8.1
PyGetWindow==0.0.9
PyMsgBox==1.0.9
Expand All @@ -14,4 +14,4 @@ rubicon-objc==0.5.0
pyinstaller==6.12.0
requests==2.32.4
pillow==11.3.0
pywinauto==0.6.8; sys_platform == "win32"
pywinauto==0.6.9; sys_platform == "win32"
2 changes: 1 addition & 1 deletion src/_version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "1.6.0"
__version__ = "1.7.0"
Loading