summaryrefslogtreecommitdiff
path: root/.i3/scripts/offlineimap-daemon.py
diff options
context:
space:
mode:
authorVito Graffagnino <vito@graffagnino.xyz>2020-09-08 18:10:49 +0100
committerVito Graffagnino <vito@graffagnino.xyz>2020-09-08 18:10:49 +0100
commit3b0142cedcde39e4c2097ecd916a870a3ced5ec6 (patch)
tree2116c49a845dfc0945778f2aa3e2118d72be428b /.i3/scripts/offlineimap-daemon.py
parent8cc927e930d5b6aafe3e9862a61e81705479a1b4 (diff)
Added the relevent parts of the .config directory. Alss add ssh config
Diffstat (limited to '.i3/scripts/offlineimap-daemon.py')
-rwxr-xr-x.i3/scripts/offlineimap-daemon.py93
1 files changed, 93 insertions, 0 deletions
diff --git a/.i3/scripts/offlineimap-daemon.py b/.i3/scripts/offlineimap-daemon.py
new file mode 100755
index 0000000..fea76fc
--- /dev/null
+++ b/.i3/scripts/offlineimap-daemon.py
@@ -0,0 +1,93 @@
+#!/usr/bin/env python3
+
+import subprocess
+import signal
+import threading
+import sys
+
+import dbus
+from dbus.mainloop.glib import DBusGMainLoop
+from gi.repository import GLib
+
+
+class OfflineimapCtl(object):
+ def __init__(self):
+ self.daemon_proc = None
+ self.run_ev = threading.Event()
+ self.run_daemon = False
+
+ def run(self):
+ t = threading.Thread(target=self._watch_daemon, daemon=True)
+ t.start()
+
+ def _watch_daemon(self):
+ while True:
+ self.run_ev.wait()
+ self.run_ev.clear()
+ if self.run_daemon:
+ self.is_running = True
+ print('offlineimap is being started')
+ self._spawn_daemon()
+ print('offlineimap has stopped')
+ self.run_ev.set() # check state and restart if needed
+
+ def _spawn_daemon(self):
+ self.daemon_proc = subprocess.Popen(['offlineimap', '-u', 'basic'], shell=False)
+ self.daemon_proc.wait()
+ self.daemon_proc = None
+
+ def start(self):
+ print('starting offlineimap')
+ self.run_daemon = True
+ self.run_ev.set()
+
+ def stop(self):
+ print('stopping offlineimap')
+ self.run_daemon = False
+ if self.daemon_proc:
+ try:
+ self.daemon_proc.send_signal(signal.SIGUSR2)
+ except OSError:
+ print('Unable to stop offlineimap')
+
+ def restart(self):
+ print('restarting offlineimap')
+ if self.run_daemon:
+ self.stop()
+ self.start()
+
+ def onConnectivityChanged(self, state):
+ # 70 means fully connected
+ if state == 70:
+ self.start()
+ else:
+ self.stop()
+
+def main():
+ oi_ctl = OfflineimapCtl()
+ oi_ctl.run()
+
+ try:
+ bus = dbus.SystemBus(mainloop=DBusGMainLoop())
+ network_manager = bus.get_object(
+ 'org.freedesktop.NetworkManager',
+ '/org/freedesktop/NetworkManager')
+ network = dbus.Interface(network_manager,
+ dbus_interface='org.freedesktop.NetworkManager')
+
+ network.connect_to_signal('StateChanged', oi_ctl.onConnectivityChanged)
+
+ # send current state as first event
+ state = network.state()
+ oi_ctl.onConnectivityChanged(state)
+
+ except dbus.exceptions.DBusException:
+ print('Unable to connect to dbus')
+ sys.exit(3)
+
+ # start receiving events from dbus
+ loop = GLib.MainLoop()
+ loop.run()
+
+if __name__ == '__main__':
+ main()