A very simple Gio iPhone connection monitor in Python 3. I wrote a crappier version of this awhile ago and revamped it. Hope it’s helpful to someone.
#!/usr/bin/env python3
'''
Simple iPhone connection monitor for Linux.
Requires Gtk (GLib, Gio) along with the Python 3 bindings.
Author: C. Nichols <mohawke@gmail.com>
'''
from gi.repository import Gio, GLib
import os
def notify(appname, message):
'''Gnome notification.'''
cmd = 'zenity --name="{0}" --notification --text="{1}" "$THREAT\n$STRING"'.format(appname, message)
os.system(cmd)
def on_iphone_added(monitor, volume):
'''List iPhone Document contents when connected.'''
#notify("Simple iPhone Monitor", "{0} connected.".format(volume.get_name()))
print("{0} connected.".format(volume.get_name()))
gvfs_path = "/run/user/1000/gvfs/afc:host={0},port=3/".format(volume.get_uuid())
not_ready = True
while not_ready:
if os.path.exists(gvfs_path):
for doc_contents in os.listdir(gvfs_path):
print(doc_contents)
not_ready = False
def on_iphone_removed(monitor, volume):
'''Display disconnected message.'''
#notify("Simple iPhone Monitor", "iPhone disconnected.")
print("disconnected")
def monitor():
'''Uses GTK Gio to access Gnome virtual filesystem and determine the
path to iPhone Documents. Return a path we can use to push files
over.'''
connection_loop = GLib.MainLoop()
monitor_iphone = Gio.VolumeMonitor.get()
monitor_iphone.connect("volume-added", on_iphone_added)
monitor_iphone.connect("volume-removed", on_iphone_removed)
for volume in monitor_iphone.get_volumes():
try:
activation_root = volume.get_activation_root()
if activation_root:
if activation_root.get_uri_scheme() == 'afc':
break
except:
pass # Something went wrong.
connection_loop.run()
# Main :: Start monitoring
def main():
monitor()
main() # Run program.