- chore: migrate from poetry to uv for the sake of improving performance and dealing with conflicting sub-dependencies
- feat(core): add colors to logs based on their level to make them more readable
- chore: use dynamic version field in
pyproject.toml
based onhatch.build.hooks.vcs
and publish dev packages on pypi for all pushes to the main branch and all pull requests targeting the main branch - chore: remove what has remained from poetry in the codebase
- refactor(core): avoid truncating or coloring logs in log files
- feat(web-ui): add web-ui service
- feat(web-ui): process input demands, dispatched on the bus
- feat(keypad): ability to use key-combinations, set key combinations for screenshot, snapshot and quit
- feat(web-ui): add
fields
inInputDescription
withInputFieldDescription
data structures to describe the fields of an input demand in detail - fix(users): avoid setting user as sudoer when it performs a password reset
- feat(ip): use pythonping to perform a real ping test instead to determine the internet connection status instead of opening a socket
- feat(core): user can start/end recording actioning by hitting r, actions will be recorded in
recordings/
directory and the last recording can be replayed by hittingctrl+r
- closes #187 - feat(core): use new
SpinnerWidget
of ubo-gui to show unknown progress in notifications, and addGeneral
sub menu toSystem
settings menu to host ubo-pod/ubo-app related settings, currently it hasDebug
toggle to control a debug feature ofHeadlessWidget
- closes #190 - feat(core): add recording and replaying indicators, avoid replaying while recording and vice versa, move keypad events to its own reducer as it has grown too big
- hotfix(users): do not mark the generated password as expired as it will cause boot failures as the os can't autologin into the ubo user when its password is expired
- hotfix(core): render blank screen on the display when
FinishEvent
is dispatched (makes sure display is clean after powering off)
- feat(display): add
DisplayCompressedRenderEvent
as a compressed version ofDisplayRenderEvent
- feat(rpc): add reflection to rpc server, limited to root service, but good enough for health checking purposes
- refactor(rpc): preserve the order of fields of
oneof
declarations generated forUnion
types - refactor(audio): convert
AudioPlayChimeEvent
s toAudioPlayAudioEvent
s instead of directly playing the chime - feat(rpc): add
UBO_GRPC_LISTEN_HOST
andUBO_GRPC_LISTEN_PORT
environment variables - fix(docker): make sure the
image_menu
view - used nested in an autorun - is re-called when ip addresses are provided
- feat(rpc): add a proto generator which parses actions and events files and generates proto files for them
- feat(rpc): add
rpc
service withdispatch
method to let external services dispatch actions and events to the redux bus - fix(core): check if items added by
RegisterRegularAppAction
orRegisterSettingsAppAction
cause duplicate keys and raise an informative error if so - refactor(core): truncate long log items for log level
DEBUG
or lower to avoid cluttering the logs - refactor(tests): add a delay between initializing different services to make sure they always run in the same order
- feat(rpc): add
subscribe_event
to the rpc service to let external services subscribe to events - closes #1 - test: better tooling for debugging uuid generation in tests
- fix(rpc): deal with messages with no prefix_package meta field
- refactor(core): prepare
REGISTERED_PATHS
earlier for each service, so that import error messages are more meaningful - fix(vscode): stop and uninstall vscode service when logged out and install and start it when logged in - fixes #114
- feat(display): add display service and put display content in the bus via
DisplayRenderEvent
- fix(vscode): restart vscode process whenever a login/logout occurs
- fix(docker): avoid instantiating
RegisterRegularAppAction
in the reducer before service is loaded as it needs service to be registered
- feat(lightdm): set wayland as the default session for lightdm after installing raspberrypi-ui-mods
- refactor(core): rearange menus
- refactor(docker): move docker settings from docker menu in apps to docker menu in settings, and move all docker apps up to make them direct children of the main apps menu, rename main "Apps" menu to "docker" apps and "Apps" inside settings menu to "Docker"
- build(packer): remove /etc/xdg/autostart/piwiz.desktop to avoid running piwiz as we already set ubo user
- fix(core): keep a reference for background tasks created with
async_.create_task
to avoid them getting garbage collected and cancelled - fix(lightdm): update the menu when installation is done
- refactor(lightdm): reorder settings menu and replace "utilities" with "desktop"
- feat(lightdm): show a notification when rpi-connect is started to inform user desktop should be installed for the screen sharing to work
- fix(lightdm): install raspberrypi-ui-mods instead of lightdm to activate wayland and enable rpi-connect screen sharing
- test: fix an issue in tests which caused minor random store state changes, ruining snapshot assertions
- test: add vscode and rpi-connect services to
test_all_services
test - refactor(housekeeping): improve store imports
- feat(store): add
DispatchItem
andNotificationDispatchItem
as convenienceActionItem
subclasses to dispatch actions and events - feat(users): add
users
service to create, list, delete and change password of system users - feat(ci): add
ubo-pod-pi5
to the list of github runners fortest
, also use it fordependencies
andtype-check
jobs - refactor(core): improve update-manager to be event driven
- feat(core): add
UBO_ENABLED_SERVICES
to complementUBO_DISABLED_SERVICES
in controlling which services should load - refactor(vscode): make it regularly read vscode status from its command line interface every second
- fix(notifications): notifications not getting closed nor updated
- refactor(core): use
dpkg-query
instead ofapt
python api as loadingCache
inapt
is slow and use it in docker service - refactor(system): add response for docker commands and service commands
- feat(lightdm): add installation options for lightdm package
- refactor(notifications): update the
NotificationWidget
when it is visible and a new notification with the same id is dispatched
- build(packer): set
autologin-user
toubo
in/etc/lightdm/lightdm.conf
- feat(core): improve update notification for phase-2 of the update process and add a spinner on top-left
- fix(core): avoid side-effects after
FinishEvent
is dispatched.
- fix(wifi): improve the logic of wifi onboarding notification
- feat(core): add base image to
/etc/ubo_base_image
and about page
- refactor(core): general housekeeping, improve resource management in runtime and test environment, minor bug fixes
- build(core): update dependencies to their latest versions
- fix(audio): add a recovery mechanism for audio service to rebind the sound card if it is not available - closes #83
- fix(voice): remove the gap between sentences
- fix(core): change the power-off menu item icon - closes #151
- refactor(core): migrate
ubo_app/services.py
totypings/ubo_handle.pyi
as it was only providing types - fix(core): make sure app exits gracefully before shutdown/reboot and atexit callbacks run - closes #150
- refactor(core): kill the app (so that it restarts) when the reset button is pressed for 0.5 seconds or more and reboot the device when it is pressed for 3 seconds or more - closes #116
- fix(vscode): after login with vscode, the gui now goes back to login code page - closes #143
- fix(core): updating items of the pages after the first page, not being reflected on the screen - closes #149
- feat(rpi-connect): implement
rpi-connect
underRemote
menu - closes #139 - fix(core): update manager downloads the latest
install.sh
and runs it to do the update - closes #152 - feat(core): add signal management for ubo_app process - closes #156
- fix(core): use fasteners read-write lock implementation for the persistent store - closes #158
- feat(core): improve the user experience of update-manager by making it more verbose about the current state of the update progress - closes #153
- feat(notifications): add
progress
andprogress_weight
properties toNotification
object and show the progress on the header of the app - feat(core): show the progress of the update using the new
progress
property of theNotification
object - fix(camera): render the viewfinder on the display even if the display is paused - closes #78
- refactor(core): make the power-off menu, a sub-menu with power-off and reboot action items - closes #123
- fix(core): headed menus not showing the first item in the list - closes #144
- refactor(system): generate the hostname of the device based on a hash of its serial number
- feat(core): show hostname of device on the home page - closes #128
- feat(core): long-pressing the reset button for 3 seconds or more reboots the device - closes #116
- fix(keypad): keypad becoming unresponsive if a key was pressed while the app was loading - closes #118
- fix(camera): closing the camera viewfinder will close the picamera instance so that it can be used again
- refactor(core): use python-fake for faking
- refactor(tests): wait for wifi status icons in
test_wireless
- refactor(core): move
ubo_app.utils.loop
toubo_app.service
and add service properties likeservice_id
,name
,label
, etc as module level variables to it - refactor(core): make
UboModuleLoader
to keep a weakref of the module in its cache instead of an actual reference - refactor(core): use the new
key
property of ubo-guiItem
s to keep opened menus open when something changes in the parent menus - closes #145, closes #146, closes #147 - fix(core): make sure logs are set up after reading environment variables and before starting the app
- feat(keypad): add epoch time to keypad actions and events in
time
field - feat(voice): add piper engine to voice service as the default engine and a menu to select the engine - closes #120
- refactor(notification): add
NotificationExtraInformation
withtext
,piper_text
, andorca_text
to replace the simple strings passed toextra_information
field of theNotification
object - refactor(audio): rename sound service to audio service
- refactor(audio): drop
pyaudio
and usesimpleaudio
for playback - feat(core): setting
DEBUG_MODE_MENU
environment variable to truthy values will show a representation of the menu in the logs whenever the current menu is changed - fix(ip): close sockets opened for testing the internet connection - closes #126
- fix(core): add
rpi-lgpio
to dependencies to make the LCD work on RPi5 - fix(core): add
dtoverlay=spi0-0cs
to/boot/firmware/config.txt
to make the LCD work on RPi5 - refactor: general housekeeping, improving typing, linting, resource management, etc
- fix(notifications): avoid auto-closing notifications shown in the notification center
- feat(camera): fail-proof the camera initialization when no camera is connected
- fix(ci): run typecheck on ubo-pod to avoid missing packages
- fix(core): move hostname generation code from
bootstrap()
tosetup()
- closes #141 - build: update bookworm images to the latest version 2024-07-04
- refactor: update to the latest version of
headless-kivy
and migrate its hardware related code to this codebase - refactor(sensors): migrate initialization of i2c sensors out of the read function so that it happens once
- fix(system): disable led-ring in RPi5 as it is not supported yet
- feat: make tests running on an ubo pod visible on its screen
- refactor: rename "Update Code CLI" to "Redownload Code" - closes #117
- refactor: wireless flow test is complete, during this process debugging and refactoring is done in different parts of code as the issues were found - closes #52
- feat(core): make file handlers in logging
RotatingFileHandler
s - feat(tests): add
ChooseMenuItemByIconEvent
,ChooseMenuItemByIndexEvent
,ChooseMenuItemByLabelEvent
helper events to be used in tests - feat(tests): a
setup.sh
intests
directory or any of its parent directories is sourced before running tests - feat(tests): add
wait_for_menu_item
andwait_for_empty_menu
fixtures
- feat(tests): add
pyfakefs
to mock filesystem in tests - feat(tests): add
set_persistent_storage_value
to app fixture - feat(tests): add
initial_wait
,attempts
andwait
parameters tostability
fixture - fix(vscode): no longer schedule a status check for vscode every 5 seconds, it now only checks the status when the it runs a command using vscode, one second after running the command and 4 seconds after that
- ci(github): fix release workflow not including assets
- fix(vscode): show a success notification when the login process is completed instead of when the service runs #96
- refactor(vscode): add name of the vscode instance to the sub heading of the vscode menu when it is running
- fix(vscode): set a timeout for vscode commands - closes #101
- feat(docker): dedicated menu for logging out of registries
- fix(notifications): notifications aren't dismissed when the back button is pressed - closes #104
- fix(voice): update the status message in the voice setup page when the access key is set/cleared - closes #105
- fix(camera): back button in the camera viewfinder doesn't cancel the parent application/menu - closes #106
- fix (vscode): schedule vscode status check using
kivy.clock.Clock
instead ofasyncio
- closes #101
- fix(docker): handle the case when ip interfaces are not initialized yet
- fix(vscode): show an indicator when it is pending url generation
- fix(core): avoid multiple initial overlaying frames #91
- feat(core): pressing the home button navigates the user to the home page #84
- refactor(wifi): change the onboarding notification messages and make voice service load before wifi service by changing its priority #88
- fix(core): use latest version of headless-kivy-pi to avoid the static noise shown before the first frame is ready to be rendered #86
- build(bootstrap): set
UBO_SERVICES_PATH
to/home/{{USERNAME}}/ubo_services/
in the service file so that user can easily add their custom services - fix(voice): remove "clear access key" item when access key is not set #97
- fix(voice): update pvorca to 2.1.0 as they suddenly yanked 1.4.0 in pypi #103
- refactor(vscode): flatten vscode menu items into its main menu #102
- feat(vscode): show a notification with chime and led feedback when VSCode successfully logs in #96
- feat(ip): make the internet icon red when there is no connection #95
- fix(docker): remove ngrok dashboard url from
qrcode_input
prompt message #90 - fix(core): update ubo-gui to the latest version to align menu items with the physical buttons - closes #93
- refactor(docker): update ngrok extra information text messages - closes #100
- feat(wifi): the wireless onboarding suggestion notification is shown when the device is not connected to any network and it hasn't been shown earlier #71
- feat(notifications):
actions
ofNotification
object are respected and are actually shown in the notification, their type is inheriting the originalActionItem
and addsdismiss_notification
boolean to it - feat(tests): stability fixture saves all the snapshots and writes them to the filesystem if it ever fails
- feat(core): setup error handler for event loops, previously errors happening in event loops were silence
- refactor: all
asyncio.create_subprocess_exec
calls now redirect theirSTDOUT
andSTDERR
toDEVNULL
orPIPE
to avoid noise in output - fix(qrcode): qr code sets its state correctly after back button is pressed on it
- fix(docker): qr code output for exposed ports doesn't bundle ip addresses of the device in a single entity, instead a separate qr code is generated for each ip
- refactor: notifications and qr-code prompts now show short messages in their front page and long messages in their extra information section #80
- refactor(wifi): reuse
qrcode_input
instead of the old manual way of taking input from qr code - feat(qrcode):
qrcode_input
accepts anextra_information
parameter and passes it to the prompt notification - feat(notification): add an
on_close
callback to theNotification
object, called when the notification is closed - feat: add
OpenApplicationEvent
andCloseApplicationEvent
events - feat(voice): automatically remove invalid characters not readable by picovoice from the text to be read so that those characters can still be visible in the text
- build(installation): set
XDG_RUNTIME_DIR
inbashrc
to make interacting with usersystemd
services easier - fix(vscode): remove timestamp from state #79
- feat(vscode): add vscode tunnel support: users can download the cli binary, login, install the service and see the tunnel url as qr code #17
- build(development): add
Dockerfile
s for development and testing - docs(development): instructions on setting up development environment and running tests
- refactor(core): reorganize settings menu #69
- refactor(style): add icons to menu titles
- refactor(core): make pagination more obvious #69
- refactor(core): render the next and previous menu items in place of footer/header when there is such item #76
- fix(notifications): scrollbar doesn't wrap around when scrolling up anymore
- build(bootstrap): generate a semi-unique id for the device and use it as its hostname, this is to reduce the risk of collision in the network #70
- refactor(ssh): show hostname in the notification of the successful account creation #70
- refactor(ssh): avoid letters I, i, l and O in the generated password #70
- feat(wifi): use voice action to read the scan hint (instead of mehrdad's voice)
- feat(camera): render a box in viewfinder for the QR code to be scanned #23
- feat(core): organize settings in four different categories of connectivity, interface, system and apps
- feat(core): parse pronunciation hints in notification's extra info and render them as normal text while passing them to picovoice (used for pronunciation of ssh for example)
- feat (core): add shortcut
s
to write a json dump of the store intosnapshot.json
- feat(core): add dill package and use it for pickling complex datatypes
- feat(core): add secrets module to abstract storing, recalling and removing secrets
- feat(core): add persistent_store module to abstract storing and recalling store elements
- feat(voice): use the new secrets module to save and load picovoice access key
- feat(docker): use the new secrets module to save and load passwords of different registries
- feat(docker): use the new persistent_store module to save and load docker registry to username mapping
- feat(sound): use the new persistent_store module to save and load playback volume, capture volume, and their mute state
- feat(notification): make the extra information screen scrollable
- build(bootstrap): add
dtoverlay=gpio-fan,gpiopin=22,temp=60000
to/boot/firmware/config.txt
to make the fan run if CPU temperature passes 60℃ #64 - fix(audio): run the original
install.sh
script ofwm8960-soundcard
to make the audio work #53 - build(packer): mount the first partition of the image in
/boot/firmware
instead of/boot
to be compatible with the new linux kernel - ci(github): download and cache images as it is the slowest part of the build
- feat(sound):
SoundPlayAudioEvent
action for playing an audio sample with type ofSequence[int]
- feat(voice): add new service voice with
VoiceReadTextAction
, it uses orca service from picovocie to read text with human voice - feat(notification): read the extra information of the notification when opened
- feat(ssh): force password change after first login for temporarily created accounts
- feat(core): notifications now can have an optional
extra_information
field which will cause the notification widget to render an info icon which opens a separate screen to render the extra information - fix(docker): open_webui now runs in its own network as
hostname
andnetwork_mode
can't be used together #63 - refactor(keypad): reduce complexities
- feat(keypad): dispatch release actions
KeypadKeyReleaseAction
#39 - fix(keypad): dispatch the state of mic key when keypad service initializes #1
- fix(notification): avoid passing color components bigger than 255
- feat(ssh): show an error message if anything goes wrong during creating temporary account instead of crashing
- fix(keypad): return from
key_press_cb
if no input is changed - fix(docker): pulling images is now done with
client.images.pull
#63
- build(packer): disable userconfig service
- feat(ssh): move username and password to the header of notification so that they render bigger
- fix(system): don't close socket connection after writing the response, client already takes care of closing the connection
- build: use latest images - 2024-03-15 - of RPi as base images
- feat(core): read serial number from eeprom and add it to sentry reports
- feat(core): add screenshot action (triggered with
p
key) - fix(keypad): make keypad compatible with kernel 6.6 by using gpiozero
- refactor(core): add
shutdown
method for service threads and worker threads to gracefully cancel async jobs instead of immediately terminating event loops - refactor(core): remove
_run_in_executer
from async utilities - refactor: use
logger.exception
in exception handlers - ci: use latest versions of ruff and pyright
- feat(lightdm): add lightdm service
- build(packer): disable lightdm service by default
- fix(sound): try restarting
pulseaudio
every 5 seconds when it is not ready (it may be not available in the first boot of desktop image at least) - refactor(ssh): use our own
monitor_unit
utility function and dropcysystemd
- ci: set
SENTRY_RELEASE
- feat(system): setup sentry for
system_manager
- refactor(core):
send_command
is now an async function utilizingasyncio
streams
- feat(system_manager): commands for starting/stopping/enabling/disabling services
- feat(ssh): menu items for starting/stopping/enabling/disabling ssh service
- feat(ssh): monitor ssh service and update menus accordingly
- refactor: move all system-dependent preparations to
setup.py
to be reused in runtime, tests, etc (currently mostly mocking modules for macOS) - refactor(bootstrap): move bootstrap from
ubo bootstrap
to its own binarybootstrap
to keep its runtime isolated and avoid unintended side effects - fix(ci-cd): expand the size of the filesystem for the default image as it was running out of space during the build process and add
apt-get upgrade
- feat(core): add
qrcode_input
utility function to let developers easily take input using qrcode through camera, wireless flow now also uses this function, in dev environment it reads the text from/tmp/qrcode_input.txt
instead - feat(docker): add
environment_variables
andcommand
to image description, both allowing functions as their values, these functions get evaluated when the image is being created - refactor(core): improve
load_services
so thatubo_handle.py
files are enforced to be pure and can't import anything, services can start importing once their thread is started. - fix(image): add
apt remove orca
to image creation scripts #48 - fix(image): resolve the issue of audio driver installation #53
- refactor(test): stability fixture now stops after 4 seconds
- feat(test): introduce
UBO_DEBUG_TEST_UUID
environment variable for tracking the sequence of uuid generations in the tests, it prints the traceback for each call touuid.uuid4
if it is set - fix(wifi): change
_remote_object_path
to_dbus.object_path
for sdbus objects #57
- refactor(style): update
ubo-gui
to the latest version and set placeholder for all menus
- chore(debug): setup sentry for error tracking
- feat(docker): add ngrok service (currently serves port 22 with no auth token)
- refactor(style): update
ubo-gui
to the latest version and change all icons to use nerd font icons - refactor(serviceS): change the loading order of the services
- feat(ssh): add ssh service to create and remove temporary ssh target users
- fix(server): it would miss commands coming together in a single packet, now it waits for the next packet if the current packet is not a complete command and it doesn't miss extra commands in the packet if it has multiple commands.
- test: add wireless flow test, work in progress
- refactor(services): add
init
parameter toregister_service
- chore(test): generate and collect screenshots in GitHub workflow
- refactor(test): make the return value of
wait_for
reusable - refactor(test): organize fixtures in different files
- feat(test): introduce
load_services
andstability
fixtures
- chore(test): improve snapshot tests to detect extra/less snapshots too
- chore(test): better organize snapshot results in sub-directories
- chore(test): collect mismatching snapshots (store and window) in GitHub workflow
- chore(test): add
--override-window-snapshots
topytest
to intentionally override window snapshots when they have changed - chore(test): add
--make-screenshots
topytest
to create window screenshots to help find the differences visually - chore(test): monkeypatchings for dynamic parts of the app to make tests consistent
- refactor: general improvements in the codebase to address issues found during writing tests
- chore: add badges to
README.md
- chore: add
Dockerfile.dev
for development, it helps to build consistent screenshots in macOS
- chore(test): set up testing framework with initial examples
- chore(test): set up snapshot test helper to compare screenshots of different stages of tests with previous successful tests using hashes
- feat: add ollama and open-webui docker images
- feat: render a qrcode for each ip x port combination of a container
- feat: add
UBO_DOCKER_PREFIX
to help pull docker images from local registries during development - feat: let images depend on eachother's ip address to let semi composition
- feat: read the state of all relevant containers during initialization and update the store accordingly
- feat: add
--restart=always
for all containers, in the future we will make it customizable. - chore: add python-dotenv and read
.env
and.dev.env
files during initialization - chore: update to latest version of ubo-gui and headless-kivy-pi
- chore: split asset files bigger than 2GB in the release into chunks of 2GB.
- refactor: general housekeeping
- fix: wireless module now has sufficient privileges
- chore: setup git-lfs for audio files
- chore: create ubo images for main branch based on lite, default and full versions of raspberry os in GitHub workflow
- chore: create GitHub release for main branch in GitHub workflows
- chore: GitHub workflow to publish pushes on
main
branch to PyPI
- chore: add integration GitHub workflow to check lint, typing and build issues
- refactor: address all lint issues and typing issues
- feat: add
monitor_unit
utility function to monitor status changes of systemd units - refactor: make docker service mostly event-driven
- hotfix: wait for lingering process to finish and retry usreland
systemctl --user daemon-reload
if needed - hotfix: the
install_docker.sh
script now runs if an optional flag is set for bootstrap command
- fix: audio for when pipewire is installed
- fix: set permission for ubo user to disconnect wifi connections
- refactor: setup ubo as a lingering user and migrate ubo-app service from a system wide service to ubo userland service still starting after boot
- feature: ability to customize installation process with environment variables:
- UPDATE: used for when ubo is installed and it should be updated to the latest version
- ALPHA: installs latest version, even if it's an alpha version
- WITH_DOCKER: installs docker service
- feat: add socket connection (volume bind) for portainer
- feat: expose all ports of containers and show the ports in a sub menu
- feat: option to remove a container without removing its image
- hotfix: provide
$USERNAME
environment variable forinstall_docker.sh
script
- hotfix: postpone adding
ubo
todocker
group for whendocker
is installed
- refactor: upgrade
ubo-led
serviceubo-system
service as a general service to take care of system tasks needing root access - feat: use
ubo-system
to install and run docker service - chore: add
--bootstrap
option todeploy
script, it basically runsubo bootstrap
- fix: load a module from nested packages into nested packages
- feat: add docker service to manage docker images/containers
- feat: add
UBO_LOGLEVEL
andUBO_GUI_LOGLEVEL
environment variables - feat: add
run_in_executor
to run non-coroutine (non-async) blocking functions without blocking the ui
- fix: modules loaded in services now get executed only once, avoiding registration of redundant subscriptions and listeners
- hotfix: remove a dangling whitespace in
install.sh
- feat: add
ubo-pulseaudio.service
to take care of keeping pulseaudio up - refactor: make sound service work with or without pulseaudio installed
- refactor: organize system related codes and assets
- fix: enable i2c and spi using
raspi-config
ininstall.sh
- fix: reboot after installation (needed for audio driver)
- fix: add user to netdev group in
install.sh
- fix: install
python3-picamera2
andpython3-dev
debian packages ininstall.sh
- fix: blank screen when app is closing due to external signals
- fix: improve polkit rule to let user do wifi scan
- feat: add
sensors
service with temperature and light - feat: show temperature and light values in the footer
- refactor: organize order of loading of services
- refactor: housekeeping - better organize
/ubo_app/store
in directories - feat: automatically run update check whenever about menu is opened with a throttling of 10 seconds
- feat: introduce notification ids as a means to avoid duplicated notifications
- fix: don't show expired notifications
- feat: add a convention for notification ids and status icon ids in
README.me
- feat: blank screen when turning off the device, as backlight has a pull up and turns on after devices is turned off
- feat: power off button now turns off the screen and actually powers off the device
- feat: update menu showing current version and a button to update ubo-app
- feat: add update system service to automatically install an update in boot time if it is already downloaded
- feat: add install script
- feat: setup polkit to let
ubo
userreboot
andpoweroff
- refactor: improve
deploy.sh
so that it hasn't a hardcoded username - feat: assume the package is installed in
/opt/
instead of/home/pi/
- refactor: move service related files in
store/
tostore/services/
- refactor: update to latest versions of
ubo-gui
andpython-redux
- refactor: make
create_task
functional for the main application just like its services
- feat: #16 add volume chime
- fix: #16 set the default pulseaudio device to "wm8960-soundcard"
- fix: #16 use a logarithmic scale for volume
- feat: #16 connect to the audio controller, play chimes for notifications
- feat: #15 add
rgb_ring
service and use it for notifications
- feat: #11 add notification for wifi deletion
- feat: add notifications service and use it for wireless connection creation
- refactor: housekeeping - update dependencies, migrate menu data structures to
Immutable
, improve typings, organization
- style: optimize footer space so that it can show 7 icons
- feat: add
ethernet
service to show ethernet status in a status bar icon - refactor: move
Fake
class from wifi service to ubo_app for the sake of reusability
- feat: use redux store for ip service so that other services can use its state
- refactor: use
Sequence
type instead oflist
type whenever it is enough
- refactor: use
socket
instead ofpythonping
to reduce dependencies and make things work without root access - fix: correct the priority of the icon of the ip service
- docs: write
README.md
with installation and usage instructions - refactor: remove the leftovers of the action/event payloads
- feat: check and update status icons of ip and wifi services
- feat: introduce
UBO_DEBUG
environment variable to control the state of debug logs/utilities
- refactor: remove all
...Payload
classes asAction
s andEvent
s have no other fields other than payload due totype
being obsolete in this implementation - refactor: utilize debouncer package in wifi service to listen to and debounce dbus events
- refactor: improve responsiveness of wifi connection page
- fix: avoid dbus connection getting stale
- style: housekeeping - address as many lint errors as possible
- feat: add
ip
service to show ip addresses of different interfaces of the device
- refactor: rewrite wifi service using
sdbus_networkmanager
- refactor: update with the latest features of the latest python-redux version
- feat: add
install_service
command line argument to setup systemd service - feat: add
VERBOSE
log level to logging - feat: add
--run
to deploy script, it doesn't run the app without this option anymore
- refactor: make each service run in its own thread
- fix: weird behavior in RPi's Python, not respecting
submodule_search_locations
- chore: directly add headless-kivy-pi as a dependency
- feat: add wi-fi service and wi-fi flow
- feat: add camera service
- feat: add camera live viewfinder (bypassing all the Kivy rendering procedures for the sake of performance)
- refactor: use latest version of
python-redux
in whichtype
field is dropped from actions and events
- refactor: read
ubo_service_id
andubo_service_name
from__init__.py
file of the service - feat: let services import files from their directory (either by
from .
orfrom __ubo_service__
)
- feat: make
dispatch
always run its actions/events in UI thread
- refactor: improve and simplify
pyproject.toml
- refactor: use latest features of ubo-gui to better connect the main menu to store
- feat: implement the sound store and connect it to the volume widget and mic button
- chore: add logger
- refactor: move wifi icon registration to its service
- chore: add deploy script
- feat: implement app registration logic and tools
- feat: add wifi app
- feat: loading services dynamically from 'services' directory and direcotires specified in
UBO_SERVICES_PATH
- feat: implement keyboard and keypad services
- feat: implement main store handling main menu events
- refactor: make it pip-friendly
- feat: implement a simple version of redux