|
|
|
#!/usr/bin/env python3
|
|
|
|
# Sleep Timer for Audio Books, inspired by some of the nice Android audiobook players
|
|
|
|
# (c) 2015 by Taeyeon Mori
|
|
|
|
|
|
|
|
|
|
|
|
from PyQt5 import QtCore, QtGui, QtWidgets, QtMultimedia
|
|
|
|
|
|
|
|
import sys
|
|
|
|
import subprocess
|
|
|
|
|
|
|
|
|
|
|
|
cmd = ["playerctl", "pause"]
|
|
|
|
beep = "/usr/share/sounds/freedesktop/stereo/bell.oga"
|
|
|
|
|
|
|
|
|
|
|
|
def run_task():
|
|
|
|
print("Rnunning ", cmd)
|
|
|
|
subprocess.Popen(cmd)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def main(app):
|
|
|
|
icon = QtGui.QIcon.fromTheme("caffeine", QtGui.QIcon.fromTheme("kalarm"))
|
|
|
|
tray = QtWidgets.QSystemTrayIcon(icon)
|
|
|
|
|
|
|
|
def wakeup():
|
|
|
|
print("Checking Human")
|
|
|
|
dialog = QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, "Wake up", "Click OK or press return to reset timer")
|
|
|
|
dialog.addButton(QtWidgets.QMessageBox.Ok)
|
|
|
|
dialog.addButton(QtWidgets.QMessageBox.Close)
|
|
|
|
timeout = QtCore.QTimer()
|
|
|
|
timeout.setInterval(60000)
|
|
|
|
timeout.setSingleShot(True)
|
|
|
|
timeout.timeout.connect(dialog.reject)
|
|
|
|
|
|
|
|
QtMultimedia.QSound.play(beep)
|
|
|
|
|
|
|
|
timeout.start()
|
|
|
|
if dialog.exec() != QtWidgets.QMessageBox.Ok:
|
|
|
|
timeout.stop()
|
|
|
|
run_task()
|
|
|
|
app.quit()
|
|
|
|
else:
|
|
|
|
timer.start()
|
|
|
|
|
|
|
|
timer = QtCore.QTimer()
|
|
|
|
timer.setInterval(600000)
|
|
|
|
timer.setSingleShot(True)
|
|
|
|
timer.timeout.connect(wakeup)
|
|
|
|
|
|
|
|
menu = QtWidgets.QMenu()
|
|
|
|
areset = menu.addAction("Reset")
|
|
|
|
areset.triggered.connect(lambda x: (timer.stop(), timer.start()))
|
|
|
|
aquit = menu.addAction("Quit")
|
|
|
|
aquit.triggered.connect(app.quit)
|
|
|
|
tray.setContextMenu(menu)
|
|
|
|
|
|
|
|
tray.show()
|
|
|
|
timer.start()
|
|
|
|
return app.exec()
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
app = QtWidgets.QApplication(sys.argv)
|
|
|
|
sys.exit(main(app))
|
|
|
|
|