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(),

Reply via email to