Set pidgin profile image when changing image.
This commit is contained in:
parent
fee93888d2
commit
f83fddf631
|
@ -20,6 +20,7 @@ import os
|
||||||
import pexpect
|
import pexpect
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import dbus
|
||||||
|
|
||||||
from gi.repository import Gtk, Gdk, GdkPixbuf # pylint: disable=E0611
|
from gi.repository import Gtk, Gdk, GdkPixbuf # pylint: disable=E0611
|
||||||
import logging
|
import logging
|
||||||
|
@ -39,6 +40,11 @@ def which(command):
|
||||||
return subprocess.Popen(['which', command], \
|
return subprocess.Popen(['which', command], \
|
||||||
stdout=subprocess.PIPE).stdout.read().strip()
|
stdout=subprocess.PIPE).stdout.read().strip()
|
||||||
|
|
||||||
|
def has_running_process(name):
|
||||||
|
command = 'ps -ef | grep " %s" | grep -v "grep" | wc -l' % name
|
||||||
|
n = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True).stdout.read().strip()
|
||||||
|
return int(n) > 0
|
||||||
|
|
||||||
def detach_cb(menu, widget):
|
def detach_cb(menu, widget):
|
||||||
'''Detach a widget from its attached widget.'''
|
'''Detach a widget from its attached widget.'''
|
||||||
menu.detach()
|
menu.detach()
|
||||||
|
@ -190,9 +196,55 @@ class MugshotWindow(Window):
|
||||||
|
|
||||||
# Copy the new file to ~/.face
|
# Copy the new file to ~/.face
|
||||||
shutil.copyfile(self.updated_image, face)
|
shutil.copyfile(self.updated_image, face)
|
||||||
|
self.set_pidgin_buddyicon(face)
|
||||||
self.updated_image = None
|
self.updated_image = None
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def set_pidgin_buddyicon(self, filename=None):
|
||||||
|
"""Sets the pidgin buddyicon to filename (usually ~/.face).
|
||||||
|
|
||||||
|
If pidgin is running, use the dbus interface, otherwise directly modify
|
||||||
|
the XML file."""
|
||||||
|
prefs_file = os.path.expanduser('~/.purple/prefs.xml')
|
||||||
|
if not os.path.exists(prefs_file):
|
||||||
|
return
|
||||||
|
if has_running_process('pidgin'):
|
||||||
|
self.set_pidgin_buddyicon_dbus(filename)
|
||||||
|
else:
|
||||||
|
self.set_pidgin_buddyicon_xml(filename)
|
||||||
|
|
||||||
|
def set_pidgin_buddyicon_dbus(self, filename=None):
|
||||||
|
"""Set the pidgin buddy icon via dbus."""
|
||||||
|
bus = dbus.SessionBus()
|
||||||
|
obj = bus.get_object("im.pidgin.purple.PurpleService",
|
||||||
|
"/im/pidgin/purple/PurpleObject")
|
||||||
|
purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")
|
||||||
|
# To make the change instantly visible, set the icon to none first.
|
||||||
|
purple.PurplePrefsSetPath('/pidgin/accounts/buddyicon', '')
|
||||||
|
if filename:
|
||||||
|
purple.PurplePrefsSetPath('/pidgin/accounts/buddyicon', filename)
|
||||||
|
|
||||||
|
def set_pidgin_buddyicon_xml(self, filename=None):
|
||||||
|
"""Set the buddyicon used by pidgin to filename (via the xml file)."""
|
||||||
|
# This is hacky, but a working implementation for now...
|
||||||
|
prefs_file = os.path.expanduser('~/.purple/prefs.xml')
|
||||||
|
tmp_buffer = []
|
||||||
|
if os.path.isfile(prefs_file):
|
||||||
|
for line in open(prefs_file):
|
||||||
|
if '<pref name=\'buddyicon\'' in line:
|
||||||
|
new = line.split('value=')[0]
|
||||||
|
if filename:
|
||||||
|
new = new + 'value=\'%s\'/>\n' % filename
|
||||||
|
else:
|
||||||
|
new = new + 'value=\'\'/>\n'
|
||||||
|
tmp_buffer.append(new)
|
||||||
|
else:
|
||||||
|
tmp_buffer.append(line)
|
||||||
|
write_prefs = open(prefs_file, 'w')
|
||||||
|
for line in tmp_buffer:
|
||||||
|
write_prefs.write(line)
|
||||||
|
write_prefs.close()
|
||||||
|
|
||||||
# = chfn functions ============================================ #
|
# = chfn functions ============================================ #
|
||||||
def get_chfn_details_updated(self):
|
def get_chfn_details_updated(self):
|
||||||
"""Return True if chfn-related details have been modified."""
|
"""Return True if chfn-related details have been modified."""
|
||||||
|
|
Loading…
Reference in New Issue