#!/usr/bin/env python import os import sys import time import dl import threading import gtk import gobject import dbus import dbus.service import dbus.glib import pynotify import gnomevfs import webbrowser import libdieu.settings import libdieu.database import libdieu.bookmark import libdieu.inet from xml.sax.saxutils import unescape from optparse import OptionParser pynotify.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, {"'": "'", """: '"'}) Extended = unescape(Extended, {"'": "'", """: '"'}) 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', '"' + self.post_window_entries_desc.get_text() + '"' + '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', '"' + self.post_window_entries_desc.get_text() + '"' + ' 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', '"' + self.post_window_entries_desc.get_text() + '"' + ' 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('General') 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('Status Icon') 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): pass if __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()