Public feed #598072

Something

public python v1 · immutable
Raw Edit
·published 2007-07-01 01:04 UTC
rendered paste body
#!/usr/bin/env pythonimport osimport sysimport timeimport dlimport threadingimport gtkimport gobjectimport dbusimport dbus.serviceimport dbus.glibimport pynotifyimport gnomevfsimport webbrowserimport libdieu.settingsimport libdieu.databaseimport libdieu.bookmarkimport libdieu.inetfrom xml.sax.saxutils import unescapefrom optparse import OptionParserpynotify.init('Dieu')class DieuListen(dbus.service.Object):	def __init__(self, bus_name):		dbus.service.Object.__init__(self, bus_name, '/org/gnome/Dieu')		@dbus.service.method('org.gnome.Dieu')	def AddBookmark(self, Title, URL, Extended, Tags):		Title = unescape(Title, {"&apos;": "'", "&quot;": '"'})		Extended = unescape(Extended, {"&apos;": "'", "&quot;": '"'})		window = DieuAddPost(Title, URL, Extended, Tags)class DieuTrayIcon:	def __init__(self):		self.trayicon = gtk.status_icon_new_from_icon_name('web-browser')		self.trayicon.set_tooltip('dieu Bookmarks')		self.trayicon.connect('activate', lambda w: DieuAddPost())		self.trayicon.connect('popup-menu', self.on_right_click)		for user in libdieu.settings.get_users():			globals()['self.database_'+user] = libdieu.database.DieuDatabase(user.rsplit(':')[0], user.rsplit(':')[1])		def on_right_click(self, status_icon, button, activate_time):		self.right_click_menu = gtk.Menu()				def test_shit(object):			print 1				self.add_post_menuitem = gtk.ImageMenuItem('Add post')		#self.right_click_menu.connect('deactivate', lambda w: free_memory(self))		self.add_post_menuitem_image = gtk.Image()		self.add_post_menuitem_image.set_from_icon_name('add', gtk.ICON_SIZE_MENU)		self.add_post_menuitem.set_image(self.add_post_menuitem_image)		self.add_post_menuitem.connect('activate', lambda w: DieuAddPost())		self.add_post_menuitem.show()		self.right_click_menu.append(self.add_post_menuitem)				for user in libdieu.settings.get_users():			globals()['self.username_submenu_'+user] = gtk.ImageMenuItem(user.rsplit(':')[0])			if user.rsplit(':')[1] == 'del.icio.us':				globals()['self.username_submenu_image_'+user] = gtk.Image()				globals()['self.username_submenu_image_'+user].set_from_file('/usr/share/dieu/pixmaps/delicious.ico')				globals()['self.username_submenu_'+user].set_image(globals()['self.username_submenu_image_'+user])			elif user.rsplit(':')[1] == 'ma.gnolia':				globals()['self.username_submenu_image_'+user] = gtk.Image()				globals()['self.username_submenu_image_'+user].set_from_file('/usr/share/dieu/pixmaps/magnolia.ico')				globals()['self.username_submenu_'+user].set_image(globals()['self.username_submenu_image_'+user])			globals()['self.username_submenu_'+user+'_tags_menu'] = gtk.Menu()			globals()['self.username_submenu_'+user].set_submenu(globals()['self.username_submenu_'+user+'_tags_menu'])			for tag in globals()['self.database_'+user].get_all_tags('Alphabetical'):				globals()['self.user_submenu_'+user+'_tags_menu_tag_'+tag[1]] = gtk.ImageMenuItem(tag[1])				globals()['self.user_submenu_'+user+'_tags_menu_tag_'+tag[1]+'_menu'] = gtk.Menu()				globals()['self.user_submenu_'+user+'_tags_menu_tag_'+tag[1]].set_submenu(globals()['self.user_submenu_'+user+'_tags_menu_tag_'+tag[1]+'_menu'])				globals()['self.user_submenu_'+user+'_tags_menu_tag_'+tag[1]].show()				globals()['self.username_submenu_'+user+'_tags_menu'].append(globals()['self.user_submenu_'+user+'_tags_menu_tag_'+tag[1]])			for post in globals()['self.database_'+user].get_all_posts('Default'):				for tag in post[3].rsplit(' '):					globals()['self.menuitem_'+str(post[0])+post[2]] = gtk.ImageMenuItem(post[1])					globals()['self.menuitem_'+str(post[0])+post[2]].connect('activate', lambda w: printee(post[2]))					globals()['self.menuitem_'+str(post[0])+post[2]].show()					globals()['self.user_submenu_'+user+'_tags_menu_tag_'+tag+'_menu'].append(globals()['self.menuitem_'+str(post[0])+post[2]])						def printee(arg):				print arg									globals()['self.username_submenu_'+user].show()			self.right_click_menu.append(globals()['self.username_submenu_'+user])				separator = gtk.SeparatorMenuItem()		separator.show()		self.right_click_menu.append(separator)				fucklistusers = []				for user in libdieu.settings.get_users():			globals()['item'+user] = gtk.ImageMenuItem(user)			fucklistusers.append(globals()['item'+user])				print fucklistusers				self.separator = gtk.SeparatorMenuItem()		self.separator.show()		self.right_click_menu.append(self.separator)				self.preferences_item = gtk.ImageMenuItem('Preferences')		self.preferences_item_image = gtk.Image()		self.preferences_item_image.set_from_stock(gtk.STOCK_PREFERENCES, gtk.ICON_SIZE_MENU)		self.preferences_item.set_image(self.preferences_item_image)		self.preferences_item.connect('activate', lambda w: DieuPreferencesWindow())		self.preferences_item.show()		self.right_click_menu.append(self.preferences_item)				self.about_item = gtk.ImageMenuItem('About')		self.about_item_image = gtk.Image()		self.about_item_image.set_from_stock(gtk.STOCK_ABOUT, gtk.ICON_SIZE_MENU)		self.about_item.set_image(self.about_item_image)		self.about_item.connect('activate', lambda w: DieuAboutDialog())		self.about_item.show()		self.right_click_menu.append(self.about_item)				self.right_click_menu.popup(None, None, gtk.status_icon_position_menu, button, activate_time, status_icon)			class DieuAddPost:	def __init__(self, Title='', URL='', Extra='', Tags=''):		self.post_window = gtk.Window()		self.post_window.set_title('Add bookmark')		self.post_window.set_icon_from_file('/usr/share/dieu/pixmaps/bookmark-web.png')		self.post_window.set_position(gtk.WIN_POS_CENTER)		self.post_window.connect("delete_event", lambda w,e: self.post_window.destroy())		self.post_window.set_border_width(12)		self.post_window.set_resizable(False)		self.post_window.set_keep_above(True)				self.post_window_vbox = gtk.VBox(False, 0)		self.post_window.add(self.post_window_vbox)				self.post_window_uppertable = gtk.Table(2, 8)		self.post_window_uppertable.set_row_spacings(6)		self.post_window_vbox.pack_start(self.post_window_uppertable)				self.post_window_labels_url = gtk.Label('URL:')		self.post_window_labels_url.set_alignment(1.0, 0.5)		self.post_window_uppertable.attach(self.post_window_labels_url, 0, 1, 0, 1, gtk.FILL, xpadding=6)		self.post_window_entries_url = gtk.Entry()		self.post_window_uppertable.attach(self.post_window_entries_url, 1, 2, 0, 1)				self.post_window_labels_desc = gtk.Label('Description:')		self.post_window_labels_desc.set_alignment(1.0, 0.5)		self.post_window_uppertable.attach(self.post_window_labels_desc, 0, 1, 1, 2, gtk.FILL, xpadding=6)		self.post_window_entries_desc = gtk.Entry()		self.post_window_entries_desc.connect("changed", lambda w: self.post_window.set_title('Add "'+self.post_window_entries_desc.get_text()+'"'))		self.post_window_uppertable.attach(self.post_window_entries_desc, 1, 2, 1, 2)				self.post_window_labels_notes = gtk.Label('Notes:')		self.post_window_labels_notes.set_alignment(1.0, 0.5)		self.post_window_uppertable.attach(self.post_window_labels_notes, 0, 1, 2, 3, gtk.FILL, xpadding=6)		self.post_window_labels_notesremaining = gtk.Label('255 chars. left')		self.post_window_uppertable.attach(self.post_window_labels_notesremaining, 0, 1, 3, 4, gtk.FILL, xpadding =6)		self.post_window_labels_notesremaining.set_alignment(1.0, 0.5)		self.post_window_labels_notesremaining.set_sensitive(False)		self.post_window_scrolledwindow = gtk.ScrolledWindow()		self.post_window_scrolledwindow.set_shadow_type(gtk.SHADOW_IN)		self.post_window_scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS)		self.post_window_entries_notes_textbuffer = gtk.TextBuffer()		self.post_window_entries_notes = gtk.TextView(self.post_window_entries_notes_textbuffer)		self.post_window_entries_notes.set_wrap_mode(gtk.WRAP_WORD)		self.post_window_scrolledwindow.add(self.post_window_entries_notes)		self.post_window_uppertable.attach(self.post_window_scrolledwindow, 1, 2, 2, 4)				self.post_window_entries_notes_textbuffer.connect('changed', lambda w: self.post_window_labels_notesremaining.set_text(str(255 - self.post_window_entries_notes_textbuffer.get_char_count()) + ' chars. left'))				self.post_window_labels_tags = gtk.Label('Tags:')		self.post_window_labels_tags.set_alignment(1.0, 0.5)		self.post_window_uppertable.attach(self.post_window_labels_tags, 0, 1, 4, 5, gtk.FILL, xpadding=6)		self.post_window_entries_tags = gtk.Entry()		self.post_window_uppertable.attach(self.post_window_entries_tags, 1, 2, 4, 5)				self.post_window_entries_tags_completion = gtk.EntryCompletion()		globals()['self.liststore_'+user] = gtk.ListStore(str)		for tag in globals()['self.database_'+user].get_all_tags('Default'):			globals()['self.liststore_'+user].append([tag[1]])		self.post_window_entries_tags_completion.set_match_func(self.match_func, None)		self.post_window_entries_tags_completion.set_model(globals()['self.liststore_'+user])		self.post_window_entries_tags.connect('activate', self.on_completion_match)		self.post_window_entries_tags.set_completion(self.post_window_entries_tags_completion)				self.post_window_entries_url.set_text(URL)		self.post_window_entries_desc.set_text(Title)		self.post_window_entries_notes_textbuffer.set_text(Extra)		self.post_window_entries_tags.set_text(Tags)				self.post_window_labels_accounts = gtk.Label('Accounts:')		self.post_window_labels_accounts.set_alignment(1.0, 0.5)		self.post_window_uppertable.attach(self.post_window_labels_accounts, 0, 1, 5, 6, gtk.FILL, xpadding=6)		self.post_window_combobox_accounts_liststore = gtk.ListStore(gobject.TYPE_STRING)		self.post_window_combobox_accounts = gtk.ComboBox(self.post_window_combobox_accounts_liststore)		self.post_window_combobox_accounts_cell = gtk.CellRendererText()		self.post_window_combobox_accounts.pack_start(self.post_window_combobox_accounts_cell, True)		self.post_window_combobox_accounts.add_attribute(self.post_window_combobox_accounts_cell, 'text', 0)		self.post_window_uppertable.attach(self.post_window_combobox_accounts, 1, 2, 5, 6)		self.post_window_combobox_accounts.append_text(libdieu.settings.get_default_user())		self.post_window_combobox_accounts.set_active(0)				for account in libdieu.settings.get_users():			if account != libdieu.settings.get_default_user():				self.post_window_combobox_accounts.append_text(account)				self.post_window_checkbox_private = gtk.CheckButton(label="Make post private?", use_underline=False)		self.post_window_uppertable.attach(self.post_window_checkbox_private, 1, 2, 6, 7)				self.post_window_buttonhbox = gtk.HButtonBox()		self.post_window_buttonhbox.set_layout(gtk.BUTTONBOX_DEFAULT_STYLE)		self.post_window_buttonhbox.set_spacing(6)		self.post_window_vbox.add(self.post_window_buttonhbox)				self.post_window_buttons_help = gtk.Button(stock=gtk.STOCK_CANCEL)		self.post_window_buttons_help_alignment = self.post_window_buttons_help.get_children()[0]		self.post_window_buttons_help_hbox = self.post_window_buttons_help_alignment.get_children()[0]		self.post_window_buttons_help_image, self.post_window_buttons_help_label = self.post_window_buttons_help_hbox.get_children()		self.post_window_buttons_help_image.set_from_icon_name('help', gtk.ICON_SIZE_BUTTON)		self.post_window_buttons_help_label.set_text('Help')		self.post_window_buttonhbox.add(self.post_window_buttons_help)				self.post_window_buttons_reset = gtk.Button(stock=gtk.STOCK_CANCEL)		self.post_window_buttons_reset_alignment = self.post_window_buttons_reset.get_children()[0]		self.post_window_buttons_reset_hbox = self.post_window_buttons_reset_alignment.get_children()[0]		self.post_window_buttons_reset_image, self.post_window_buttons_reset_label = self.post_window_buttons_reset_hbox.get_children()		self.post_window_buttons_reset_image.set_from_icon_name('edit-clear', gtk.ICON_SIZE_BUTTON)		self.post_window_buttons_reset_label.set_text('Reset')		self.post_window_buttonhbox.add(self.post_window_buttons_reset)				self.post_window_buttons_cancel = gtk.Button(stock=gtk.STOCK_CANCEL)		self.post_window_buttons_cancel.connect('clicked', lambda w: self.post_window.destroy())		self.post_window_buttonhbox.add(self.post_window_buttons_cancel)				self.post_window_buttons_post = gtk.Button(stock=gtk.STOCK_ADD)		self.post_window_buttons_post_alignment = self.post_window_buttons_post.get_children()[0]		self.post_window_buttons_post_hbox = self.post_window_buttons_post_alignment.get_children()[0]		self.post_window_buttons_post_image, self.post_window_buttons_post_label = self.post_window_buttons_post_hbox.get_children()		self.post_window_buttons_post_label.set_text('Post')		self.post_window_buttons_post.connect('clicked', self.add_post)		self.post_window_buttonhbox.add(self.post_window_buttons_post)				self.post_window_progressbars_post = gtk.ProgressBar()		self.post_window_vbox.pack_start(self.post_window_progressbars_post)				self.post_window_checkbox_private.show()		self.post_window_buttons_post.show()		self.post_window_buttons_cancel.show()		self.post_window_buttons_reset.show()		self.post_window_buttons_help.show()		self.post_window_buttonhbox.show()		self.post_window_combobox_accounts.show()		self.post_window_labels_accounts.show()		self.post_window_entries_tags.show()		self.post_window_labels_tags.show()			self.post_window_entries_notes.show()		self.post_window_scrolledwindow.show()		self.post_window_labels_notesremaining.show()		self.post_window_labels_notes.show()				self.post_window_entries_desc.show()		self.post_window_labels_desc.show()		self.post_window_entries_url.show()		self.post_window_labels_url.show()		self.post_window_uppertable.show()		self.post_window_vbox.show()		self.post_window.show()			def match_func(self, post_window_entries_tags_completion, key_string, iter, data, nil):		model = self.post_window_entries_tags_completion.get_model()		modelstr = model[iter][0]		if ' ' in key_string:			last_word = key_string.split()[-1]			return modelstr.startswith(last_word)		return modelstr.startswith(key_string)			def on_completion_match(self, post_window_entries_tags_completion, model, iter):		current_text = self.post_window_entries_tags.get_text()		if ' ' in current_text:			current_text = ' '.join(current_text.split()[:-1])		current_text = '%s %s' % (current_text, model[iter][0])				self.set_text(current_text)		self.set_position(-1)				return True				#def activate_cb(self, entry):	#	text = self.post_window_entries_tags.get_text()	#	if text:	#		if text not in [row[0] for row in globals()['self.liststore_'+user]]:	#			globals()['self.liststore_'+user].append([text])	#	return		def match_func(post_window_entries_tags_completion, entry_contents, iter, data):		model = self.post_window_entries_tags_completion.get_model()		text = model.get_value(globals()['self.liststore_'+user], data)		if text.startwith(self.post_window_entries_tags_completion.get_text):			return True		return False		def threaded(f):		def wrapper(*args):			t = threading.Thread(target=f, args=args)			t.start()		return wrapper		@threaded	def add_post(self, elf):		gtk.gdk.threads_enter()		self.post_window_uppertable.set_sensitive(False)		self.post_window_buttonhbox.set_sensitive(False)		self.post_window.destroy()		gtk.gdk.threads_leave()				self.selected_user = self.post_window_combobox_accounts.get_active_text()				self.user_name = self.selected_user.rsplit(':')[0]		self.user_system = self.selected_user.rsplit(':')[1]		self.user_password = libdieu.settings.get_password(self.user_name, self.user_system)				self.web_bookmarks = libdieu.bookmark.DieuWebBookmarks(self.user_name, self.user_password, self.user_system)				if self.post_window_checkbox_private.get_active() == True:			shared = 'no'		else:			shared = 'yes'		self.add_post_posts_database = libdieu.database.DieuDatabase(self.user_name, self.user_system)		self.post_urls = []		for post in self.add_post_posts_database.get_all_posts('Default'):			self.post_urls.append(post[2])				if self.post_window_entries_url.get_text() in self.post_urls:			gtk.gdk.threads_enter()			self.already_used_error_window = gtk.Window()			self.already_used_error_window.set_border_width(12)			self.already_used_error_window_table = gtk.Table(2, 1)			self.already_used_error_window.add(self.already_used_error_window_table)			self.already_used_error_window_image = gtk.Image()			self.already_used_error_window_image.set_from_icon_name('web-browser', gtk.ICON_SIZE_DIALOG)			self.already_used_error_window_table.attach(self.already_used_error_window_image, 0, 1, 0, 1)						self.already_used_error_window_image.show()			self.already_used_error_window_table.show()			self.already_used_error_window.show()			gtk.gdk.threads_leave()						self.negative_notification = pynotify.Notification('Bookmark already posted', '"<b>' + self.post_window_entries_desc.get_text() + '</b>"' + 'has already been posted, and was not bookmarked.', 'web-browser')			self.negative_notification.set_urgency(pynotify.URGENCY_CRITICAL)			self.negative_notification.set_timeout(pynotify.EXPIRES_NEVER)			self.negative_notification.add_action('ignore', 'Post anyway', self.ignore_action)			self.negative_notification.add_action('cancel', 'Cancel', self.cancel_action)			self.negative_notification.show()								else:			self.web_bookmarks.add_post(self.post_window_entries_desc.get_text(), self.post_window_entries_notes_textbuffer.get_text(self.post_window_entries_notes_textbuffer.get_start_iter(), self.post_window_entries_notes_textbuffer.get_end_iter()), self.post_window_entries_tags.get_text(), self.post_window_entries_url.get_text(), shared)						self.positive_notification = pynotify.Notification('Bookmark posted', '"<b>' + self.post_window_entries_desc.get_text() + '</b>"' + ' bookmarked.', 'web-browser')			self.positive_notification.set_urgency(pynotify.URGENCY_LOW)			self.positive_notification.show()				gtk.gdk.threads_enter()		self.post_window.destroy()		gtk.gdk.threads_leave()	def ignore_action(notification, action, self):		assert action == 'ignore'		notification.close()				print 'something'				print self				#self.web_bookmarks.add_post(self.post_window_entries_desc.get_text(), self.post_window_entries_notes_textbuffer.get_text(self.post_window_entries_notes_textbuffer.get_start_iter(), self.post_window_entries_notes_textbuffer.get_end_iter()), self.post_window_entries_tags.get_text(), self.post_window_entries_url.get_text(), shared)					self.positive_notification = pynotify.Notification('Bookmark posted', '"<b>' + self.post_window_entries_desc.get_text() + '</b>"' + ' bookmarked.', 'web-browser')		self.positive_notification.set_urgency(pynotify.URGENCY_LOW)		self.positive_notification.show()		def cancel_action(notification, action, self):		assert action == 'cancel'		notification.close()class DieuAboutDialog:	def __init__(self):		self.about_dialog = gtk.AboutDialog()		self.about_dialog.set_name('dieu')		self.about_dialog.set_version('0.5')		self.about_dialog.set_website('http://code.google.com/p/dieu/')		self.about_dialog.set_website_label('http://code.google.com/p/dieu/')#		self.about_dialog.set_license(open(os.curdir + '/LICENSE', 'r').read())		self.license = gnomevfs.Handle('file://' + os.getcwd() + '/LICENSE')		self.license_text = self.license.read(1000)		self.about_dialog.set_license(self.license_text)		self.about_dialog.set_authors(['Ethan Osten', 'Will Farrington'])		self.about_dialog.set_logo_icon_name('web-browser')		self.about_dialog.connect('response', lambda d, r: d.destroy())		self.about_pixbuf = self.about_dialog.render_icon(gtk.STOCK_ABOUT, gtk.ICON_SIZE_MENU)		self.about_dialog.set_icon(self.about_pixbuf)		self.about_dialog.show()class DieuPreferencesWindow:	def __init__(self, Title='dieu Preferences', firststart=False):		self.preferences_window = gtk.Window()		self.preferences_window.set_title(Title)		self.preferences_pixbuf = self.preferences_window.render_icon(gtk.STOCK_PREFERENCES, gtk.ICON_SIZE_MENU)		self.preferences_window.set_icon(self.preferences_pixbuf)		self.preferences_window.set_border_width(12)				self.preferences_vbox = gtk.VBox()		self.preferences_notebook = gtk.Notebook()		self.preferences_vbox.pack_start(self.preferences_notebook)		self.preferences_window.add(self.preferences_vbox)				self.preferences_general_vbox = gtk.VBox(False, 0)		self.preferences_general_label = gtk.Label('General')		self.preferences_general_table = gtk.Table(1, 8)		self.preferences_general_table.set_row_spacings(3)		self.preferences_general_vbox.pack_start(self.preferences_general_table)		self.preferences_general_labels_General = gtk.Label('General')		self.preferences_general_labels_General.set_markup('<b>General</b>')		self.preferences_general_labels_General.set_alignment(0.0, 0.5)		self.preferences_general_table.attach(self.preferences_general_labels_General, 0, 1, 0, 1)		self.preferences_general_checks_Avahi = gtk.CheckButton('Find other users with Avahi')		self.preferences_general_checks_Avahi_alignment = gtk.Alignment()		self.preferences_general_checks_Avahi_alignment.set_padding(0, 0, 6, 6)		self.preferences_general_checks_Avahi_alignment.add(self.preferences_general_checks_Avahi)		self.preferences_general_table.attach(self.preferences_general_checks_Avahi_alignment, 0, 1, 1, 2)		self.preferences_general_checks_Libnotify = gtk.CheckButton('Display notifications on completion')		self.preferences_general_checks_Libnotify_alignment = gtk.Alignment()		self.preferences_general_checks_Libnotify_alignment.set_padding(0, 0, 6, 6)		self.preferences_general_checks_Libnotify_alignment.add(self.preferences_general_checks_Libnotify)		self.preferences_general_table.attach(self.preferences_general_checks_Libnotify_alignment, 0, 1, 2, 3)		self.preferences_general_checks_Gstreamer = gtk.CheckButton('Play annoying sounds')		self.preferences_general_checks_Gstreamer_alignment = gtk.Alignment()		self.preferences_general_checks_Gstreamer_alignment.set_padding(0, 0, 6, 6)		self.preferences_general_checks_Gstreamer_alignment.add(self.preferences_general_checks_Gstreamer)		self.preferences_general_table.attach(self.preferences_general_checks_Gstreamer_alignment, 0, 1, 3, 4)		self.preferences_general_labels_Tray = gtk.Label('Status Icon')		self.preferences_general_labels_Tray.set_markup('<b>Status Icon</b>')		self.preferences_general_labels_Tray.set_alignment(0.0, 0.5)		self.preferences_general_table.attach(self.preferences_general_labels_Tray, 0, 1, 4, 5)		self.preferences_general_checks_Recent = gtk.CheckButton('Show recent posts')		self.preferences_general_checks_Recent_alignment = gtk.Alignment()		self.preferences_general_checks_Recent_alignment.set_padding(0, 0, 6, 6)		self.preferences_general_checks_Recent_alignment.add(self.preferences_general_checks_Recent)		self.preferences_general_table.attach(self.preferences_general_checks_Recent_alignment, 0, 1, 5, 6)		self.preferences_general_checks_Allposts = gtk.CheckButton('Show posts sorted by tag and user')		self.preferences_general_checks_Allposts_alignment = gtk.Alignment()		self.preferences_general_checks_Allposts_alignment.set_padding(0, 0, 6, 6)		self.preferences_general_checks_Allposts_alignment.add(self.preferences_general_checks_Allposts)		self.preferences_general_table.attach(self.preferences_general_checks_Allposts_alignment, 0, 1, 6, 7)		self.preferences_notebook.append_page(self.preferences_general_vbox, tab_label=self.preferences_general_label)				self.preferences_accounts_vbox = gtk.VBox(False, 0)		self.preferences_accounts_label = gtk.Label('Accounts')		self.preferences_notebook.append_page(self.preferences_accounts_vbox, tab_label=self.preferences_accounts_label)		self.preferences_accounts_treeview_model = gtk.TreeStore(gobject.TYPE_PYOBJECT, gobject.TYPE_STRING)		self.preferences_accounts_treeview = gtk.TreeView(self.preferences_accounts_treeview_model)		self.preferences_accounts_treeview_renderer = gtk.CellRendererText()		self.preferences_accounts_treeview_column_username = gtk.TreeViewColumn('Username', self.preferences_accounts_treeview_renderer, text=1)		self.preferences_accounts_treeview.append_column(self.preferences_accounts_treeview_column_username)		self.preferences_accounts_treeview_column_system = gtk.TreeViewColumn('System', self.preferences_accounts_treeview_renderer, text=1)		self.preferences_accounts_treeview.append_column(self.preferences_accounts_treeview_column_system)		self.preferences_accounts_vbox.pack_start(self.preferences_accounts_treeview)				self.preferences_buttonbox = gtk.HButtonBox()		self.preferences_buttonbox.set_layout(gtk.BUTTONBOX_END)		self.preferences_vbox.pack_start(self.preferences_buttonbox)				self.preferences_buttons_close = gtk.Button(stock=gtk.STOCK_CLOSE)		self.preferences_buttons_close.connect('clicked', lambda w: self.preferences_window.destroy())		self.preferences_buttonbox.add(self.preferences_buttons_close)				self.preferences_firststart_dialog = gtk.MessageDialog(parent=None, flags=0, type=gtk.MESSAGE_INFO, buttons=gtk.BUTTONS_NONE, message_format='Welcome to dieu. Before you start posting, you must add at least one account to dieu.')		self.preferences_firststart_dialog.set_title('Welcome to dieu.')		if firststart == True:			self.preferences_firststart_dialog.show()				self.preferences_buttons_close.show()		self.preferences_accounts_treeview.show()		self.preferences_accounts_label.show()		self.preferences_accounts_vbox.show()		self.preferences_general_checks_Allposts_alignment.show()		self.preferences_general_checks_Allposts.show()		self.preferences_general_checks_Recent_alignment.show()		self.preferences_general_checks_Recent.show()		self.preferences_general_labels_Tray.show()		self.preferences_general_checks_Gstreamer_alignment.show()		self.preferences_general_checks_Gstreamer.show()		self.preferences_general_checks_Libnotify_alignment.show()		self.preferences_general_checks_Libnotify.show()		self.preferences_general_checks_Avahi_alignment.show()		self.preferences_general_checks_Avahi.show()		self.preferences_general_labels_General.show()		self.preferences_general_table.show()		self.preferences_general_label.show()		self.preferences_general_vbox.show()		self.preferences_notebook.show()		self.preferences_buttonbox.show()		self.preferences_vbox.show()		self.preferences_window.show()class DieuEditAccount:	def __init__(self):		passif __name__ == '__main__':	try:		libc = dl.open('/lib/libc.so.6')		libc.call('prctl', 15, 'dieu', 0, 0, 0)				parsing = OptionParser()		parsing.add_option("-n", "--title", dest="title", help="Start dialog with the title field set to NAME", metavar="NAME")		parsing.add_option("-u", "--url", dest="posturl", help="Start dialog with the URL field set to POSTURL", metavar="POSTURL")		parsing.add_option("-e", "--extended", dest="description", help="Start dialog with the description field set to DESC", metavar="DESC")		parsing.add_option("-t",  "--tags", dest="tags", help="Start dialog with the tags field set to TAGS", metavar="TAGS")		(options, args) = parsing.parse_args()				session_bus = dbus.SessionBus()		bus_name = dbus.service.BusName('org.gnome.Dieu', bus = session_bus)		listen = DieuListen(bus_name)				user = libdieu.settings.get_default_user()				user_name = user.rsplit(':')[0]		user_system = user.rsplit(':')[1]		user_password = libdieu.settings.get_password(user_name, user_system)				posts_database = libdieu.database.DieuDatabase(user_name, user_system)				dieu_trayicon = DieuTrayIcon()				gobject.threads_init()		gtk.gdk.threads_init()		gobject.MainLoop().run()		gtk.main()	except KeyboardInterrupt:		print ''		print 'Received interrupt from user - shutting down.'		print ''		sys.exit()