Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package safeeyes for openSUSE:Factory checked in at 2023-07-06 18:28:47 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/safeeyes (Old) and /work/SRC/openSUSE:Factory/.safeeyes.new.23466 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "safeeyes" Thu Jul 6 18:28:47 2023 rev:8 rq:1096991 version:2.1.6 Changes: -------- --- /work/SRC/openSUSE:Factory/safeeyes/safeeyes.changes 2023-01-02 15:47:15.580424546 +0100 +++ /work/SRC/openSUSE:Factory/.safeeyes.new.23466/safeeyes.changes 2023-07-06 18:28:54.587233008 +0200 @@ -1,0 +2,12 @@ +Wed Jul 5 07:55:14 UTC 2023 - Michael Vetter <mvet...@suse.com> + +- Update to version 2.1.6: + * Reverse-DNS scheme for icons & Broken initialize logic fix & Add appstream (#519) + * Display a traceback of plugin loading errors when --debug is given (#506) + * Remove executable permission from safeeyes.desktop (#512) + * Fix incorrectly skipped long breaks (#443) + * Take short or long breaks from tray (#347) + * Add sub-menu to take any, short or long breaks + * Update translations + +------------------------------------------------------------------- Old: ---- safeeyes-2.1.4.tar.xz New: ---- safeeyes-2.1.6.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ safeeyes.spec ++++++ --- /var/tmp/diff_new_pack.bYdd3k/_old 2023-07-06 18:28:56.283243420 +0200 +++ /var/tmp/diff_new_pack.bYdd3k/_new 2023-07-06 18:28:56.327243690 +0200 @@ -1,7 +1,7 @@ # # spec file for package safeeyes # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2023 SUSE LLC # Copyright (c) 2017 Malcolm J Lewis <malcolmle...@opensuse.org> # Copyright (c) 2020 opensuse.lietuviu.ka...@gmail.com # @@ -19,7 +19,7 @@ Name: safeeyes -Version: 2.1.4 +Version: 2.1.6 Release: 0 Summary: Tool for reminding the user to take breaks License: GPL-3.0-only @@ -67,7 +67,6 @@ %install python3 setup.py install --prefix=%{_prefix} --root=%{buildroot} -%suse_update_desktop_file -r safeeyes Utility Clock # localization %find_lang %{name} @@ -76,7 +75,7 @@ %doc README.md %license LICENSE %{_bindir}/safeeyes -%{_datadir}/applications/%{name}.desktop +%{_datadir}/applications/io.github.slgobinath.SafeEyes.desktop %{_datadir}/icons/hicolor/*/*/ %{python3_sitelib}/%{name} %{python3_sitelib}/%{name}-%{version}-py%{py3_ver}.egg-info ++++++ _service ++++++ --- /var/tmp/diff_new_pack.bYdd3k/_old 2023-07-06 18:28:56.635245581 +0200 +++ /var/tmp/diff_new_pack.bYdd3k/_new 2023-07-06 18:28:56.663245752 +0200 @@ -4,7 +4,7 @@ <param name="filename">safeeyes</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v2.1.4</param> + <param name="revision">v2.1.6</param> <param name="versionformat">@PARENT_TAG@</param> <!-- tag is vX.Y.Z, we want X.Y.Z --> <param name="versionrewrite-pattern">v(.*)</param> ++++++ safeeyes-2.1.4.tar.xz -> safeeyes-2.1.6.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/.github/workflows/release.yml new/safeeyes-2.1.6/.github/workflows/release.yml --- old/safeeyes-2.1.4/.github/workflows/release.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/safeeyes-2.1.6/.github/workflows/release.yml 2023-07-05 02:09:53.000000000 +0200 @@ -0,0 +1,68 @@ +name: Release +on: + push: + branches: [ release ] + +jobs: + release: + name: Release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + token: ${{ secrets.GH_API_SECRET }} + + - name: Set up Python 3.10 + uses: actions/setup-python@v3 + with: + python-version: "3.10" + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install build + pip install wheel + + - name: Get Current Version + run: | + project_version=$(python3 setup.py --version) + echo "project_version=$project_version" >> $GITHUB_OUTPUT + id: get_current_version + + - name: Create Tag + uses: mathieudutour/github-tag-action@v6.1 + with: + custom_tag: "v${{steps.get_current_version.outputs.project_version}}" + github_token: ${{ secrets.GH_API_SECRET }} + + - name: Build Changelog + id: build_changelog + uses: mikepenz/release-changelog-builder-action@v3.4.0 + env: + GITHUB_TOKEN: ${{ secrets.GH_API_SECRET }} + + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + tag_name: 'v${{steps.get_current_version.outputs.project_version}}' + body: ${{steps.build_changelog.outputs.changelog}} + token: ${{ secrets.GH_API_SECRET }} + + - name: Build Python Package + run: rm -Rf build *.egg-info/ && python3 setup.py sdist bdist_wheel + + - name: Publish to PyPi + uses: pypa/gh-action-pypi-publish@v1.6.4 + with: + password: ${{ secrets.PYPI_API_TOKEN }} + + - name: Sync Release with Master + run: | + git fetch origin + git checkout release + git pull origin release + git checkout master + git pull origin master + git merge release --ff-only + git push origin master diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/README.md new/safeeyes-2.1.6/README.md --- old/safeeyes-2.1.4/README.md 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/README.md 2023-07-05 02:09:53.000000000 +0200 @@ -4,6 +4,7 @@ [![PyPI version](https://badge.fury.io/py/safeeyes.svg)](https://badge.fury.io/py/safeeyes) [![Debian](https://badges.debian.net/badges/debian/unstable/safeeyes/version.svg)](https://packages.debian.org/unstable/safeeyes) [![AUR](https://img.shields.io/aur/version/safeeyes)](https://aur.archlinux.org/packages/safeeyes) +[![Flathub](https://img.shields.io/flathub/v/io.github.slgobinath.SafeEyes)](https://flathub.org/apps/details/io.github.slgobinath.SafeEyes) [![Translation status](https://hosted.weblate.org/widgets/safe-eyes/-/translations/svg-badge.svg)](https://hosted.weblate.org/engage/safe-eyes/?utm_source=widget) [![Awesome Humane Tech](https://raw.githubusercontent.com/humanetech-community/awesome-humane-tech/main/humane-tech-badge.svg?sanitize=true)](https://github.com/humanetech-community/awesome-humane-tech) [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://paypal.me/slgobinath) @@ -84,6 +85,12 @@ sudo apk add safeeyes ``` +### Flatpak + +```bash +flatpak install flathub io.github.slgobinath.SafeEyes +``` + ### Other Linux & Run from source Ensure to meet the following dependencies: @@ -161,6 +168,22 @@ Thirdparty plugins are available at another GitHub repository: [safeeyes-plugins](https://github.com/slgobinath/safeeyes-plugins). More details about how to write your own plugin and how to install third-party plugin are available there. +## How to Release? + +1. Checkout the latest commits from the `master` branch +2. Run `python3 -m safeeyes` to make sure nothing is broken +3. Update the Safe Eyes version in the following places (Open the project in VSCode and search for the current version): + - [setup.py](https://github.com/slgobinath/SafeEyes/blob/master/setup.py#L81) + - [setup.py](https://github.com/slgobinath/SafeEyes/blob/master/setup.py#L88) + - [safeeyes.py](https://github.com/slgobinath/SafeEyes/blob/master/safeeyes/safeeyes.py#L43) + - [io.github.slgobinath.SafeEyes.metainfo.xml](https://github.com/slgobinath/SafeEyes/blob/master/safeeyes/platform/io.github.slgobinath.SafeEyes.metainfo.xml#L50) + - [about_dialog.glade](https://github.com/slgobinath/SafeEyes/blob/master/safeeyes/glade/about_dialog.glade#L74) +4. Update the [changelog](https://github.com/slgobinath/SafeEyes/blob/master/debian/changelog) (for Ubuntu release) +5. Commit the changes to `master` +6. Create a pull-request from `master` to `release` +7. Merge the PR to release **with merge commit** (Important to merge with merge commit) + + ## License GNU General Public License v3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/debian/changelog new/safeeyes-2.1.6/debian/changelog --- old/safeeyes-2.1.4/debian/changelog 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/debian/changelog 2023-07-05 02:09:53.000000000 +0200 @@ -1,7 +1,9 @@ -safeeyes (2.1.4-1) xenial; urgency=high +safeeyes (2.1.6-0) lunar; urgency=high + * Support Python 3.11 + * Minor bug fixes - * Fix the error if there is no long break + * Fix the ecd ..rror if there is no long break * Add wayland support for do not disturb me plugin diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/debian/safeeyes.install new/safeeyes-2.1.6/debian/safeeyes.install --- old/safeeyes-2.1.4/debian/safeeyes.install 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/debian/safeeyes.install 2023-07-05 02:09:53.000000000 +0200 @@ -1,17 +1,17 @@ -safeeyes/platform/safeeyes.desktop usr/share/applications -safeeyes/platform/icons/hicolor/128x128/apps/safeeyes.png usr/share/icons/hicolor/128x128/apps -safeeyes/platform/icons/hicolor/16x16/apps/safeeyes.png usr/share/icons/hicolor/16x16/apps -safeeyes/platform/icons/hicolor/16x16/status/safeeyes_disabled.png usr/share/icons/hicolor/16x16/status -safeeyes/platform/icons/hicolor/16x16/status/safeeyes_enabled.png usr/share/icons/hicolor/16x16/status -safeeyes/platform/icons/hicolor/16x16/status/safeeyes_timer.png usr/share/icons/hicolor/16x16/status -safeeyes/platform/icons/hicolor/24x24/apps/safeeyes.png usr/share/icons/hicolor/24x24/apps -safeeyes/platform/icons/hicolor/24x24/status/safeeyes_disabled.png usr/share/icons/hicolor/24x24/status -safeeyes/platform/icons/hicolor/24x24/status/safeeyes_enabled.png usr/share/icons/hicolor/24x24/status -safeeyes/platform/icons/hicolor/24x24/status/safeeyes_timer.png usr/share/icons/hicolor/24x24/status -safeeyes/platform/icons/hicolor/32x32/apps/safeeyes.png usr/share/icons/hicolor/32x32/apps -safeeyes/platform/icons/hicolor/32x32/status/safeeyes_disabled.png usr/share/icons/hicolor/32x32/status -safeeyes/platform/icons/hicolor/32x32/status/safeeyes_enabled.png usr/share/icons/hicolor/32x32/status -safeeyes/platform/icons/hicolor/48x48/apps/safeeyes.png usr/share/icons/hicolor/48x48/apps -safeeyes/platform/icons/hicolor/48x48/status/safeeyes_disabled.png usr/share/icons/hicolor/48x48/status -safeeyes/platform/icons/hicolor/48x48/status/safeeyes_enabled.png usr/share/icons/hicolor/48x48/status -safeeyes/platform/icons/hicolor/64x64/apps/safeeyes.png usr/share/icons/hicolor/64x64/apps \ No newline at end of file +safeeyes/platform/io.github.slgobinath.SafeEyes.desktop usr/share/applications +safeeyes/platform/icons/hicolor/128x128/apps/io.github.slgobinath.SafeEyes.png usr/share/icons/hicolor/128x128/apps +safeeyes/platform/icons/hicolor/16x16/apps/io.github.slgobinath.SafeEyes.png usr/share/icons/hicolor/16x16/apps +safeeyes/platform/icons/hicolor/16x16/status/io.github.slgobinath.SafeEyes-disabled.png usr/share/icons/hicolor/16x16/status +safeeyes/platform/icons/hicolor/16x16/status/io.github.slgobinath.SafeEyes-enabled.png usr/share/icons/hicolor/16x16/status +safeeyes/platform/icons/hicolor/16x16/status/io.github.slgobinath.SafeEyes-timer.png usr/share/icons/hicolor/16x16/status +safeeyes/platform/icons/hicolor/24x24/apps/io.github.slgobinath.SafeEyes.png usr/share/icons/hicolor/24x24/apps +safeeyes/platform/icons/hicolor/24x24/status/io.github.slgobinath.SafeEyes-disabled.png usr/share/icons/hicolor/24x24/status +safeeyes/platform/icons/hicolor/24x24/status/io.github.slgobinath.SafeEyes-enabled.png usr/share/icons/hicolor/24x24/status +safeeyes/platform/icons/hicolor/24x24/status/io.github.slgobinath.SafeEyes-timer.png usr/share/icons/hicolor/24x24/status +safeeyes/platform/icons/hicolor/32x32/apps/io.github.slgobinath.SafeEyes.png usr/share/icons/hicolor/32x32/apps +safeeyes/platform/icons/hicolor/32x32/status/io.github.slgobinath.SafeEyes-disabled.png usr/share/icons/hicolor/32x32/status +safeeyes/platform/icons/hicolor/32x32/status/io.github.slgobinath.SafeEyes-enabled.png usr/share/icons/hicolor/32x32/status +safeeyes/platform/icons/hicolor/48x48/apps/io.github.slgobinath.SafeEyes.png usr/share/icons/hicolor/48x48/apps +safeeyes/platform/icons/hicolor/48x48/status/io.github.slgobinath.SafeEyes-disabled.png usr/share/icons/hicolor/48x48/status +safeeyes/platform/icons/hicolor/48x48/status/io.github.slgobinath.SafeEyes-enabled.png usr/share/icons/hicolor/48x48/status +safeeyes/platform/icons/hicolor/64x64/apps/io.github.slgobinath.SafeEyes.png usr/share/icons/hicolor/64x64/apps \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/config/locale/de/LC_MESSAGES/safeeyes.po new/safeeyes-2.1.6/safeeyes/config/locale/de/LC_MESSAGES/safeeyes.po --- old/safeeyes-2.1.4/safeeyes/config/locale/de/LC_MESSAGES/safeeyes.po 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/config/locale/de/LC_MESSAGES/safeeyes.po 2023-07-05 02:09:53.000000000 +0200 @@ -6,8 +6,8 @@ msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-03-07 09:50+0000\n" -"Last-Translator: J. Lavoie <j.lav...@net-c.ca>\n" +"PO-Revision-Date: 2023-07-04 20:53+0000\n" +"Last-Translator: Sebastian Pipping <sebast...@pipping.org>\n" "Language-Team: German <https://hosted.weblate.org/projects/safe-eyes/" "translations/de/>\n" "Language: de\n" @@ -15,7 +15,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.5.1\n" +"X-Generator: Weblate 5.0-dev\n" # Short break msgid "Tightly close your eyes" @@ -102,7 +102,10 @@ msgid "" "Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you " "to take breaks while you're working long hours at the computer" -msgstr "Beschreibung" +msgstr "" +"Safe Eyes schützt Ihre Augen vor Beschwerden (Asthenopie), indem es Sie " +"regelmäÃig erinnert, Pausen zu machen, wenn Sie längere Zeit am Bildschirm " +"verbringen" # About dialog msgid "License" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/config/locale/eu/LC_MESSAGES/safeeyes.po new/safeeyes-2.1.6/safeeyes/config/locale/eu/LC_MESSAGES/safeeyes.po --- old/safeeyes-2.1.4/safeeyes/config/locale/eu/LC_MESSAGES/safeeyes.po 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/config/locale/eu/LC_MESSAGES/safeeyes.po 2023-07-05 02:09:53.000000000 +0200 @@ -6,8 +6,8 @@ msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-09-28 22:17+0000\n" -"Last-Translator: Gontzal Manuel Pujana Onaindia <thadahden...@gmail.com>\n" +"PO-Revision-Date: 2023-01-07 11:49+0000\n" +"Last-Translator: Porrumentzio <porrument...@riseup.net>\n" "Language-Team: Basque <https://hosted.weblate.org/projects/safe-eyes/" "translations/eu/>\n" "Language: eu\n" @@ -15,7 +15,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.14.1\n" +"X-Generator: Weblate 4.15.1-dev\n" # Short break msgid "Tightly close your eyes" @@ -23,15 +23,15 @@ # Short break msgid "Roll your eyes a few times to each side" -msgstr "Mugitu begiak alde bakoitzera pare bat aldiz" +msgstr "Mugitu begiak aldez alde" # Short break msgid "Rotate your eyes in clockwise direction" -msgstr "Biratu begiak erlojuaren noranzkoan" +msgstr "Biratu begiak erloju-orratzen noranzkoan" # Short break msgid "Rotate your eyes in counterclockwise direction" -msgstr "Biratu begiak erlojuaren aurkako noranzkoan" +msgstr "Biratu begiak erloju-orratzen kontrako noranzkoan" # Short break msgid "Blink your eyes" @@ -71,7 +71,7 @@ # Commandline arg description msgid "show the settings dialog" -msgstr "erakutsi ezarpenen elkarrizketa-koadroa" +msgstr "erakutsi ezarpenak" # Commandline arg description msgid "start safeeyes in debug mode" @@ -90,8 +90,8 @@ "Safe Eyes is running without an RPC server. Turn it on to use command-line " "arguments." msgstr "" -"Safe Eyes RPC zerbitzaririk gabe exekutatzen ari da. Piztu ezazu komando-" -"lerroko argumentuak erabiltzeko." +"RPC zerbitzaririk gabe ari da exekutatzen Safe Eyes. Piztu zerbitzaria " +"komando-lerroko argumentuak erabiltzeko." # About dialog msgid "Close" @@ -103,8 +103,8 @@ "Safe Eyes protects your eyes from eye strain (asthenopia) by reminding you " "to take breaks while you're working long hours at the computer" msgstr "" -"Safe Eyes-ek zure begiak begi-neketik (astenopia) babesten ditu " -"ordenagailuan ordu luzez zabiltzanean atsedenaldiak hartzeaz gogoraraziz" +"Safe Eyes-ek begi-neketik (astenopiatik) babesten zaitu ordenagailuan ordu " +"luzez zabiltzanean etenaldiak egiteko gogoraraziz" # About dialog msgid "License" @@ -120,19 +120,19 @@ # Settings dialog msgid "Break duration (in seconds)" -msgstr "Atsedenaldiaren iraupena (segundotan)" +msgstr "Etenaldiaren iraupena (segundotan)" # Settings dialog msgid "Interval between two breaks (in minutes)" -msgstr "Bi atsedenaldien arteko tartea (minututan)" +msgstr "Bi etenaldiren arteko tartea (minututan)" # Settings dialog msgid "Time to prepare for a break (in seconds)" -msgstr "Atsedenaldirako prestatzeko denbora (segundotan)" +msgstr "Etenaldirako prestatzeko denbora (segundotan)" # Settings dialog msgid "Keyboard shortcuts disabled period (in seconds)" -msgstr "Laster-teklak desgaitutako unea (segundotan)" +msgstr "Laster-teklak desgaitutako aldia (segundotan)" # Settings dialog msgid "Postponement duration (in minutes)" @@ -140,15 +140,15 @@ # Settings dialog msgid "Show breaks in random order" -msgstr "Erakutsi atsedenaldiak ausazko ordenean" +msgstr "Erakutsi etenaldiak ausazko ordenan" # Settings dialog msgid "Strict break (No way to skip breaks)" -msgstr "Atsedenaldi zorrotza (saltatzeko modurik ez)" +msgstr "Etenaldi zorrotza (saltatzeko modurik ez)" # Settings dialog msgid "Allow postponing breaks" -msgstr "Baimendu atsedenaldiak atzeratzea" +msgstr "Baimendu etenaldiak atzeratzea" # Settings dialog msgid "Persist the internal state" @@ -164,7 +164,9 @@ # Settings dialog msgid "Long break interval must be a multiple of short break interval" -msgstr "Atsedenaldik luzeak, motzen multzoa izan behar du" +msgstr "" +"Etenaldi luzeen arteko tarteak motzen arteko tartearen multiploa izan behar " +"du" # Settings dialog msgid "Reset" @@ -172,7 +174,7 @@ # Settings dialog msgid "Are you sure you want to reset all settings to default?" -msgstr "Ziur ezarpen guztiak lehenetsitakoetara berrezarri nahi dituzula?" +msgstr "Ziur ezarpen guztiak lehenetsietara berrezarri nahi dituzula?" # Settings dialog msgid "Options" @@ -180,11 +182,11 @@ # Settings dialog msgid "Short Breaks" -msgstr "Atsedenaldi motzak" +msgstr "Etenaldi motzak" # Settings dialog msgid "Long Breaks" -msgstr "Atsedenaldi luzeak" +msgstr "Etenaldi luzeak" # Settings dialog msgid "Delete" @@ -192,7 +194,7 @@ # Settings dialog msgid "Are you sure you want to delete this break?" -msgstr "Ziur atsedenaldi hau ezabatu nahi duzula?" +msgstr "Ziur etenaldi hau ezabatu nahi duzula?" # Settings dialog msgid "You can't undo this action." @@ -200,11 +202,11 @@ # Settings dialog msgid "Break" -msgstr "Atsedenaldia" +msgstr "Etenaldia" # Settings dialog msgid "Breaks" -msgstr "Atsedenaldiak" +msgstr "Etenaldiak" # Settings dialog msgid "Plugins" @@ -256,7 +258,7 @@ # Settings dialog msgid "Break Settings" -msgstr "Atsedenaldien ezarpenak" +msgstr "Etenaldien ezarpenak" # Settings dialog msgid "Plugin Settings" @@ -284,7 +286,7 @@ # Settings dialog msgid "New Break" -msgstr "Atsedenaldi berria" +msgstr "Etenaldi berria" # Settings dialog msgid "Remove" @@ -304,15 +306,15 @@ # plugin/audiblealert msgid "Play audible alert before and after breaks" -msgstr "Erreproduzitu abisu entzungarria atsedenaldien aurretik eta ondoren" +msgstr "Erreproduzitu abisu entzungarri bat etenaldien aurretik eta ondoren" # plugin/audiblealert msgid "Play audible alert before breaks" -msgstr "Erreproduzitu abisu entzungarria atsedenaldien aurretik" +msgstr "Erreproduzitu abisu entzungarria etenaldien aurretik" # plugin/audiblealert msgid "Play audible alert after breaks" -msgstr "Erreproduzitu abisu entzungarria atsedenaldien ondoren" +msgstr "Erreproduzitu abisu entzungarria etenaldien ondoren" # plugin/donotdisturb msgid "Do Not Disturb" @@ -320,11 +322,11 @@ # plugin/donotdisturb msgid "Skip break if the active window is in fullscreen mode" -msgstr "Saltatu atsedenaldia uneko leihoa pantaila osoan badago" +msgstr "Saltatu etenaldia leiho aktiboa pantaila osoan badago" # plugin/donotdisturb msgid "Do not interrupt these windows anytime" -msgstr "Ez eten honako leihoetan edonola ere" +msgstr "Ez eten honako leihoetan inoiz ere" # plugin/donotdisturb msgid "Interrupt these windows regardless of their state" @@ -356,15 +358,15 @@ # plugin/notification msgid "Show a system notification before breaks" -msgstr "Erakutsi sistemako jakinarazpena atsedenaldien aurretik" +msgstr "Erakutsi sistemako jakinarazpen bat etenaldien aurretik" # plugin/notification msgid "Ready for a short break in %s seconds" -msgstr "Prestatu %s segundo barru atsedenaldi motza egiteko" +msgstr "Prestatu %s segundo barru etenaldi motza egiteko" # plugin/notification msgid "Ready for a long break in %s seconds" -msgstr "Prestatu %s segundo barru atsedenaldi luzea egiteko" +msgstr "Prestatu %s segundo barru etenaldi luzea egiteko" # plugin/screensaver msgid "Screensaver" @@ -373,7 +375,7 @@ # plugin/screensaver msgid "Lock the screen after long breaks by starting screensaver" msgstr "" -"Blokeatu pantaila atsedenaldi luzeen ondoren pantaila-babeslea erakutsiz" +"Blokeatu pantaila etenaldi luzeen ondoren eta erakutsi pantaila-babeslea" # plugin/screensaver msgid "Custom screensaver command" @@ -381,7 +383,7 @@ # plugin/screensaver msgid "Minimum seconds to skip without screensaver" -msgstr "Pantaila-babeslerik gabe saltatzeko gutxieneko segundoak" +msgstr "Pantaila-babesle erakutsi gabe saltatzeko segundoak" # plugin/screensaver msgid "Lock screen" @@ -397,17 +399,17 @@ # plugin/smartpause msgid "Minimum idle time to pause Safe Eyes (in seconds)" -msgstr "Safe Eyes pausatzeko gutxieneko denbora inaktiboa (segundotan)" +msgstr "Safe Eyes pausatzeko pasa behar den denbora inaktiboa (segundotan)" # plugin/smartpause msgid "Interpret idle time equivalent to upcoming break duration as a break" msgstr "" -"Interpretatu hurrengo atsedenaldiaren iraupenaren baliokidea den denbora " -"inaktiboa atsedenaldi gisa" +"Tratatu denbora inaktiboa etenaldi gisa, inaktibo emandako denbora datorren " +"etenaldiaren iraupen berekoa izan bada" # plugin/smartpause msgid "Postpone the next break until the system becomes idle" -msgstr "Atzeratu hurrengo atsedenaldia sistema inaktibo egon arte" +msgstr "Atzeratu hurrengo etenaldia sistema inaktibo egon arte" #: plugins/trayicon msgid "Tray Icon" @@ -419,7 +421,7 @@ #: plugins/trayicon msgid "Show next break time in tray icon" -msgstr "Erakutsi hurrengo atsedenaldia erretiluko ikonoan" +msgstr "Erakutsi hurrengo etenaldia erretiluko ikonoan" #: plugins/trayicon msgid "Allow disabling Safe Eyes" @@ -448,28 +450,28 @@ #: plugins/trayicon msgid "For %d Hour" msgid_plural "For %d Hours" -msgstr[0] "Ordu %derako" -msgstr[1] "%d ordurako" +msgstr[0] "Ordu %dez" +msgstr[1] "%d orduz" #: plugins/trayicon msgid "For %d Minute" msgid_plural "For %d Minutes" -msgstr[0] "Minutu %derako" -msgstr[1] "%d minuturako" +msgstr[0] "Minutu %dez" +msgstr[1] "%d minutuz" #: plugins/trayicon msgid "For %d Second" msgid_plural "For %d Seconds" -msgstr[0] "Segundo %derako" -msgstr[1] "%d segundorako" +msgstr[0] "Segundo %dez" +msgstr[1] "%d segundoz" #: plugins/trayicon msgid "Next break at %s" -msgstr "Hurrengo atsedenaldia: %s" +msgstr "Hurrengo etenaldia: %s" #: plugins/trayicon msgid "No Breaks Available" -msgstr "Atsedenaldirik ez erabilgarri" +msgstr "Etenaldirik ez erabilgarri" #: plugins/trayicon msgid "Settings" @@ -477,7 +479,7 @@ #: plugins/trayicon msgid "Take a break now" -msgstr "Hartu atsedenaldia orain" +msgstr "Egin orain etenaldia" #: plugins/trayicon msgid "Until restart" @@ -485,7 +487,7 @@ #: plugins/trayicon msgid "Quit" -msgstr "Utzi" +msgstr "Irten" # plugin/mediacontrol msgid "Media Control" @@ -493,7 +495,7 @@ # plugin/mediacontrol msgid "Pause media players from the break screen" -msgstr "Pausatu multimedia erreproduzitzaileak atsedenaldiaren pantailatik" +msgstr "Pausatu multimedia etenaldiaren pantailatik" # plugin/mediacontrol msgid "Pause media" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/config/locale/ko/LC_MESSAGES/safeeyes.po new/safeeyes-2.1.6/safeeyes/config/locale/ko/LC_MESSAGES/safeeyes.po --- old/safeeyes-2.1.4/safeeyes/config/locale/ko/LC_MESSAGES/safeeyes.po 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/config/locale/ko/LC_MESSAGES/safeeyes.po 2023-07-05 02:09:53.000000000 +0200 @@ -6,8 +6,8 @@ msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-02-24 07:50+0000\n" -"Last-Translator: Lee Yunseok <ironyuns...@protonmail.com>\n" +"PO-Revision-Date: 2023-02-17 05:35+0000\n" +"Last-Translator: Yi Yunseok <ironyuns...@protonmail.com>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/safe-eyes/" "translations/ko/>\n" "Language: ko\n" @@ -15,7 +15,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.5\n" +"X-Generator: Weblate 4.16-dev\n" # Short break msgid "Tightly close your eyes" @@ -346,7 +346,7 @@ # plugin/healthstats msgid "Statistics reset interval (cron expression)" -msgstr "íµê³ ì¬ì¤ì ê°ê²© (í¬ë¡ ííì)" +msgstr "íµê³ ì´ê¸°í ê°ê²© (í¬ë¡ ííì)" # plugin/notification msgid "Notification" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/config/locale/ru/LC_MESSAGES/safeeyes.po new/safeeyes-2.1.6/safeeyes/config/locale/ru/LC_MESSAGES/safeeyes.po --- old/safeeyes-2.1.4/safeeyes/config/locale/ru/LC_MESSAGES/safeeyes.po 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/config/locale/ru/LC_MESSAGES/safeeyes.po 2023-07-05 02:09:53.000000000 +0200 @@ -6,17 +6,17 @@ msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-09-08 04:17+0000\n" -"Last-Translator: Dmitriy Q <krot...@mail.ru>\n" +"PO-Revision-Date: 2023-03-22 16:41+0000\n" +"Last-Translator: AHOHNMYC <lqwh2h2...@protonmail.com>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/safe-eyes/" "translations/ru/>\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.14.1-dev\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.16.2-dev\n" # Short break msgid "Tightly close your eyes" @@ -157,11 +157,11 @@ # Settings dialog msgid "Use RPC server to receive runtime commands" -msgstr "ÐÑполÑзоваÑÑ RPC-ÑеÑÐ²ÐµÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑÑеннÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´" +msgstr "ÐÑполÑзÑйÑе RPC ÑеÑÐ²ÐµÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ во вÑÐµÐ¼Ñ ÑабоÑÑ Ð¿ÑиложениÑ" # Settings dialog msgid "Without the RPC server, command-line commands may not work" -msgstr "Ðез RPC ÑеÑвеÑа, ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¸Ð· командной ÑÑÑоки могÑÑ Ð½Ðµ ÑабоÑаÑÑ" +msgstr "Ðез RPC ÑеÑвеÑа ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¸Ð· командной ÑÑÑоки могÑÑ Ð½Ðµ ÑÑабоÑаÑÑ" # Settings dialog msgid "Long break interval must be a multiple of short break interval" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/config/locale/safeeyes.pot new/safeeyes-2.1.6/safeeyes/config/locale/safeeyes.pot --- old/safeeyes-2.1.4/safeeyes/config/locale/safeeyes.pot 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/config/locale/safeeyes.pot 2023-07-05 02:09:53.000000000 +0200 @@ -457,6 +457,18 @@ msgstr "" #: plugins/trayicon +msgid "Any break" +msgstr "" + +#: plugins/trayicon +msgid "Short break" +msgstr "" + +#: plugins/trayicon +msgid "Long break" +msgstr "" + +#: plugins/trayicon msgid "Until restart" msgstr "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/config/locale/sv/LC_MESSAGES/safeeyes.po new/safeeyes-2.1.6/safeeyes/config/locale/sv/LC_MESSAGES/safeeyes.po --- old/safeeyes-2.1.4/safeeyes/config/locale/sv/LC_MESSAGES/safeeyes.po 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/config/locale/sv/LC_MESSAGES/safeeyes.po 2023-07-05 02:09:53.000000000 +0200 @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-08-18 00:37+0000\n" +"PO-Revision-Date: 2023-02-11 11:39+0000\n" "Last-Translator: Luna Jernberg <droidbit...@gmail.com>\n" "Language-Team: Swedish <https://hosted.weblate.org/projects/safe-eyes/" "translations/sv/>\n" @@ -15,7 +15,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.16-dev\n" # Short break msgid "Tightly close your eyes" @@ -138,7 +138,7 @@ # Settings dialog msgid "Show breaks in random order" -msgstr "" +msgstr "Visa avbrott i slumpmässig ordning" # Settings dialog msgid "Strict break (No way to skip breaks)" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/config/locale/vi/LC_MESSAGES/safeeyes.po new/safeeyes-2.1.6/safeeyes/config/locale/vi/LC_MESSAGES/safeeyes.po --- old/safeeyes-2.1.4/safeeyes/config/locale/vi/LC_MESSAGES/safeeyes.po 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/config/locale/vi/LC_MESSAGES/safeeyes.po 2023-07-05 02:09:53.000000000 +0200 @@ -6,8 +6,8 @@ msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-11-26 01:51+0000\n" -"Last-Translator: Gralias <ngocnhie...@gmail.com>\n" +"PO-Revision-Date: 2022-11-26 23:54+0000\n" +"Last-Translator: Minh P <phandinhm...@protonmail.ch>\n" "Language-Team: Vietnamese <https://hosted.weblate.org/projects/safe-eyes/" "translations/vi/>\n" "Language: vi\n" @@ -15,7 +15,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.10-dev\n" +"X-Generator: Weblate 4.15-dev\n" # Short break msgid "Tightly close your eyes" @@ -90,7 +90,8 @@ "Safe Eyes is running without an RPC server. Turn it on to use command-line " "arguments." msgstr "" -"Safe Eyes Äang chạy mà không có RPC. Hãy báºt lên thông qua tham sá» dòng lá»nh" +"Safe Eyes Äang chạy mà không có máy chủ RPC. Bạn hãy báºt nó lên Äá» sá» dụng " +"tham sá» dòng lá»nh nhé." # About dialog msgid "Close" @@ -152,7 +153,7 @@ # Settings dialog msgid "Persist the internal state" -msgstr "Persist the internal state" +msgstr "Duy trì ná»i trạng thái" # Settings dialog msgid "Use RPC server to receive runtime commands" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/core.py new/safeeyes-2.1.6/safeeyes/core.py --- old/safeeyes-2.1.4/safeeyes/core.py 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/core.py 2023-07-05 02:09:53.000000000 +0200 @@ -131,7 +131,7 @@ logging.debug("Postpone the break for %d seconds", self.postpone_duration) self.context['postponed'] = True - def take_break(self): + def take_break(self, break_type = None): """ Calling this method stops the scheduler and show the next break screen """ @@ -139,15 +139,15 @@ return if not self.context['state'] == State.WAITING: return - utility.start_thread(self.__take_break) + utility.start_thread(self.__take_break, break_type=break_type) - def has_breaks(self): + def has_breaks(self, break_type = None): """ - Check whether Safe Eyes has breaks or not. + Check whether Safe Eyes has breaks or not. Use the break_type to check for either short or long break. """ - return not self.break_queue.is_empty() + return not self.break_queue.is_empty(break_type) - def __take_break(self): + def __take_break(self, break_type = None): """ Show the next break screen """ @@ -167,6 +167,8 @@ time.sleep(1) # Wait for 1 sec to ensure the sceduler is dead self.running = True + if break_type is not None and self.break_queue.get_break().type != break_type: + self.break_queue.next(break_type) utility.execute_main_thread(self.__fire_start_break) def __scheduler_job(self): @@ -244,8 +246,9 @@ utility.execute_main_thread(self.__fire_start_break) def __fire_start_break(self): + break_obj = self.break_queue.get_break() # Show the break screen - if not self.on_start_break.fire(self.break_queue.get_break()): + if not self.on_start_break.fire(break_obj): # Plugins want to ignore this break self.__start_next_break() return @@ -258,7 +261,7 @@ # Wait in user thread utility.start_thread(self.__postpone_break) else: - self.start_break.fire(self.break_queue.get_break()) + self.start_break.fire(break_obj) utility.start_thread(self.__start_break) def __start_break(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/glade/about_dialog.glade new/safeeyes-2.1.6/safeeyes/glade/about_dialog.glade --- old/safeeyes-2.1.4/safeeyes/glade/about_dialog.glade 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/glade/about_dialog.glade 2023-07-05 02:09:53.000000000 +0200 @@ -71,7 +71,7 @@ <property name="valign">center</property> <property name="margin_top">10</property> <property name="margin_bottom">10</property> - <property name="label" translatable="yes">Safe Eyes 2.1.4</property> + <property name="label" translatable="yes">Safe Eyes 2.1.5</property> <property name="justify">center</property> <attributes> <attribute name="style" value="normal"/> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/model.py new/safeeyes-2.1.6/safeeyes/model.py --- old/safeeyes-2.1.4/safeeyes/model.py 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/model.py 2023-07-05 02:09:53.000000000 +0200 @@ -84,7 +84,6 @@ self.__current_break = None self.__current_long = 0 self.__current_short = 0 - self.__shorts_taken = 0 self.__short_break_time = config.get('short_break_interval') self.__long_break_time = config.get('long_break_interval') self.__is_random_order = config.get('random_order') @@ -113,19 +112,39 @@ while brk != current_break and brk.name != last_break: brk = self.next() - def get_break(self): + def get_break(self, break_type = None): if self.__current_break is None: self.__current_break = self.next() - return self.__current_break + + if break_type is None or self.__current_break.type == break_type: + return self.__current_break + + if break_type == BreakType.LONG_BREAK: + return self.__long_queue[self.__current_long] + + return self.__short_queue[self.__current_short] def is_long_break(self): return self.__current_break is not None and self.__current_break.type == BreakType.LONG_BREAK - def next(self): + def next(self, break_type = None): break_obj = None shorts = self.__short_queue longs = self.__long_queue + # Reset break that has just ended + if self.is_long_break(): + self.__current_break.time = self.__long_break_time + if self.__current_long == 0 and self.__is_random_order: + # Shuffle queue + self.__build_longs() + elif self.__current_break: + # Reduce the break time from the next long break (default) + if longs: + longs[self.__current_long].time -= shorts[self.__current_short].time + if self.__current_short == 0 and self.__is_random_order: + self.__build_shorts() + if self.is_empty(): return None @@ -133,27 +152,11 @@ break_obj = self.__next_long() elif longs is None: break_obj = self.__next_short() - elif longs[self.__current_long].time <= shorts[self.__current_short].time: + elif break_type == BreakType.LONG_BREAK or longs[self.__current_long].time <= shorts[self.__current_short].time: break_obj = self.__next_long() else: break_obj = self.__next_short() - # Shorts and longs exist -> set cycle on every long - if break_obj.type == BreakType.LONG_BREAK: - self.context['new_cycle'] = True - self.__shorts_taken = 0 - # Only shorts exist -> set cycle when enough short breaks pass - elif self.__shorts_taken == self.__cycle_len: - self.context['new_cycle'] = True - self.__shorts_taken = 0 - else: - self.context['new_cycle'] = False - - if self.__current_break is not None: - # Reset the time of long breaks - if self.__current_break.type == BreakType.LONG_BREAK: - self.__current_break.time = self.__long_break_time - self.__current_break = break_obj self.context['session']['break'] = self.__current_break.name @@ -162,30 +165,30 @@ def reset(self): for break_object in self.__short_queue: break_object.time = self.__short_break_time - + for break_object in self.__long_queue: break_object.time = self.__long_break_time - def is_empty(self): - return self.__short_queue is None and self.__long_queue is None + def is_empty(self, break_type = None): + """ + Check if the given break type is empty or not. If the break_type is None, check for both short and long breaks. + """ + if break_type == BreakType.SHORT_BREAK: + return self.__short_queue is None + elif break_type == BreakType.LONG_BREAK: + return self.__long_queue is None + else: + return self.__short_queue is None and self.__long_queue is None def __next_short(self): longs = self.__long_queue shorts = self.__short_queue break_obj = shorts[self.__current_short] self.context['break_type'] = 'short' - # Reduce the break time from the next long break (default) - if longs: - longs[self.__current_long].time -= shorts[self.__current_short].time # Update the index to next self.__current_short = (self.__current_short + 1) % len(shorts) - # Shuffle queue - if self.__current_short == 0 and self.__is_random_order: - self.__build_shorts() - - self.__shorts_taken += 1 return break_obj def __next_long(self): @@ -196,10 +199,6 @@ # Update the index to next self.__current_long = (self.__current_long + 1) % len(longs) - # Shuffle queue - if self.__current_long == 0 and self.__is_random_order: - self.__build_longs() - return break_obj def __build_queue(self, break_type, break_configs, break_time, break_duration): Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/128x128/apps/io.github.slgobinath.SafeEyes.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/128x128/apps/io.github.slgobinath.SafeEyes.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/128x128/apps/safeeyes.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/128x128/apps/safeeyes.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/16x16/apps/io.github.slgobinath.SafeEyes.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/16x16/apps/io.github.slgobinath.SafeEyes.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/16x16/apps/safeeyes.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/16x16/apps/safeeyes.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/16x16/status/io.github.slgobinath.SafeEyes-disabled.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/16x16/status/io.github.slgobinath.SafeEyes-disabled.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/16x16/status/io.github.slgobinath.SafeEyes-enabled.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/16x16/status/io.github.slgobinath.SafeEyes-enabled.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/16x16/status/io.github.slgobinath.SafeEyes-timer.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/16x16/status/io.github.slgobinath.SafeEyes-timer.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/16x16/status/safeeyes_disabled.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/16x16/status/safeeyes_disabled.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/16x16/status/safeeyes_enabled.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/16x16/status/safeeyes_enabled.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/16x16/status/safeeyes_timer.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/16x16/status/safeeyes_timer.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/24x24/apps/io.github.slgobinath.SafeEyes.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/24x24/apps/io.github.slgobinath.SafeEyes.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/24x24/apps/safeeyes.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/24x24/apps/safeeyes.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/24x24/status/io.github.slgobinath.SafeEyes-disabled.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/24x24/status/io.github.slgobinath.SafeEyes-disabled.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/24x24/status/io.github.slgobinath.SafeEyes-enabled.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/24x24/status/io.github.slgobinath.SafeEyes-enabled.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/24x24/status/io.github.slgobinath.SafeEyes-timer.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/24x24/status/io.github.slgobinath.SafeEyes-timer.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/24x24/status/safeeyes_disabled.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/24x24/status/safeeyes_disabled.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/24x24/status/safeeyes_enabled.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/24x24/status/safeeyes_enabled.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/24x24/status/safeeyes_timer.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/24x24/status/safeeyes_timer.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/32x32/apps/io.github.slgobinath.SafeEyes.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/32x32/apps/io.github.slgobinath.SafeEyes.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/32x32/apps/safeeyes.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/32x32/apps/safeeyes.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/32x32/status/io.github.slgobinath.SafeEyes-disabled.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/32x32/status/io.github.slgobinath.SafeEyes-disabled.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/32x32/status/io.github.slgobinath.SafeEyes-enabled.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/32x32/status/io.github.slgobinath.SafeEyes-enabled.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/32x32/status/safeeyes_disabled.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/32x32/status/safeeyes_disabled.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/32x32/status/safeeyes_enabled.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/32x32/status/safeeyes_enabled.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/48x48/apps/io.github.slgobinath.SafeEyes.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/48x48/apps/io.github.slgobinath.SafeEyes.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/48x48/apps/safeeyes.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/48x48/apps/safeeyes.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/48x48/status/io.github.slgobinath.SafeEyes-disabled.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/48x48/status/io.github.slgobinath.SafeEyes-disabled.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/48x48/status/io.github.slgobinath.SafeEyes-enabled.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/48x48/status/io.github.slgobinath.SafeEyes-enabled.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/48x48/status/safeeyes_disabled.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/48x48/status/safeeyes_disabled.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/48x48/status/safeeyes_enabled.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/48x48/status/safeeyes_enabled.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/64x64/apps/io.github.slgobinath.SafeEyes.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/64x64/apps/io.github.slgobinath.SafeEyes.png differ Binary files old/safeeyes-2.1.4/safeeyes/platform/icons/hicolor/64x64/apps/safeeyes.png and new/safeeyes-2.1.6/safeeyes/platform/icons/hicolor/64x64/apps/safeeyes.png differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/platform/io.github.slgobinath.SafeEyes.desktop new/safeeyes-2.1.6/safeeyes/platform/io.github.slgobinath.SafeEyes.desktop --- old/safeeyes-2.1.4/safeeyes/platform/io.github.slgobinath.SafeEyes.desktop 1970-01-01 01:00:00.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/platform/io.github.slgobinath.SafeEyes.desktop 2023-07-05 02:09:53.000000000 +0200 @@ -0,0 +1,31 @@ +[Desktop Entry] +Name=Safe Eyes +Comment=Protect your eyes from eye strain +Comment[ca]=Protegiu-vos els ulls de la fatiga visual +Comment[cs]=ChraÅte své oÄi pÅed únavou +Comment[de]=Schützt die Augen vor Ãberanstrengung +Comment[es]=Protege tus ojos de la fatiga ocular +Comment[et]=Kaitse oma silmi väsimuse eest +Comment[fa]=Ù ØاÙظت ÚØ´Ù Ùااز ضعÛ٠شد٠+Comment[fr]=Protégez vos yeux de la fatigue +Comment[ge]=ááááªáááá áá¥áááá ááááááá ááá¦ááááááá¡áááá +Comment[hi]=तनाव सॠà¤à¤à¤à¥à¤ à¤à¥ रà¤à¥à¤·à¤¾ +Comment[hu]=Protect your eyes from eye strain +Comment[id]=Melindungi mata Anda dari kelelahan +Comment[it]=Proteggi i tuoi occhi dalla stanchezza +Comment[lt]=Apsaugokite savo akis nuo įtampos +Comment[lv]=AizsargÄjiet savas acis no pÄrslodzes +Comment[mk]=ÐаÑÑиÑеÑе Ñе од Ð·Ð°Ð¼Ð¾Ñ Ð½Ð° оÑиÑе +Comment[pl]=ChroÅ oczy przed zmÄczeniem +Comment[pt]=Proteja seus olhos da tensão ocular +Comment[ru]=ÐаÑиÑиÑе Ñвои глаза Ð¾Ñ Ð·ÑиÑелÑного пеÑенапÑÑÐ¶ÐµÐ½Ð¸Ñ +Comment[sk]=ChráÅte svoje oÄi pred únavou +Comment[ta]=à®à®à¯à®à®³à¯ à®à®£à¯à®à®³à¯ à®à¯à®°à¯à®µà®à¯à®¯à®¾à®¤à¯ பாதà¯à®à®¾à®¤à¯à®¤à®¿à®à¯à®à¯à®à®³à¯ +Comment[tr]=Gözünüzü yorgunluÄa karÅı koruyun +Comment[uk]=ÐÐ°Ñ Ð¸ÑÑÑÑÑ ÑÐ²Ð¾Ñ Ð¾ÑÑ Ð²Ñд вÑоми +Comment[vi]=Bảo vá» Äôi mắt của bạn khá»i sá»± má»t má»i +Exec=env GDK_BACKEND=x11 safeeyes +Icon=io.github.slgobinath.SafeEyes +Terminal=false +Type=Application +Categories=Utility; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/platform/io.github.slgobinath.SafeEyes.metainfo.xml new/safeeyes-2.1.6/safeeyes/platform/io.github.slgobinath.SafeEyes.metainfo.xml --- old/safeeyes-2.1.4/safeeyes/platform/io.github.slgobinath.SafeEyes.metainfo.xml 1970-01-01 01:00:00.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/platform/io.github.slgobinath.SafeEyes.metainfo.xml 2023-07-05 02:09:53.000000000 +0200 @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> +<component type="desktop-application"> + <id>io.github.slgobinath.SafeEyes</id> + + <name>Safe Eyes</name> + <developer_name>Gobinath</developer_name> + <summary>A Free and Open Source tool for Linux users to reduce and prevent repetitive strain + injury (RSI).</summary> + + <metadata_license>CC0-1.0</metadata_license> + <project_license>GPL-3.0</project_license> + + <categories> + <category>Utility</category> + <category>Accessibility</category> + </categories> + + <description> + <p> + Protect your eyes from eye strain using this simple and beautiful, yet extensible break + reminder + </p> + <p> + Features: + </p> + <p> + Remind you to take breaks with exercises to reduce RSI, Disable keyboard during breaks, + Notification before and after breaks, Smart pause if system is idle, Multi-screen + support, Customizable user interface, RPC API to control externally, Command-line + arguments to control the running instance, Customizable using plug-ins + </p> + </description> + + <launchable type="desktop-id">io.github.slgobinath.SafeEyes.desktop</launchable> + <screenshots> + <screenshot type="default"> + <image>https://slgobinath.github.io/SafeEyes/assets/screenshots/safeeyes_1.png</image> + </screenshot> + <screenshot> + <image>https://slgobinath.github.io/SafeEyes/assets/screenshots/safeeyes_3.png</image> + </screenshot> + <screenshot> + <image>https://slgobinath.github.io/SafeEyes/assets/screenshots/safeeyes_6.png</image> + </screenshot> + </screenshots> + + <url type="homepage">https://slgobinath.github.io/SafeEyes/</url> + + <releases> + <release version="2.1.6" date="2023-06-04" /> + </releases> + + <content_rating type="oars-1.1" /> + +</component> \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/platform/safeeyes.desktop new/safeeyes-2.1.6/safeeyes/platform/safeeyes.desktop --- old/safeeyes-2.1.4/safeeyes/platform/safeeyes.desktop 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/platform/safeeyes.desktop 1970-01-01 01:00:00.000000000 +0100 @@ -1,31 +0,0 @@ -[Desktop Entry] -Name=Safe Eyes -Comment=Protect your eyes from eye strain -Comment[ca]=Protegiu-vos els ulls de la fatiga visual -Comment[cs]=ChraÅte své oÄi pÅed únavou -Comment[de]=Schützt die Augen vor Ãberanstrengung -Comment[es]=Protege tus ojos de la fatiga ocular -Comment[et]=Kaitse oma silmi väsimuse eest -Comment[fa]=Ù ØاÙظت ÚØ´Ù Ùااز ضعÛ٠شد٠-Comment[fr]=Protégez vos yeux de la fatigue -Comment[ge]=ááááªáááá áá¥áááá ááááááá ááá¦ááááááá¡áááá -Comment[hi]=तनाव सॠà¤à¤à¤à¥à¤ à¤à¥ रà¤à¥à¤·à¤¾ -Comment[hu]=Protect your eyes from eye strain -Comment[id]=Melindungi mata Anda dari kelelahan -Comment[it]=Proteggi i tuoi occhi dalla stanchezza -Comment[lt]=Apsaugokite savo akis nuo įtampos -Comment[lv]=AizsargÄjiet savas acis no pÄrslodzes -Comment[mk]=ÐаÑÑиÑеÑе Ñе од Ð·Ð°Ð¼Ð¾Ñ Ð½Ð° оÑиÑе -Comment[pl]=ChroÅ oczy przed zmÄczeniem -Comment[pt]=Proteja seus olhos da tensão ocular -Comment[ru]=ÐаÑиÑиÑе Ñвои глаза Ð¾Ñ Ð·ÑиÑелÑного пеÑенапÑÑÐ¶ÐµÐ½Ð¸Ñ -Comment[sk]=ChráÅte svoje oÄi pred únavou -Comment[ta]=à®à®à¯à®à®³à¯ à®à®£à¯à®à®³à¯ à®à¯à®°à¯à®µà®à¯à®¯à®¾à®¤à¯ பாதà¯à®à®¾à®¤à¯à®¤à®¿à®à¯à®à¯à®à®³à¯ -Comment[tr]=Gözünüzü yorgunluÄa karÅı koruyun -Comment[uk]=ÐÐ°Ñ Ð¸ÑÑÑÑÑ ÑÐ²Ð¾Ñ Ð¾ÑÑ Ð²Ñд вÑоми -Comment[vi]=Bảo vá» Äôi mắt của bạn khá»i sá»± má»t má»i -Exec=env GDK_BACKEND=x11 safeeyes -Icon=safeeyes -Terminal=false -Type=Application -Categories=Utility; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/plugin_manager.py new/safeeyes-2.1.6/safeeyes/plugin_manager.py --- old/safeeyes-2.1.4/safeeyes/plugin_manager.py 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/plugin_manager.py 2023-07-05 02:09:53.000000000 +0200 @@ -84,8 +84,12 @@ for plugin in config.get('plugins'): try: self.__load_plugin(plugin) - except BaseException: - logging.error('Error in loading the plugin: %s', plugin['id']) + except BaseException as e: + traceback_wanted = logging.getLogger().getEffectiveLevel() == logging.DEBUG + if traceback_wanted: + import traceback + traceback.print_exc() + logging.error('Error in loading the plugin %s: %s', plugin['id'], e) continue # Initialize the plugins for plugin in self.__plugins_on_init: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/plugins/donotdisturb/plugin.py new/safeeyes-2.1.6/safeeyes/plugins/donotdisturb/plugin.py --- old/safeeyes-2.1.4/safeeyes/plugins/donotdisturb/plugin.py 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/plugins/donotdisturb/plugin.py 2023-07-05 02:09:53.000000000 +0200 @@ -80,16 +80,15 @@ # Extract the process name process_names = re.findall('"(.+?)"', stdout) if process_names: - process = process_names[1].lower() - if process in skip_break_window_classes: + process_name = process_names[1].lower() + if _window_class_matches(process_name, skip_break_window_classes): return True - elif process in take_break_window_classes: + elif _window_class_matches(process_name, take_break_window_classes): if is_fullscreen and unfullscreen_allowed and not pre_break: try: active_window.unfullscreen() - except BaseException: - logging.error( - 'Error in unfullscreen the window ' + process) + except BaseException as e: + logging.error('Error in unfullscreen the window ' + process_name, exc_info=e) return False return is_fullscreen @@ -97,6 +96,10 @@ return False +def _window_class_matches(window_class: str, classes: list) -> bool: + return any(map(lambda w: w in classes, window_class.split())) + + def is_on_battery(): """ Check if the computer is running on battery. @@ -131,12 +134,16 @@ global dnd_while_on_battery logging.debug('Initialize Skip Fullscreen plugin') context = ctx - skip_break_window_classes = plugin_config['skip_break_windows'].split() - take_break_window_classes = plugin_config['take_break_windows'].split() + skip_break_window_classes = _normalize_window_classes(plugin_config['skip_break_windows']) + take_break_window_classes = _normalize_window_classes(plugin_config['take_break_windows']) unfullscreen_allowed = plugin_config['unfullscreen'] dnd_while_on_battery = plugin_config['while_on_battery'] +def _normalize_window_classes(classes_as_str: str): + return [w.lower() for w in classes_as_str.split()] + + def on_pre_break(break_obj): """ Lifecycle method executes before the pre-break period. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/plugins/healthstats/plugin.py new/safeeyes-2.1.6/safeeyes/plugins/healthstats/plugin.py --- old/safeeyes-2.1.4/safeeyes/plugins/healthstats/plugin.py 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/plugins/healthstats/plugin.py 2023-07-05 02:09:53.000000000 +0200 @@ -27,7 +27,6 @@ context = None no_of_skipped_breaks = 0 no_of_breaks = 0 -no_of_cycles = -1 session = None safe_eyes_start_time = datetime.datetime.now() total_idle_time = 0 @@ -46,7 +45,6 @@ global session global no_of_skipped_breaks global no_of_breaks - global no_of_cycles global statistics_reset_cron global safe_eyes_start_time global total_idle_time @@ -71,7 +69,6 @@ if session is None: session = {'no_of_skipped_breaks': 0, 'no_of_breaks': 0, - 'no_of_cycles': -1, 'safe_eyes_start_time': safe_eyes_start_time.strftime("%Y-%m-%d %H:%M:%S"), 'total_idle_time': 0, 'last_screen_time': -1, @@ -79,7 +76,6 @@ context['session']['plugin']['healthstats'] = session no_of_skipped_breaks = session.get('no_of_skipped_breaks', 0) no_of_breaks = session.get('no_of_breaks', 0) - no_of_cycles = session.get('no_of_cycles', -1) total_idle_time = session.get('total_idle_time', 0) last_screen_time = session.get('last_screen_time', -1) str_time = session.get('safe_eyes_start_time', None) @@ -115,12 +111,8 @@ return "" global no_of_breaks - global no_of_cycles no_of_breaks += 1 - if context['new_cycle']: - no_of_cycles += 1 session['no_of_breaks'] = no_of_breaks - session['no_of_cycles'] = no_of_cycles session['safe_eyes_start_time'] = safe_eyes_start_time.strftime("%Y-%m-%d %H:%M:%S") session['total_idle_time'] = total_idle_time session['last_screen_time'] = last_screen_time @@ -129,7 +121,6 @@ def _reset_stats(): global no_of_breaks - global no_of_cycles global safe_eyes_start_time global total_idle_time global no_of_skipped_breaks @@ -154,10 +145,8 @@ last_screen_time = round((total_duration_sec - total_idle_time) / 60) total_idle_time = 0 no_of_breaks = 0 - no_of_cycles = 0 no_of_skipped_breaks = 0 session['no_of_breaks'] = 0 - session['no_of_cycles'] = 0 session['no_of_skipped_breaks'] = 0 session['safe_eyes_start_time'] = safe_eyes_start_time.strftime("%Y-%m-%d %H:%M:%S") session['total_idle_time'] = total_idle_time @@ -195,7 +184,7 @@ elif screen_time < last_screen_time: symbol = '-' screen_time_diff = ' ( {}{:02d}:{:02d} )'.format(symbol, hrs_diff, mins_diff) - return "{}\tBREAKS: {}\tSKIPPED: {}\tCYCLES: {}\tSCREEN TIME: {}{}".format(heart, no_of_breaks, no_of_skipped_breaks, no_of_cycles, time_format, screen_time_diff) + return "{}\tBREAKS: {}\tSKIPPED: {}\tSCREEN TIME: {}{}".format(heart, no_of_breaks, no_of_skipped_breaks, time_format, screen_time_diff) def on_start(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/plugins/notification/plugin.py new/safeeyes-2.1.6/safeeyes/plugins/notification/plugin.py --- old/safeeyes-2.1.4/safeeyes/plugins/notification/plugin.py 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/plugins/notification/plugin.py 2023-07-05 02:09:53.000000000 +0200 @@ -60,7 +60,7 @@ else: message += (_('Ready for a long break in %s seconds') % warning_time) - notification = Notify.Notification.new('Safe Eyes', message, icon='safeeyes_enabled') + notification = Notify.Notification.new('Safe Eyes', message, icon='io.github.slgobinath.SafeEyes-enabled') try: notification.show() except BaseException: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/plugins/trayicon/plugin.py new/safeeyes-2.1.6/safeeyes/plugins/trayicon/plugin.py --- old/safeeyes-2.1.4/safeeyes/plugins/trayicon/plugin.py 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/plugins/trayicon/plugin.py 2023-07-05 02:09:53.000000000 +0200 @@ -17,6 +17,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. import datetime +from safeeyes.model import BreakType import gi gi.require_version('Gtk', '3.0') try: @@ -67,7 +68,7 @@ # Construct the tray icon self.indicator = appindicator.Indicator.new( - APPINDICATOR_ID, "safeeyes_enabled", appindicator.IndicatorCategory.APPLICATION_STATUS) + APPINDICATOR_ID, "io.github.slgobinath.SafeEyes-enabled", appindicator.IndicatorCategory.APPLICATION_STATUS) self.indicator.set_status(appindicator.IndicatorStatus.ACTIVE) # Construct the context menu @@ -76,7 +77,7 @@ # Next break info menu item self.item_info = Gtk.ImageMenuItem() img_timer = Gtk.Image() - img_timer.set_from_icon_name("safeeyes_timer", 16) + img_timer.set_from_icon_name("io.github.slgobinath.SafeEyes-timer", 16) self.item_info.set_image(img_timer) self.item_separator = Gtk.SeparatorMenuItem() @@ -85,10 +86,8 @@ self.item_enable.connect('activate', self.on_enable_clicked) self.item_disable = Gtk.MenuItem() - self.item_disable.connect('activate', self.on_disable_clicked) - self.sub_menu_disable = Gtk.Menu() - self.sub_menu_items = [] + self.sub_menu_disable_items = [] # Read disable options and build the sub menu for disable_option in plugin_config['disable_options']: @@ -116,7 +115,7 @@ # Create submenu sub_menu_item = Gtk.MenuItem() sub_menu_item.connect('activate', self.on_disable_clicked, time_in_minutes) - self.sub_menu_items.append([sub_menu_item, label, disable_option['time']]) + self.sub_menu_disable_items.append([sub_menu_item, label, disable_option['time']]) self.sub_menu_disable.append(sub_menu_item) # Disable until restart submenu @@ -129,7 +128,19 @@ # Settings menu item self.item_manual_break = Gtk.MenuItem() - self.item_manual_break.connect('activate', self.on_manual_break_clicked) + + self.sub_menu_manual_next_break = Gtk.MenuItem() + self.sub_menu_manual_next_break.connect('activate', self.on_manual_break_clicked, None) + self.sub_menu_manual_next_short_break = Gtk.MenuItem() + self.sub_menu_manual_next_short_break.connect('activate', self.on_manual_break_clicked, BreakType.SHORT_BREAK) + self.sub_menu_manual_next_long_break = Gtk.MenuItem() + self.sub_menu_manual_next_long_break.connect('activate', self.on_manual_break_clicked, BreakType.LONG_BREAK) + + self.sub_menu_manual_break = Gtk.Menu() + self.sub_menu_manual_break.append(self.sub_menu_manual_next_break) + self.sub_menu_manual_break.append(self.sub_menu_manual_next_short_break) + self.sub_menu_manual_break.append(self.sub_menu_manual_next_long_break) + self.item_manual_break.set_submenu(self.sub_menu_manual_break) # Settings menu item self.item_settings = Gtk.MenuItem() @@ -182,7 +193,7 @@ """ Update the text of menu items based on the selected language. """ - for entry in self.sub_menu_items: + for entry in self.sub_menu_disable_items: # print(self.context['locale'].ngettext('For %d Hour', 'For %d Hours', 1) % 1) entry[0].set_label(self.context['locale'].ngettext(entry[1][0], entry[1][1], entry[2]) % entry[2]) @@ -195,24 +206,27 @@ if self.active: if self.date_time: self.__set_next_break_info() - self.indicator.set_icon("safeeyes_enabled") + self.indicator.set_icon("io.github.slgobinath.SafeEyes-enabled") else: if self.wakeup_time: self.item_info.set_label(_('Disabled until %s') % utility.format_time(self.wakeup_time)) else: self.item_info.set_label(_('Disabled until restart')) self.indicator.set_label('', '') - self.indicator.set_icon("safeeyes_disabled") + self.indicator.set_icon("io.github.slgobinath.SafeEyes-disabled") else: self.item_info.set_label(_('No Breaks Available')) self.indicator.set_label('', '') - self.indicator.set_icon("safeeyes_disabled") + self.indicator.set_icon("io.github.slgobinath.SafeEyes-disabled") self.item_info.set_sensitive(breaks_found and self.active) self.item_enable.set_sensitive(breaks_found and not self.active) self.item_disable.set_sensitive(breaks_found and self.active) self.item_manual_break.set_sensitive(breaks_found and self.active) self.item_manual_break.set_label(_('Take a break now')) + self.sub_menu_manual_next_break.set_label(_('Any break')) + self.sub_menu_manual_next_short_break.set_label(_('Short break')) + self.sub_menu_manual_next_long_break.set_label(_('Long break')) self.item_settings.set_label(_('Settings')) self.item_about.set_label(_('About')) self.item_quit.set_label(_('Quit')) @@ -282,7 +296,11 @@ """ Trigger a break manually. """ - self.take_break() + if len(args) > 1: + break_type = args[1] + self.take_break(break_type) + else: + self.take_break() def on_enable_clicked(self, *args): """ @@ -342,7 +360,7 @@ if self.active: logging.info('Disable Safe Eyes') self.active = False - self.indicator.set_icon("safeeyes_disabled") + self.indicator.set_icon("io.github.slgobinath.SafeEyes-disabled") self.item_info.set_label(_('Disabled until restart')) self.indicator.set_label('', '') self.item_info.set_sensitive(False) @@ -357,7 +375,7 @@ if not self.active: logging.info('Enable Safe Eyes') self.active = True - self.indicator.set_icon("safeeyes_enabled") + self.indicator.set_icon("io.github.slgobinath.SafeEyes-enabled") self.item_info.set_sensitive(True) self.item_enable.set_sensitive(False) self.item_disable.set_sensitive(True) @@ -378,9 +396,9 @@ def start_animation(self): if not self.active or not self.animate: return - utility.execute_main_thread(lambda: self.indicator.set_icon("safeeyes_disabled")) + utility.execute_main_thread(lambda: self.indicator.set_icon("io.github.slgobinath.SafeEyes-disabled")) time.sleep(0.5) - utility.execute_main_thread(lambda: self.indicator.set_icon("safeeyes_enabled")) + utility.execute_main_thread(lambda: self.indicator.set_icon("io.github.slgobinath.SafeEyes-enabled")) if self.animate and self.active: time.sleep(0.5) if self.animate and self.active: @@ -389,9 +407,9 @@ def stop_animation(self): self.animate = False if self.active: - utility.execute_main_thread(lambda: self.indicator.set_icon("safeeyes_enabled")) + utility.execute_main_thread(lambda: self.indicator.set_icon("io.github.slgobinath.SafeEyes-enabled")) else: - utility.execute_main_thread(lambda: self.indicator.set_icon("safeeyes_disabled")) + utility.execute_main_thread(lambda: self.indicator.set_icon("io.github.slgobinath.SafeEyes-disabled")) def init(ctx, safeeyes_cfg, plugin_config): """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/safeeyes.py new/safeeyes-2.1.6/safeeyes/safeeyes.py --- old/safeeyes-2.1.4/safeeyes/safeeyes.py 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/safeeyes.py 2023-07-05 02:09:53.000000000 +0200 @@ -40,7 +40,7 @@ gi.require_version('Gtk', '3.0') from gi.repository import Gtk -SAFE_EYES_VERSION = "2.1.4" +SAFE_EYES_VERSION = "2.1.6" class SafeEyes: @@ -93,8 +93,7 @@ self.safe_eyes_core.on_stop_break += self.stop_break self.safe_eyes_core.on_update_next_break += self.update_next_break self.safe_eyes_core.initialize(self.config) - self.context['api']['take_break'] = lambda: utility.execute_main_thread( - self.safe_eyes_core.take_break) + self.context['api']['take_break'] = self.take_break self.context['api']['has_breaks'] = self.safe_eyes_core.has_breaks self.context['api']['postpone'] = self.safe_eyes_core.postpone self.plugins_manager.init(self.context, self.config) @@ -295,11 +294,11 @@ self.plugins_manager.stop_break() return True - def take_break(self): + def take_break(self, break_type = None): """ Take a break now. """ - self.safe_eyes_core.take_break() + utility.execute_main_thread(self.safe_eyes_core.take_break, break_type) def status(self): """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/safeeyes/utility.py new/safeeyes-2.1.6/safeeyes/utility.py --- old/safeeyes-2.1.4/safeeyes/utility.py 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/safeeyes/utility.py 2023-07-05 02:09:53.000000000 +0200 @@ -51,10 +51,11 @@ HOME_DIRECTORY = os.environ.get('HOME') or os.path.expanduser('~') CONFIG_DIRECTORY = os.path.join(os.environ.get( 'XDG_CONFIG_HOME') or os.path.join(HOME_DIRECTORY, '.config'), 'safeeyes') +STYLE_SHEET_DIRECTORY = os.path.join(CONFIG_DIRECTORY, 'style') CONFIG_FILE_PATH = os.path.join(CONFIG_DIRECTORY, 'safeeyes.json') CONFIG_RESOURCE = os.path.join(CONFIG_DIRECTORY, 'resource') SESSION_FILE_PATH = os.path.join(CONFIG_DIRECTORY, 'session.json') -STYLE_SHEET_PATH = os.path.join(CONFIG_DIRECTORY, 'style/safeeyes_style.css') +STYLE_SHEET_PATH = os.path.join(STYLE_SHEET_DIRECTORY, 'safeeyes_style.css') SYSTEM_CONFIG_FILE_PATH = os.path.join(BIN_DIRECTORY, "config/safeeyes.json") SYSTEM_STYLE_SHEET_PATH = os.path.join( BIN_DIRECTORY, "config/style/safeeyes_style.css") @@ -62,7 +63,7 @@ SYSTEM_PLUGINS_DIR = os.path.join(BIN_DIRECTORY, 'plugins') USER_PLUGINS_DIR = os.path.join(CONFIG_DIRECTORY, 'plugins') LOCALE_PATH = os.path.join(BIN_DIRECTORY, 'config/locale') -SYSTEM_DESKTOP_FILE = os.path.join(BIN_DIRECTORY, "platform/safeeyes.desktop") +SYSTEM_DESKTOP_FILE = os.path.join(BIN_DIRECTORY, "platform/io.github.slgobinath.SafeEyes.desktop") SYSTEM_ICONS = os.path.join(BIN_DIRECTORY, "platform/icons") DESKTOP_ENVIRONMENT = None IS_WAYLAND = False @@ -371,17 +372,15 @@ def initialize_safeeyes(): """ - Create the config file and style sheet in ~/.config/safeeyes directory. + Create the config file and style sheet in XDG_CONFIG_HOME(or ~/.config)/safeeyes directory. """ - logging.info('Copy the config files to ~/.config/safeeyes') - - style_dir_path = os.path.join(HOME_DIRECTORY, '.config/safeeyes/style') + logging.info('Copy the config files to XDG_CONFIG_HOME(or ~/.config)/safeeyes') # Remove the ~/.config/safeeyes/safeeyes.json file delete(CONFIG_FILE_PATH) - # Create the ~/.config/safeeyes/style directory - mkdir(style_dir_path) + # Create the XDG_CONFIG_HOME(or ~/.config)/safeeyes/style directory + mkdir(STYLE_SHEET_DIRECTORY) # Copy the safeeyes.json shutil.copy2(SYSTEM_CONFIG_FILE_PATH, CONFIG_FILE_PATH) @@ -400,7 +399,7 @@ Create start up entry. """ startup_dir_path = os.path.join(HOME_DIRECTORY, '.config/autostart') - startup_entry = os.path.join(startup_dir_path, 'safeeyes.desktop') + startup_entry = os.path.join(startup_dir_path, 'io.github.slgobinath.SafeEyes.desktop') # Create the folder if not exist mkdir(startup_dir_path) @@ -423,13 +422,13 @@ applications_dir_path = os.path.join(HOME_DIRECTORY, '.local/share/applications') icons_dir_path = os.path.join(HOME_DIRECTORY, '.local/share/icons') - desktop_entry = os.path.join(applications_dir_path, 'safeeyes.desktop') + desktop_entry = os.path.join(applications_dir_path, 'io.github.slgobinath.SafeEyes.desktop') # Create the folder if not exist mkdir(icons_dir_path) # Create a desktop entry - if not os.path.exists(os.path.join(sys.prefix, "share/applications/safeeyes.desktop")): + if not os.path.exists(os.path.join(sys.prefix, "share/applications/io.github.slgobinath.SafeEyes.desktop")): # Create the folder if not exist mkdir(applications_dir_path) @@ -666,7 +665,7 @@ Check whether the given function is defined in the module or not. """ if hasattr(module, method_name): - if len(inspect.getargspec(getattr(module, method_name)).args) == no_of_args: + if len(inspect.getfullargspec(getattr(module, method_name)).args) == no_of_args: return True return False diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/safeeyes-2.1.4/setup.py new/safeeyes-2.1.6/setup.py --- old/safeeyes-2.1.4/setup.py 2022-11-20 23:53:33.000000000 +0100 +++ new/safeeyes-2.1.6/setup.py 2023-07-05 02:09:53.000000000 +0200 @@ -41,17 +41,17 @@ Collect the data files. """ root_dir = sys.prefix - return [(os.path.join(root_dir, "share/applications"), ["safeeyes/platform/safeeyes.desktop"]), - (os.path.join(root_dir, "share/icons/hicolor/24x24/status"), ["safeeyes/platform/icons/hicolor/24x24/status/safeeyes_disabled.png", "safeeyes/platform/icons/hicolor/24x24/status/safeeyes_enabled.png", "safeeyes/platform/icons/hicolor/24x24/status/safeeyes_timer.png"]), - (os.path.join(root_dir, "share/icons/hicolor/24x24/apps"), ["safeeyes/platform/icons/hicolor/24x24/apps/safeeyes.png"]), - (os.path.join(root_dir, "share/icons/hicolor/16x16/status"), ["safeeyes/platform/icons/hicolor/16x16/status/safeeyes_disabled.png", "safeeyes/platform/icons/hicolor/16x16/status/safeeyes_enabled.png", "safeeyes/platform/icons/hicolor/16x16/status/safeeyes_timer.png"]), - (os.path.join(root_dir, "share/icons/hicolor/16x16/apps"), ["safeeyes/platform/icons/hicolor/16x16/apps/safeeyes.png"]), - (os.path.join(root_dir, "share/icons/hicolor/32x32/status"), ["safeeyes/platform/icons/hicolor/32x32/status/safeeyes_disabled.png", "safeeyes/platform/icons/hicolor/32x32/status/safeeyes_enabled.png"]), - (os.path.join(root_dir, "share/icons/hicolor/32x32/apps"), ["safeeyes/platform/icons/hicolor/32x32/apps/safeeyes.png"]), - (os.path.join(root_dir, "share/icons/hicolor/64x64/apps"), ["safeeyes/platform/icons/hicolor/64x64/apps/safeeyes.png"]), - (os.path.join(root_dir, "share/icons/hicolor/128x128/apps"), ["safeeyes/platform/icons/hicolor/128x128/apps/safeeyes.png"]), - (os.path.join(root_dir, "share/icons/hicolor/48x48/status"), ["safeeyes/platform/icons/hicolor/48x48/status/safeeyes_disabled.png", "safeeyes/platform/icons/hicolor/48x48/status/safeeyes_enabled.png"]), - (os.path.join(root_dir, "share/icons/hicolor/48x48/apps"), ["safeeyes/platform/icons/hicolor/48x48/apps/safeeyes.png"]),] + return [(os.path.join(root_dir, "share/applications"), ["safeeyes/platform/io.github.slgobinath.SafeEyes.desktop"]), + (os.path.join(root_dir, "share/icons/hicolor/24x24/status"), ["safeeyes/platform/icons/hicolor/24x24/status/io.github.slgobinath.SafeEyes-disabled.png", "safeeyes/platform/icons/hicolor/24x24/status/io.github.slgobinath.SafeEyes-enabled.png", "safeeyes/platform/icons/hicolor/24x24/status/io.github.slgobinath.SafeEyes-timer.png"]), + (os.path.join(root_dir, "share/icons/hicolor/24x24/apps"), ["safeeyes/platform/icons/hicolor/24x24/apps/io.github.slgobinath.SafeEyes.png"]), + (os.path.join(root_dir, "share/icons/hicolor/16x16/status"), ["safeeyes/platform/icons/hicolor/16x16/status/io.github.slgobinath.SafeEyes-disabled.png", "safeeyes/platform/icons/hicolor/16x16/status/io.github.slgobinath.SafeEyes-enabled.png", "safeeyes/platform/icons/hicolor/16x16/status/io.github.slgobinath.SafeEyes-timer.png"]), + (os.path.join(root_dir, "share/icons/hicolor/16x16/apps"), ["safeeyes/platform/icons/hicolor/16x16/apps/io.github.slgobinath.SafeEyes.png"]), + (os.path.join(root_dir, "share/icons/hicolor/32x32/status"), ["safeeyes/platform/icons/hicolor/32x32/status/io.github.slgobinath.SafeEyes-disabled.png", "safeeyes/platform/icons/hicolor/32x32/status/io.github.slgobinath.SafeEyes-enabled.png"]), + (os.path.join(root_dir, "share/icons/hicolor/32x32/apps"), ["safeeyes/platform/icons/hicolor/32x32/apps/io.github.slgobinath.SafeEyes.png"]), + (os.path.join(root_dir, "share/icons/hicolor/64x64/apps"), ["safeeyes/platform/icons/hicolor/64x64/apps/io.github.slgobinath.SafeEyes.png"]), + (os.path.join(root_dir, "share/icons/hicolor/128x128/apps"), ["safeeyes/platform/icons/hicolor/128x128/apps/io.github.slgobinath.SafeEyes.png"]), + (os.path.join(root_dir, "share/icons/hicolor/48x48/status"), ["safeeyes/platform/icons/hicolor/48x48/status/io.github.slgobinath.SafeEyes-disabled.png", "safeeyes/platform/icons/hicolor/48x48/status/io.github.slgobinath.SafeEyes-enabled.png"]), + (os.path.join(root_dir, "share/icons/hicolor/48x48/apps"), ["safeeyes/platform/icons/hicolor/48x48/apps/io.github.slgobinath.SafeEyes.png"]),] def __package_files(directory): @@ -78,14 +78,14 @@ setuptools.setup( name="safeeyes", - version="2.1.4", + version="2.1.6", description="Protect your eyes from eye strain using this continuous breaks reminder.", long_description=long_description, long_description_content_type="text/markdown", author="Gobinath Loganathan", author_email="slgobin...@gmail.com", url="https://github.com/slgobinath/SafeEyes", - download_url="https://github.com/slgobinath/SafeEyes/archive/v2.1.4.tar.gz", + download_url="https://github.com/slgobinath/SafeEyes/archive/v2.1.6.tar.gz", packages=setuptools.find_packages(), package_data={'safeeyes': __package_data()}, data_files=__data_files(),