Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
173 commits
Select commit Hold shift + click to select a range
48db421
add initial files
KumudithaSilva Oct 8, 2025
79d687f
Add main ui and related files
KumudithaSilva Oct 8, 2025
9beca0c
add resource loader and update main
KumudithaSilva Oct 8, 2025
82e8406
add images abd word list
KumudithaSilva Oct 8, 2025
2e7cc98
add japanese words csv file
KumudithaSilva Oct 8, 2025
19fcf8c
add front card and buttons
KumudithaSilva Oct 9, 2025
700ca71
add images and initialize lexiui
KumudithaSilva Oct 9, 2025
baa9a84
add known and unknown buttons
KumudithaSilva Oct 14, 2025
cf98dc0
Add the LexicalController
KumudithaSilva Oct 14, 2025
444efa3
Add LexicalController (TODO: extract load_data logic)
KumudithaSilva Oct 14, 2025
160d848
add default value for word
KumudithaSilva Oct 14, 2025
db61c09
Makes the buttons flat and remove borders
KumudithaSilva Oct 14, 2025
4be7406
refactor the UI
KumudithaSilva Oct 15, 2025
3453565
Add DataRetriever
KumudithaSilva Oct 15, 2025
203a18f
Remove the load_data method, add static pick_random_word method
KumudithaSilva Oct 15, 2025
cb8254a
Add LexiCardError
KumudithaSilva Oct 15, 2025
eaaa551
Add DataRetriever that load CSV data
KumudithaSilva Oct 15, 2025
74ca6ab
Add interfaces
KumudithaSilva Oct 21, 2025
224cdb0
Add interfaces
KumudithaSilva Oct 21, 2025
195aec2
Refactor the files
KumudithaSilva Oct 21, 2025
f181cf6
Refactor CSVDataRetriever with Factory pattern and PEP8 styling
KumudithaSilva Oct 21, 2025
d22fa0c
Add error files
KumudithaSilva Oct 21, 2025
fc7f3c6
Verify factory and retriever can be initialized correctly
KumudithaSilva Oct 21, 2025
a856029
Add singleton metaclass
KumudithaSilva Oct 27, 2025
2b7910a
implemented resourceLoader with SingletonMeta class
KumudithaSilva Oct 27, 2025
6702aa5
change type to ABCMeta
KumudithaSilva Oct 28, 2025
471787e
Add images with loader, ui, retriever and controller
KumudithaSilva Oct 28, 2025
100182b
Change the os path dir location
KumudithaSilva Oct 28, 2025
b1eaae2
Added UI
KumudithaSilva Oct 28, 2025
55f6d29
Added IController
KumudithaSilva Oct 28, 2025
acca1b4
add tested ui
KumudithaSilva Oct 29, 2025
647b5fb
modify the ui to tested
KumudithaSilva Oct 29, 2025
017821c
Add builders
KumudithaSilva Oct 29, 2025
ef49cdd
Add director
KumudithaSilva Oct 29, 2025
0c966d9
Add main UI class
KumudithaSilva Oct 29, 2025
10d3086
removed test ui
KumudithaSilva Oct 30, 2025
799017c
added audio image
KumudithaSilva Oct 30, 2025
43379b5
Add LexiUiBuilder contract
KumudithaSilva Oct 30, 2025
3fe9904
added DesktopLexiUiBuilder
KumudithaSilva Oct 30, 2025
9264cd5
added MacLexiUiBuilder
KumudithaSilva Oct 30, 2025
a7cf8b6
added base LexiUi
KumudithaSilva Oct 30, 2025
54ad76f
add LexiUiDirector
KumudithaSilva Oct 30, 2025
941d1ee
modified main
KumudithaSilva Oct 30, 2025
aca80f0
removed unnecessary files
KumudithaSilva Nov 4, 2025
4c307f4
removed unnecessary files MacLexiUiBuilder
KumudithaSilva Nov 4, 2025
1f8f261
removed unnecessary files MacLexiUiBuilder
KumudithaSilva Nov 4, 2025
1a20a0a
removed unnecessary files DesktopLexiUiBuilder
KumudithaSilva Nov 4, 2025
a8800b0
Add correct error files names
KumudithaSilva Nov 4, 2025
d5c5a91
add correct IResourceLoader folder name
KumudithaSilva Nov 4, 2025
a520a1d
moved to interface separate folders
KumudithaSilva Nov 4, 2025
c3feda6
Added IUiManager for UI updates and managing initialization.
KumudithaSilva Nov 4, 2025
24ad306
Added IUiDirector for directing the build sequence of the UI
KumudithaSilva Nov 4, 2025
8db2348
Added UiOrchestrator for components with the controller actions
KumudithaSilva Nov 4, 2025
c0b0f37
Added Mac-specific UiOrchestrator
KumudithaSilva Nov 4, 2025
db6ec1e
Added UiManager concreate class
KumudithaSilva Nov 4, 2025
a19a96b
Added Mac-specific and Desktop UI
KumudithaSilva Nov 4, 2025
5ed1adc
Added Mac-specific and Desktop builders
KumudithaSilva Nov 4, 2025
bb142fa
Added IUiBuilderMac, contract interface for Mac builders
KumudithaSilva Nov 4, 2025
4f20934
Add IUiMac interface for macOS-specific UI behavior
KumudithaSilva Nov 4, 2025
cd67c90
Add IUiOrchestrator interface for Desktop UI behavior
KumudithaSilva Nov 4, 2025
6442e32
Add IUiOrchestrator interface for Desktop UI behavior
KumudithaSilva Nov 4, 2025
c764380
Add LexiUiDirector to orchestrate UI builder workflow
KumudithaSilva Nov 4, 2025
6b3067a
Add GitHub Actions workflow for linting (flake8, isort, black)
KumudithaSilva Nov 4, 2025
54b2ddd
Add main entry point with OS-based UI builder and orchestrator setup
KumudithaSilva Nov 4, 2025
bfcaf34
return ui root
KumudithaSilva Nov 5, 2025
55cc795
added Handle logic of generating meaning contract
KumudithaSilva Nov 5, 2025
2e96672
add rest title and word contract
KumudithaSilva Nov 5, 2025
d54a324
added scheduler contract
KumudithaSilva Nov 5, 2025
e75737e
replace ui with iui manager
KumudithaSilva Nov 5, 2025
b9f99a1
add mac title to mac builder
KumudithaSilva Nov 5, 2025
fb4b512
wire the ui manager instead of ui
KumudithaSilva Nov 5, 2025
4e7d637
added concrete scheduler
KumudithaSilva Nov 5, 2025
42dd13a
added concrete update title and words methods
KumudithaSilva Nov 5, 2025
83a7144
Add correct name
KumudithaSilva Nov 5, 2025
979d6b7
added new parameters for IUiManager initialize Ui
KumudithaSilva Nov 5, 2025
4364232
Added dynamic langauge name change
KumudithaSilva Nov 5, 2025
23050bb
Removed initializing ui
KumudithaSilva Nov 5, 2025
554f4f0
Add concrete UiManager initialize ui
KumudithaSilva Nov 5, 2025
c17b81e
reformated, add missing comma
KumudithaSilva Nov 5, 2025
f782f9d
reformated, add missing spaces
KumudithaSilva Nov 5, 2025
829dbe5
reformated, add missing spaces
KumudithaSilva Nov 5, 2025
4ac45b7
reformated, add missing spaces
KumudithaSilva Nov 5, 2025
d5ac777
add next button
KumudithaSilva Nov 6, 2025
8e4fd1f
add next button to builder
KumudithaSilva Nov 6, 2025
81713ba
renamed basic methods
KumudithaSilva Nov 6, 2025
3239048
add contract to iui set net callback
KumudithaSilva Nov 6, 2025
86dd8f9
add contract to iui set net callback to mac
KumudithaSilva Nov 6, 2025
1e4ad9a
addd contract run after method to ui manager
KumudithaSilva Nov 6, 2025
4e9036b
removed auto schedule method
KumudithaSilva Nov 6, 2025
bec9b16
add handle next work
KumudithaSilva Nov 6, 2025
325f884
add concreate run after method
KumudithaSilva Nov 6, 2025
ea8638b
remove schedule auto method and add initial word loading method
KumudithaSilva Nov 6, 2025
124f9bf
renamed methods
KumudithaSilva Nov 6, 2025
33150e1
change button and canvas layout
KumudithaSilva Nov 6, 2025
760d7f7
add new next button to builder
KumudithaSilva Nov 6, 2025
34b40ff
add new next button image
KumudithaSilva Nov 6, 2025
e8a523d
add new next button image
KumudithaSilva Nov 6, 2025
b95dae6
reformated, removed spaces
KumudithaSilva Nov 6, 2025
b74d2ce
reformated, indent all images
KumudithaSilva Nov 6, 2025
b4a76ff
reformated, add spaces
KumudithaSilva Nov 6, 2025
c31310b
reformated, add spaces and indented
KumudithaSilva Nov 6, 2025
36442a1
reformated, indented all images
KumudithaSilva Nov 6, 2025
e7ceff3
reformated, add spaces
KumudithaSilva Nov 6, 2025
fb5743f
reformated, remove extra space
KumudithaSilva Nov 6, 2025
c1dcd64
add images to ui manager
KumudithaSilva Jan 28, 2026
f93b16e
Replaced Tkinter Label widgets with canvas text items
KumudithaSilva Jan 28, 2026
a855a70
update_canvas before displaying new word
KumudithaSilva Jan 28, 2026
6ab0309
introduce update_canvas and reset_canvas
KumudithaSilva Jan 28, 2026
6068e60
add update_canvas and reset_canvas methods
KumudithaSilva Jan 28, 2026
b434399
removed unused tkinter widget
KumudithaSilva Jan 28, 2026
4a5c1a5
add CI/CD pipeline
KumudithaSilva Jan 28, 2026
25a06c6
add CI/CD pipeline
KumudithaSilva Jan 28, 2026
cd64789
add CI/CD pipeline
KumudithaSilva Jan 28, 2026
02c6197
dynamic file path to DataRetrieverFactory
KumudithaSilva Jan 29, 2026
6c07bcf
Add Interface for saving vocabulary data
KumudithaSilva Jan 29, 2026
0e786e0
Add Concrete implementation of IDataSaver with factory
KumudithaSilva Jan 29, 2026
417716b
updated IDataRetriever with DataRetrieverFactory interface
KumudithaSilva Jan 29, 2026
68e7f62
updated main
KumudithaSilva Jan 29, 2026
e79716e
restyle, added space
KumudithaSilva Jan 29, 2026
1547019
restyle, removed unused libraries
KumudithaSilva Jan 29, 2026
316b401
restyle, add extra space
KumudithaSilva Jan 29, 2026
03e3e06
restyle, remove indentation
KumudithaSilva Jan 29, 2026
92c7fb2
add icons
KumudithaSilva Jan 30, 2026
9db023c
modify load data file name
KumudithaSilva Jan 30, 2026
8cc1535
add icon to main
KumudithaSilva Jan 30, 2026
21d449a
add windows builder
KumudithaSilva Jan 30, 2026
4db38d2
updated CI/CD
KumudithaSilva Jan 30, 2026
396c852
updated CI/CD with pillow
KumudithaSilva Jan 30, 2026
5c95769
updated CI/CD with bundles the icon to pyinstaller
KumudithaSilva Jan 30, 2026
96428da
updated CI/CD with bundles the icon to pyinstaller
KumudithaSilva Jan 30, 2026
0f46dd1
updated CI/CD with bundles the icon to pyinstaller
KumudithaSilva Jan 30, 2026
97798fd
updated CI/CD with bundles the icon to pyinstaller
KumudithaSilva Jan 30, 2026
5e1f38b
fixed pyinstaller fill path
KumudithaSilva Jan 31, 2026
2dbce60
removed directory names, commented save to file
KumudithaSilva Jan 31, 2026
1c353c0
moved files to relevant directories
KumudithaSilva Jan 31, 2026
6240e96
move files and create backup files
KumudithaSilva Jan 31, 2026
5e1c894
updated CI/Cd with data file
KumudithaSilva Jan 31, 2026
e9052c2
add word manager contract
KumudithaSilva Jan 31, 2026
c856a12
add concrete wordManager for consistent handler for all word-related …
KumudithaSilva Jan 31, 2026
e09dc0d
removed data saver
KumudithaSilva Jan 31, 2026
8b0af19
added data saver
KumudithaSilva Jan 31, 2026
5191875
add contract of DataRemover
KumudithaSilva Jan 31, 2026
ab8d870
add concrete data remover that remove known words from original source
KumudithaSilva Jan 31, 2026
2fb8469
add abs path for both local and pyinstaller
KumudithaSilva Jan 31, 2026
4b3b783
add abs path for both local and pyinstaller
KumudithaSilva Jan 31, 2026
df8e0af
add abs path for both local and pyinstaller
KumudithaSilva Jan 31, 2026
281bcc0
fixed libraries with isort
KumudithaSilva Jan 31, 2026
8575e97
fixed libraries with isort
KumudithaSilva Jan 31, 2026
bc6792e
fixed style add extra spaces
KumudithaSilva Jan 31, 2026
059fda0
add pyttsx3
KumudithaSilva Feb 1, 2026
805734e
testing audio service
KumudithaSilva Feb 1, 2026
51dcf16
add controller and MacUiOrchestrator handel speak
KumudithaSilva Feb 1, 2026
1c477e5
Abstract base class for tts services.
KumudithaSilva Feb 1, 2026
e41e2f8
add handle speak abstract method
KumudithaSilva Feb 1, 2026
17475bb
develop handle speak method
KumudithaSilva Feb 1, 2026
e4cfa86
develop AudioService with pyttsx3
KumudithaSilva Feb 1, 2026
a869ff3
style changes and refactored
KumudithaSilva Feb 1, 2026
b1cf301
removed logs
KumudithaSilva Feb 1, 2026
729a864
modify the controller contract handle next word with show its meaning…
KumudithaSilva Feb 2, 2026
80e50db
Meaning display moved to handle next word.
KumudithaSilva Feb 2, 2026
2e77d0f
refactor isort
KumudithaSilva Feb 2, 2026
4bc28d2
add importable packages
KumudithaSilva Feb 2, 2026
a385a6e
add test cases
KumudithaSilva Feb 2, 2026
0fb81e7
updated CI/CD with pytest
KumudithaSilva Feb 2, 2026
05ca3cb
updated CI/CD build, add needs pytest
KumudithaSilva Feb 2, 2026
9672b98
updated CI/CD pytest, added controller tests
KumudithaSilva Feb 2, 2026
b30268c
added controller tests
KumudithaSilva Feb 2, 2026
f7b3145
add PEP 8 spacing and formatting
KumudithaSilva Feb 3, 2026
f54939f
add readme.md file
KumudithaSilva Feb 3, 2026
49fd0f9
updated CI/CD with build app only on master branch
KumudithaSilva Feb 3, 2026
fbb0fc2
add correct UI Construction
KumudithaSilva Feb 3, 2026
89ed2d9
correct the indentation
KumudithaSilva Feb 3, 2026
0a4366c
Update README.md
KumudithaSilva Feb 3, 2026
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
3 changes: 3 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[flake8]
max-line-length = 88
extend-ignore = E203, E501, W503
122 changes: 122 additions & 0 deletions .github/workflows/lexicards-ci-cd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
name: Lexicard Python Continuous Testing

on:
push:
branches:
- '**'
pull_request:
branches:
- '**'

jobs:
flake8:
name: Lint with flake8
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.10'
- run: pip install flake8
- run: flake8 .

black:
name: Check code formatting with black
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.10'
- run: pip install black
- run: black .

isort:
name: Check import order with isort
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.10'
- run: pip install isort
- run: isort .

bandit:
name: Security linting with Bandit
runs-on: ubuntu-latest
needs: [flake8, black, isort]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.10'
- run: pip install bandit
- run: bandit -r ${{ github.workspace }}/src -ll

pytest:
name: Run Tests with Pytest
runs-on: ubuntu-latest
needs: [flake8, black, isort, bandit]

steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.10'
- run: |
pip install pytest

- name: Run Audio Tests
run: pytest tests/audio/test_audio_service.py

- name: Run Data Services Tests
run: pytest tests/data/test_data_service.py

- name: Run Manager Tests
run: pytest tests/manager/test_manager.py

- name: Run Controller Tests
run: pytest tests/controller/test_controller.py

build:
runs-on: windows-latest
needs: [pytest]
if: github.ref == 'refs/heads/master'
steps:
- uses: actions/checkout@v3

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.12.9

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install build pyinstaller pillow pyttsx3

- name: Build Python package (wheel and sdist)
run: python -m build

- name: Build Windows executable with PyInstaller (include assets)
shell: cmd
run: |
pyinstaller lexicards/main.py --onefile --noconsole --name LexiCards --icon=lexicards/assets/images/lexicards-main.ico ^
--add-data "lexicards/assets/images;assets/images" ^
--add-data "lexicards/assets/data;assets/data"

- name: Show dist folder contents
run: dir dist

- name: Upload Python package artifacts
uses: actions/upload-artifact@v4
with:
name: python-package
path: dist/*.whl

- name: Upload Windows executable artifact
uses: actions/upload-artifact@v4
with:
name: LexiCards-exe
path: dist/LexiCards.exe
207 changes: 207 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[codz]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py.cover
.hypothesis/
.pytest_cache/
cover/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
.pybuilder/
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version

# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock

# UV
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
#uv.lock

# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
#poetry.toml

# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
#pdm.lock
#pdm.toml
.pdm-python
.pdm-build/

# pixi
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
#pixi.lock
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
# in the .venv directory. It is recommended not to include this directory in version control.
.pixi

# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Environments
.env
.envrc
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/

# Abstra
# Abstra is an AI-powered process automation framework.
# Ignore directories containing user credentials, local state, and settings.
# Learn more at https://abstra.io/docs
.abstra/

# Visual Studio Code
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
# and can be added to the global gitignore or merged into this file. However, if you prefer,
# you could uncomment the following to ignore the entire vscode folder
# .vscode/

# Ruff stuff:
.ruff_cache/

# PyPI configuration file
.pypirc

# Cursor
# Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to
# exclude from AI features like autocomplete and code analysis. Recommended for sensitive data
# refer to https://docs.cursor.com/context/ignore-files
.cursorignore
.cursorindexingignore

# Marimo
marimo/_static/
marimo/_lsp/
__marimo__/
2 changes: 2 additions & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
include README.md
include LICENSE
Loading