Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).

## [Unreleased]
### Added
- option to pause breaks while another app is in full screen
### Fixed
- fix crashes on system unlock
- fix custom title for Mini break from command line
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -665,6 +665,7 @@ You can help to translate Stretchly on [Weblate](https://hosted.weblate.org/enga
- Philip Wintersteiner, [@Wikiwix](https://github.com/wikiwix)
- Steven Cai, [@stevencaiOR](https://github.com/stevencaiOR)
- Zhekai Jiang, [@zhekai-jiang](https://github.com/zhekai-jiang)
- Dima Kumankov, [@dkumankov](https://github.com/dkumankov)

Also see Github's list of [contributors](https://github.com/hovancik/stretchly/graphs/contributors).

Expand Down
33 changes: 32 additions & 1 deletion app/breaksPlanner.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import EventEmitter from 'events'
import NaturalBreaksManager from './utils/naturalBreaksManager.js'
import DndManager from './utils/dndManager.js'
import AppExclusionsManager from './utils/appExclusionsManager.js'
import FullscreenAppManager from './utils/fullscreenAppManager.js'
import log from 'electron-log/main.js'

class BreaksPlanner extends EventEmitter {
Expand All @@ -16,6 +17,7 @@ class BreaksPlanner extends EventEmitter {
this.naturalBreaksManager = new NaturalBreaksManager(settings)
this.dndManager = new DndManager(settings)
this.appExclusionsManager = new AppExclusionsManager(settings)
this.fullscreenAppManager = new FullscreenAppManager(settings)

this.on('microbreakStarted', (shouldPlaySound) => {
const interval = this.settings.get('microbreakDuration')
Expand All @@ -37,7 +39,7 @@ class BreaksPlanner extends EventEmitter {
})

this.naturalBreaksManager.on('naturalBreakFinished', () => {
if (!this.isPaused && this.scheduler.reference !== 'finishMicrobreak' && this.scheduler.reference !== 'finishBreak' && !this.dndManager.isOnDnd) {
if (!this.isPaused && this.scheduler.reference !== 'finishMicrobreak' && this.scheduler.reference !== 'finishBreak' && !this.dndManager.isOnDnd && !this.fullscreenAppManager.isOnFullscreenApp) {
this.reset()
log.info('Stretchly: resuming breaks after idle time')
this.emit('updateToolTip')
Expand Down Expand Up @@ -90,6 +92,24 @@ class BreaksPlanner extends EventEmitter {
}
})

this.fullscreenAppManager.on('fullscreenAppStarted', () => {
if (!this.isPaused && this.scheduler.reference !== 'finishMicrobreak' && this.scheduler.reference !== 'finishBreak' && this.scheduler.reference !== null) {
this.clear()
log.info('Stretchly: pausing breaks because a fullscreen app is active')
this.emit('updateToolTip')
} else {
this.fullscreenAppManager.isOnFullscreenApp = false
}
})

this.fullscreenAppManager.on('fullscreenAppFinished', () => {
if (!this.isPaused && this.scheduler.reference !== 'finishMicrobreak' && this.scheduler.reference !== 'finishBreak' && !this.dndManager.isOnDnd) {
this.reset()
log.info('Stretchly: resuming breaks after fullscreen app is no longer active')
this.emit('updateToolTip')
}
})

this.appExclusionsManager.on('appExclusionFinished', (rule) => {
if (rule === 'pause') {
if (!this.isPaused && this.scheduler.reference !== 'finishMicrobreak' && this.scheduler.reference !== 'finishBreak') {
Expand Down Expand Up @@ -271,6 +291,17 @@ class BreaksPlanner extends EventEmitter {
}
}

fullscreenApp (shouldUse) {
if (shouldUse) {
this.fullscreenAppManager.start()
} else {
this.fullscreenAppManager.stop()
if (!this.isPaused && this.scheduler.reference === null) {
this.reset()
}
}
}

get timeToNextBreak () {
if (!this.scheduler) return null
if (this.scheduler.reference === 'startMicrobreak' || this.scheduler.reference === 'startBreak') {
Expand Down
1 change: 1 addition & 0 deletions app/locales/ajp.json
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@
"fullscreen": "شاشة عرض كاملة",
"monitorIdleTime": "مراقبة وقت خمول النظام (الإستراحات تتوقف خلال وقت الخمول).",
"monitorDnd": "إظهار الإستراحات حتى خلال وضع عدم الإزعاج",
"monitorFullscreenApp": "إيقاف الاستراحات مؤقتاً عندما يكون تطبيق آخر بملء الشاشة",
"language": "إختَر لغة:",
"restoreDefaults": "إستعادة الوضع الإفتراضي"
}
Expand Down
1 change: 1 addition & 0 deletions app/locales/be.json
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@
"language": "Выбраць мову:",
"window": "Акно",
"monitorDnd": "Паказваць перапынкі нават у рэжыме \"Не турбаваць\"",
"monitorFullscreenApp": "Прыпыняць перапынкі, калі іншая праграма ў поўнаэкранным рэжыме",
"allScreens": "Паказваць перапынкі на ўсіх маніторах",
"restoreDefaults": "Аднавіць прадвызначаныя налады",
"monitorIdleTime": "Сачыць за прастоем сістэмы (парапынкі на паўзе, калі сістэма не выкарыстоўваецца).",
Expand Down
1 change: 1 addition & 0 deletions app/locales/bg.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
"allScreens": "Показване на известието за почивка на всички монитори",
"monitorIdleTime": "Следене на бездействието на системата (почивките се отлагат, когато системата стои в готовност).",
"monitorDnd": "Показване на почивките дори в режим „Не ме безпокойте“",
"monitorFullscreenApp": "Спиране на почивките, когато друго приложение е на цял екран",
"language": "Език:",
"restoreDefaults": "Връщане на настройките по подразбиране"
},
Expand Down
1 change: 1 addition & 0 deletions app/locales/ca.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
"openAtLogin": "Iniciar Stretchly automàticament en iniciar sessió",
"monitorIdleTime": "Controlar el temps inactiu del sistema (pauses són aturades si el sistema està inactiu).",
"monitorDnd": "Mostrar pauses fins i tot en el mode No Molestar",
"monitorFullscreenApp": "Pausa els descansos quan una altra aplicació estigui en pantalla completa",
"allScreens": "Mostrar pauses a tots els monitors",
"showIdeas": "Mostrar consells d'exercicis durant les pauses",
"fullscreen": "Pantalla completa",
Expand Down
1 change: 1 addition & 0 deletions app/locales/cs.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
"allScreens": "Zobrazovat přestávky na všech monitorech",
"monitorIdleTime": "Sledovat neaktivitu (přestávky jsou během vaší neaktivity přerušeny).",
"monitorDnd": "Zobrazovat přestávky i během režimu Nerušit",
"monitorFullscreenApp": "Pozastavit přestávky, když je jiná aplikace v režimu celé obrazovky",
"language": "Vyberte jazyk:",
"restoreDefaults": "Obnovit původní nastavení"
},
Expand Down
1 change: 1 addition & 0 deletions app/locales/da.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
"allScreens": "Vis pause på alle skærme",
"monitorIdleTime": "Hold øje med om computeren bliver brugt eller ej (Nedtælling til pause stoppes)",
"monitorDnd": "Vis pauser også selvom du er i 'Ikke forstyr tilstand'",
"monitorFullscreenApp": "Sæt pauser på pause, når en anden app er i fuld skærm",
"language": "Vælg sprog:",
"restoreDefaults": "Nulstil til standardindstillinger"
},
Expand Down
1 change: 1 addition & 0 deletions app/locales/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
"allScreens": "Pausen auf allen Monitoren anzeigen",
"monitorIdleTime": "Abwesenheit vom Gerät berücksichtigen (Zeit, wenn das System inaktiv ist, wird nicht mitgezählt).",
"monitorDnd": "Pausen auch im Modus \"Nicht stören\" anzeigen",
"monitorFullscreenApp": "Pausen anhalten, wenn eine andere App im Vollbildmodus ist",
"language": "Sprache auswählen:",
"restoreDefaults": "Standardeinstellungen wiederherstellen"
},
Expand Down
1 change: 1 addition & 0 deletions app/locales/el.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
"fullscreen": "Πλήρης οθόνη",
"showIdeas": "Εμφάνιση συμβουλών άσκησης κατά τη διάρκεια των διαλειμμάτων",
"monitorDnd": "Εμφάνιση διαλειμμάτων ακόμη και σε λειτουργία Μη Ενοχλήσεως",
"monitorFullscreenApp": "Παύση διαλειμμάτων όταν μια άλλη εφαρμογή είναι σε πλήρη οθόνη",
"language": "Επιλέξτε γλώσσα:",
"restoreDefaults": "Επαναφορά προεπιλογών",
"window": "Παράθυρο",
Expand Down
1 change: 1 addition & 0 deletions app/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
"allScreens": "Shows breaks on all monitors",
"monitorIdleTime": "Monitor system idle time (breaks are paused if system is idle).",
"monitorDnd": "Show breaks even in Do Not Disturb mode",
"monitorFullscreenApp": "Pause breaks while another app is in full screen",
"language": "Select language:",
"restoreDefaults": "Restore defaults"
},
Expand Down
1 change: 1 addition & 0 deletions app/locales/eo.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
"allScreens": "Montri paŭzojn en ĉiuj ekranoj",
"monitorIdleTime": "Observi senokupan tempon (Paŭzigi paŭzojn se sistemo estas senokupa).",
"monitorDnd": "Montri paŭzojn eĉ en senĝena reĝimo",
"monitorFullscreenApp": "Paŭzigi paŭzojn kiam alia aplikaĵo estas en plena ekrano",
"language": "Elekti lingvon:",
"restoreDefaults": "Restaŭri la defaŭltojn"
},
Expand Down
1 change: 1 addition & 0 deletions app/locales/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
"allScreens": "Mostrar descansos en todos los monitores",
"monitorIdleTime": "Supervise el tiempo de inactividad del sistema (los descansos se pausan si el sistema está inactivo).",
"monitorDnd": "Mostrar pausas incluso en el modo No molestar",
"monitorFullscreenApp": "Pausar los descansos cuando otra aplicación esté en pantalla completa",
"language": "Seleccione el idioma:",
"restoreDefaults": "Restaurar valores predeterminados"
},
Expand Down
1 change: 1 addition & 0 deletions app/locales/et.json
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@
"language": "Vali keel:",
"window": "Aknas",
"monitorDnd": "Näita pause isegi \"Ära häiri\" režiimis",
"monitorFullscreenApp": "Peata pausid, kui mõni teine rakendus on täisekraanil",
"allScreens": "Kuvab pause kõigil ekraanidel",
"restoreDefaults": "Taasta vaikeseaded",
"monitorIdleTime": "Monitoorib süsteemi passiivset aega (pausid on peatatud, kui süsteem on passiivne).",
Expand Down
1 change: 1 addition & 0 deletions app/locales/fa.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"restoreDefaults": "بازگرداندن تنظیمات پیش‌فرض",
"language": "انتخاب زبان:",
"monitorDnd": "نمایش استراحت‌ها حتی در حالت «مزاحم نشوید»",
"monitorFullscreenApp": "توقف استراحت‌ها هنگامی که برنامه دیگری در حالت تمام‌صفحه است",
"monitorIdleTime": "بررسی زمان بیکاری سیستم (وقتی سیستم بیکار است استراحت‌ها متوقف می‌شوند).",
"allScreens": "نمایش استراحت‌ها در همهٔ نمایشگرها",
"showIdeas": "نمایش ورزش‌های پیشنهادی در طول استراحت‌ها",
Expand Down
1 change: 1 addition & 0 deletions app/locales/fi.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
"allScreens": "Näytä tauot kaikilla näytöillä.",
"monitorIdleTime": "Seuraa järjestelmän käyttöä (tauot pysäytetään, jos järjestelmää ei käytetä).",
"monitorDnd": "Näytä tauot myös Älä häiritse tilassa",
"monitorFullscreenApp": "Keskeytä tauot, kun toinen sovellus on koko näytöllä",
"language": "Valitse kieli:",
"restoreDefaults": "Palauta oletusasetukset"
},
Expand Down
1 change: 1 addition & 0 deletions app/locales/fil.json
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
"showIdeas": "Ipakita ang mga tip sa pag ehersisyo kapag nasa pahinga",
"allScreens": "Ipakita ang pahinga sa lahat na mga monitor",
"monitorDnd": "Ipakita ang pahinga kahit nasa Do Not Disturb na pamamaraan",
"monitorFullscreenApp": "I-pause ang mga pahinga kapag ang ibang app ay nasa fullscreen",
"language": "Pumili ng wika:",
"restoreDefaults": "Ibalik ang defaults",
"showBreaksIn": "Ipakita ang pahinga sa:",
Expand Down
1 change: 1 addition & 0 deletions app/locales/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
"allScreens": "Montrer les pauses sur tous les écrans",
"monitorIdleTime": "Surveiller les périodes d'inactivité (le décompte des pauses s'arrêtera si le système est inactif).",
"monitorDnd": "Afficher les pauses même en mode « Ne pas déranger »",
"monitorFullscreenApp": "Mettre les pauses en attente lorsqu'une autre application est en plein écran",
"language": "Choisissez votre langue :",
"restoreDefaults": "Réinitialiser"
},
Expand Down
1 change: 1 addition & 0 deletions app/locales/gl.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
"allScreens": "Amosar descansos en todos os monitores",
"monitorIdleTime": "Supervisar a inactividade do sistema (deter os descansos si o sistema está inactivo).",
"monitorDnd": "Amosar descansos incluso no modo Sen molestias",
"monitorFullscreenApp": "Pausar os descansos cando outra aplicación estea en pantalla completa",
"language": "Escoller idioma:",
"restoreDefaults": "Restituír opcións por defecto"
},
Expand Down
1 change: 1 addition & 0 deletions app/locales/gu.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
"allScreens": "બધા મોનિટર પર વિરામ બતાવો",
"monitorIdleTime": "નિષ્ક્રિય સિસ્ટમ સમયનું નિરીક્ષણ કરો (સિસ્ટમ નિષ્ક્રિય હોય તો વિરામ થોભાવવામાં આવે છે)",
"monitorDnd": "ખલેલ પાડશો નહીં પ્રકારમાં પણ વિરામ બતાવો",
"monitorFullscreenApp": "જ્યારે અન્ય ઍપ પૂર્ણસ્ક્રીન મોડમાં હોય ત્યારે વિરામો રોકો",
"language": "ભાષા પસંદ કરો:",
"restoreDefaults": "મૂળભૂત અવસ્થામાં પૂર્વવત કરો"
},
Expand Down
1 change: 1 addition & 0 deletions app/locales/he.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"restoreDefaults": "איפוס הגדרות",
"language": "נא לבחור שפה:",
"monitorDnd": "הצגת ההפסקות גם במצב „לא להפריע”",
"monitorFullscreenApp": "השהה הפסקות כאשר אפליקציה אחרת במסך מלא",
"monitorIdleTime": "מעקב אחר זמינות המערכת (ההפסקות יעצרו כאשר המערכת לא נמצאת בפעילות).",
"showIdeas": "הצגת הצעות לתרגילים בזמן ההפסקות",
"fullscreen": "על כל המסך",
Expand Down
1 change: 1 addition & 0 deletions app/locales/hi.json
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@
"restoreDefaults": "डिफॉल्ट्स का पुनःस्थापन",
"language": "भाषा का चयन करें:",
"monitorDnd": "डू नॉट डिस्टर्ब मोड में भी ब्रेक दिखाएं",
"monitorFullscreenApp": "जब कोई अन्य ऐप पूर्णस्क्रीन में हो तो विरामों को रोकें",
"monitorIdleTime": "मॉनिटर सिस्टम निष्क्रिय समय (यदि सिस्टम निष्क्रिय है तो ब्रेक रोक दिए जाते हैं)।",
"allScreens": "सभी मॉनिटर पर ब्रेक दिखाए",
"showIdeas": "ब्रेक के दौरान व्यायाम युक्तियाँ बताए",
Expand Down
1 change: 1 addition & 0 deletions app/locales/hu.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
"allScreens": "Szünetek megjelenítése az összes monitoron",
"monitorIdleTime": "Távollét figyelése (szünetek felfüggesztve, amíg a rendszer tétlen).",
"monitorDnd": "Szünetek megjelenítése Ne Zavarjanak Módban is",
"monitorFullscreenApp": "Szünetek szüneteltetése, ha egy másik alkalmazás teljes képernyős módban van",
"language": "Nyelv kiválasztása:",
"restoreDefaults": "Alapértelmezések visszaállítása"
},
Expand Down
1 change: 1 addition & 0 deletions app/locales/id.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
"restoreDefaults": "Kembali ke pengaturan bawaan",
"language": "Pilih bahasa:",
"monitorDnd": "Tampilkan istirahat walau di mode Jangan Ganggu",
"monitorFullscreenApp": "Jeda istirahat saat aplikasi lain dalam mode layar penuh",
"monitorIdleTime": "Pantau waktu menganggur sistem (istirahat ditunda jika sistem dalam keadaan menganggur).",
"allScreens": "Tampilkan istirahat di semua monitor",
"showIdeas": "Tampilkan tips latihan selagi istirahat",
Expand Down
1 change: 1 addition & 0 deletions app/locales/it.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
"allScreens": "Mostra la pausa su tutti i monitor",
"monitorIdleTime": "Monitoraggio del tempo di inattività del sistema (le pause vengono interrotte se il sistema è inattivo).",
"monitorDnd": "Mostra le pause anche in modalità Non disturbare",
"monitorFullscreenApp": "Sospendi le pause quando un'altra app è a schermo intero",
"language": "Scegli lingua:",
"restoreDefaults": "Ripristina impostazioni"
},
Expand Down
1 change: 1 addition & 0 deletions app/locales/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
"showIdeas": "休憩中のエクササイズのヒントを表示する",
"allScreens": "全てのモニターに休憩画面を表示する",
"monitorDnd": "Do Not Disturbモードでも休憩画面を表示する",
"monitorFullscreenApp": "他のアプリがフルスクリーン中は休憩を一時停止する",
"language": "言語選択:",
"restoreDefaults": "デフォルト設定に戻す"
},
Expand Down
1 change: 1 addition & 0 deletions app/locales/ko.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
"allScreens": "모든 모니터에 휴식 표시",
"monitorIdleTime": "시스템 유휴 시간 모니터링 (시스템이 유휴 상태일 경우 휴식 일시 중지).",
"monitorDnd": "방해금지 모드에서도 휴식 표시",
"monitorFullscreenApp": "다른 앱이 전체 화면일 때 휴식을 일시 중지",
"language": "언어 선택:",
"restoreDefaults": "기본값 복원"
},
Expand Down
1 change: 1 addition & 0 deletions app/locales/lt.json
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@
"restoreDefaults": "Atkurti numatytąsias reikšmes",
"language": "Pasirinkite kalbą:",
"monitorDnd": "Rodyti pertraukėles „netrukdymo“ veiksenoje",
"monitorFullscreenApp": "Pristabdyti pertraukėles, kai kita programa veikia visu ekranu",
"allScreens": "Rodyti pertraukėles per visus ekranus",
"showIdeas": "Rodyti pratimus pertraukų metu",
"fullscreen": "Pilnu ekranu",
Expand Down
1 change: 1 addition & 0 deletions app/locales/lv.json
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,7 @@
"restoreDefaults": "Atgriezt noklusējuma iestādījumus",
"language": "Izvēlēties valodu:",
"monitorDnd": "Rādīt pārtraukumus arī \"Do Not Disturb\" režīmā",
"monitorFullscreenApp": "Apturēt pārtraukumus, kad cita lietotne ir pilnekrāna režīmā",
"monitorIdleTime": "Iepauzēt pārtraukumus, kamēr dators netiek lietots.",
"allScreens": "Rādīt pārtraukumus uz visiem ekrāniem",
"showIdeas": "Rādīt vingrošanas ieteikumus pārtraukumos",
Expand Down
1 change: 1 addition & 0 deletions app/locales/mk.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
"restoreDefaults": "Врати ги стандардните вредности",
"language": "Избери јазик:",
"monitorDnd": "Прикажи ги паузите и во режимот „Не вознемирувај“",
"monitorFullscreenApp": "Паузирај ги паузите кога друга апликација е во режимот цел екран",
"monitorIdleTime": "Следете го времето на мирување на системот (паузите се паузираат ако системот е во мирување).",
"allScreens": "Прикажи ги паузите на сите монитори",
"showIdeas": "Прикажи совети за вежби за време на паузите",
Expand Down
1 change: 1 addition & 0 deletions app/locales/nb-NO.json
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@
"restoreDefaults": "Tilbakestill forvalg",
"language": "Velg spåk:",
"monitorDnd": "Viser pauser selv i \"Ikke forstyrr\"-modus",
"monitorFullscreenApp": "Sett pauser på pause når en annen app er i fullskjerm",
"monitorIdleTime": "Følg med på når maskinen ikke er i bruk (utsetter pauser hvis maskinen ikke brukes).",
"allScreens": "Vis pauser på alle skjermer",
"showIdeas": "Vis treningstips i pausene",
Expand Down
Loading