From 6ad3f24f25a41b301b6de5720c8c4a688955d3aa Mon Sep 17 00:00:00 2001 From: jrl Date: Sat, 9 Dec 2006 00:31:28 +0000 Subject: [PATCH] fix a memory leak --- ChangeLog | 5 + configure.ac | 32 ++ data/rhythmbox.schemas | 66 ---- plugins/Makefile.am | 4 + plugins/magnatune/magnatune-prefs.glade | 508 +++++++++++++------------ plugins/magnatune/magnatune-purchase.glade | 32 +- plugins/magnatune/magnatune/MagnatuneSource.py | 91 ++--- plugins/magnatune/magnatune/__init__.py | 183 +++++---- rhythmdb/rhythmdb-property-model.c | 5 +- 9 files changed, 499 insertions(+), 427 deletions(-) diff --git a/ChangeLog b/ChangeLog index 90595f2b..34a16980 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2006-12-09 James Livingston + * rhythmdb/rhythmdb-property-model.c: + (rhythmdb_property_model_finalize): fix a memory leak. + +2006-12-09 James Livingston + * sources/rb-ipod-source.c: (rb_ipod_source_set_ipod_name): don't crash if the iPod's name set to is NULL #358855 diff --git a/configure.ac b/configure.ac index 0bf005f2..e0b33d68 100644 --- a/configure.ac +++ b/configure.ac @@ -123,6 +123,32 @@ if test "x$with_ipod" != "xno"; then fi AM_CONDITIONAL(USE_IPOD, test x"$use_ipod" = xyes) +dnl MTP device support + +AC_ARG_WITH(mtp, + AC_HELP_STRING([--with-mtp], + [Enable MTP device support]),, + with_mtp=auto) +if test "x$with_mtp" != "xno"; then + PKG_CHECK_MODULES(MTP, libmtp, have_libmtp=yes, have_libmtp=no) + if test "x$have_libmtp" = "xno" -a "x$with_mtp" = "xyes"; then + AC_MSG_ERROR([MTP device explicitly requested but libmtp couldn't be found]) + fi + if test "x$have_libmtp" = "xyes"; then + if test "x$with_hal" = xyes && test "x$enable_hal" = xno; then + AC_MSG_ERROR([MTP device explicitly requested but HAL not found or too old]) + fi + if test "x$enable_hal" = xyes; then + AC_DEFINE(WITH_MTP_SUPPORT, 1, [Define if MTP device support is enabled]) + use_mtp=yes + fi + AC_SUBST(MTP_CFLAGS) + AC_SUBST(MTP_LIBS) + fi +fi +AM_CONDITIONAL(USE_MTP, test x"$use_mtp" = xyes) + + dnl gnome-keyring support @@ -947,6 +973,7 @@ plugins/ipod/Makefile plugins/iradio/Makefile plugins/lirc/Makefile plugins/lyrics/Makefile +plugins/mtp/Makefile plugins/sample-python/Makefile plugins/pythonconsole/Makefile plugins/artdisplay/Makefile @@ -1021,6 +1048,11 @@ if test x"$use_ipod" = xyes; then else AC_MSG_NOTICE([ iPod integration disabled]) fi +if test x"$use_mtp" = xyes; then + AC_MSG_NOTICE([** MTP device integration enabled]) +else + AC_MSG_NOTICE([ MTP device integration disabled]) +fi if test x"$with_cd_burning" != xno; then AC_MSG_NOTICE([** CD burning support enabled]) else diff --git a/data/rhythmbox.schemas b/data/rhythmbox.schemas index 166d4a9c..d83c2b38 100644 --- a/data/rhythmbox.schemas +++ b/data/rhythmbox.schemas @@ -890,50 +890,6 @@ - /schemas/apps/rhythmbox/plugins/magnatune/cc_number - /apps/rhythmbox/plugins/magnatune/cc_number - rhythmbox - string - - - The user's credit card number. - The user's credit card number. Visa/Mastercard only. - - - - /schemas/apps/rhythmbox/plugins/magnatune/cc_month - /apps/rhythmbox/plugins/magnatune/cc_month - rhythmbox - string - - - Expiry month of the user's credit card. - Expiry month of the user's credit card. - - - - /schemas/apps/rhythmbox/plugins/magnatune/cc_year - /apps/rhythmbox/plugins/magnatune/cc_year - rhythmbox - string - - - Expiry year of the user's credit card. - Expiry year of the user's credit card. - - - - /schemas/apps/rhythmbox/plugins/magnatune/email - /apps/rhythmbox/plugins/magnatune/email - rhythmbox - string - - - User's email address. - User's email address. - - - /schemas/apps/rhythmbox/plugins/magnatune/format /apps/rhythmbox/plugins/magnatune/format rhythmbox @@ -945,28 +901,6 @@ - /schemas/apps/rhythmbox/plugins/magnatune/forget - /apps/rhythmbox/plugins/magnatune/forget - rhythmbox - bool - FALSE - - True if the user's credit card information should not be stored. - True if the user's credit card information should not be stored. - - - - /schemas/apps/rhythmbox/plugins/magnatune/name - /apps/rhythmbox/plugins/magnatune/name - rhythmbox - string - - - User's name. - User's name. - - - /schemas/apps/rhythmbox/plugins/magnatune/pay /apps/rhythmbox/plugins/magnatune/pay rhythmbox diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 1f4595d0..cac8f9fe 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -27,6 +27,10 @@ if USE_IPOD SUBDIRS += ipod endif +if USE_MTP +SUBDIRS += mtp +endif + if USE_CD_BURNING SUBDIRS += \ audiocd \ diff --git a/plugins/magnatune/magnatune-prefs.glade b/plugins/magnatune/magnatune-prefs.glade index 3f59ef8b..a192fe23 100644 --- a/plugins/magnatune/magnatune-prefs.glade +++ b/plugins/magnatune/magnatune-prefs.glade @@ -139,338 +139,346 @@ - + True - False - 6 + 0 + 0.5 + GTK_SHADOW_ETCHED_IN - + True - 4 - 2 - False - 6 - 12 + 0.5 + 0.5 + 1 + 1 + 6 + 6 + 12 + 6 - - True - _Name: - True - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - name_entry - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - True - True - True - 0 - - True - * - False - - - - 1 - 2 - 0 - 1 - - - - - - - True - True - True - True - 0 - - True - * - False - - - - 1 - 2 - 1 - 2 - - - - - - - True - _Email: - True - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - email_entry - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - - - True - C_redit Card: - True - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - cc_entry - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 2 - 3 - fill - - - - - - - True - True - True - True - 0 - - True - - False - - - - 1 - 2 - 2 - 3 - - - - - - + True + 4 + 2 False - 0 + 6 + 12 - + True - _Month: + _Name: True False GTK_JUSTIFY_LEFT False False - 0.5 + 0 0.5 - 8 + 0 0 - mm_entry + name_entry PANGO_ELLIPSIZE_NONE -1 False 0 - 0 - False - False + 0 + 1 + 0 + 1 + fill + - + True - 01 -02 -03 -04 -05 -06 -07 -08 -09 -10 -11 -12 - False - True - + True + True + True + 0 + + True + * + False + + + + 1 + 2 + 0 + 1 + + + + + + + True + True + True + True + 0 + + True + * + False + + + + 1 + 2 + 1 + 2 + + + + + + + True + _Email: + True + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + email_entry + PANGO_ELLIPSIZE_NONE + -1 + False + 0 - 0 - False - True + 0 + 1 + 1 + 2 + fill + - + True - _Year: + C_redit Card: True False GTK_JUSTIFY_LEFT False False - 0.5 + 0 0.5 - 8 + 0 0 - yy_entry + cc_entry PANGO_ELLIPSIZE_NONE -1 False 0 - 0 - False - False + 0 + 1 + 2 + 3 + fill + - + True True True True - 2 + 0 True False - + - 0 - True - True + 1 + 2 + 2 + 3 + - - - 1 - 2 - 3 - 4 - fill - - - - - True - Expiry: - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 + + + True + False + 0 + + + + True + _Month: + True + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 8 + 0 + mm_entry + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + 01 +02 +03 +04 +05 +06 +07 +08 +09 +10 +11 +12 + False + True + + + + 0 + False + True + + + + + + True + _Year: + True + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 8 + 0 + yy_entry + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + True + True + 2 + + True + + False + + + + 0 + True + True + + + + + 1 + 2 + 3 + 4 + fill + + + + + + True + Expiry: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 3 + 4 + fill + + + - - 0 - 1 - 3 - 4 - fill - - - - 0 - False - False - - + True True - Don't store credit card information + Remember my credit card details True GTK_RELIEF_NORMAL True False False True - + - 0 - False - False + label_item diff --git a/plugins/magnatune/magnatune-purchase.glade b/plugins/magnatune/magnatune-purchase.glade index 25c7c911..e0481d2d 100644 --- a/plugins/magnatune/magnatune-purchase.glade +++ b/plugins/magnatune/magnatune-purchase.glade @@ -147,7 +147,7 @@ 12 True - 7 + 8 3 False 0 @@ -341,6 +341,7 @@ $18 (We love you!) + True Name: False False @@ -368,6 +369,7 @@ $18 (We love you!) + True True True True @@ -388,6 +390,7 @@ $18 (We love you!) + True Credit Card number: False False @@ -415,6 +418,7 @@ $18 (We love you!) + True Expiry month: False False @@ -442,6 +446,7 @@ $18 (We love you!) + True Expiry year: False False @@ -469,6 +474,7 @@ $18 (We love you!) + True True True True @@ -489,6 +495,7 @@ $18 (We love you!) + True True True True @@ -509,6 +516,7 @@ $18 (We love you!) + True 01 02 03 @@ -533,6 +541,28 @@ $18 (We love you!) fill + + + + True + True + Remember my credit card details + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 1 + 3 + 7 + 8 + fill + + + 0 diff --git a/plugins/magnatune/magnatune/MagnatuneSource.py b/plugins/magnatune/magnatune/MagnatuneSource.py index 7403a27c..7364afc4 100644 --- a/plugins/magnatune/magnatune/MagnatuneSource.py +++ b/plugins/magnatune/magnatune/MagnatuneSource.py @@ -8,6 +8,14 @@ import gnomevfs, gnome, gconf import xml import urllib, zipfile +has_gnome_keyring = False +try: + import gnomekeyring + has_gnome_keyring = True +except: + pass + + magnatune_partner_id = "zimmerman" # URIs @@ -160,40 +168,49 @@ class MagnatuneSource(rb.BrowserSource): album = self.__db.entry_get(track, rhythmdb.PROP_ALBUM) gladexml = gtk.glade.XML(self.__plugin.find_file("magnatune-purchase.glade")) - pay_combo = gladexml.get_widget("pay_combobox") - format_combo = gladexml.get_widget("audio_combobox") - text_label = gladexml.get_widget("info_label") - pay_combo.set_active(self.__client.get_int(self.__plugin.gconf_keys['pay']) - 5) - format_combo.set_active(self.__plugin.format_list.index(self.__client.get_string(self.__plugin.gconf_keys['format']))) - text_label.set_text(_("Would you like to purchase the album '%s' by '%s'.") % (album, artist)) - - if self.__client.get_bool(self.__plugin.gconf_keys['forget']): - gladexml.get_widget("name_label").visible = True - gladexml.get_widget("name_entry").visible = True - gladexml.get_widget("cc_label").visible = True - gladexml.get_widget("cc_entry").visible = True - gladexml.get_widget("mm_label").visible = True - gladexml.get_widget("mm_combobox").visible = True - gladexml.get_widget("yy_label").visible = True - gladexml.get_widget("yy_entry").visible = True - gladexml.get_widget("name_label").show() - gladexml.get_widget("name_entry").show() - gladexml.get_widget("cc_label").show() - gladexml.get_widget("cc_entry").show() - gladexml.get_widget("mm_label").show() - gladexml.get_widget("mm_combobox").show() - gladexml.get_widget("yy_label").show() - gladexml.get_widget("yy_entry").show() + gladexml.get_widget("pay_combobox").set_active(self.__client.get_int(self.__plugin.gconf_keys['pay']) - 5) + gladexml.get_widget("audio_combobox").set_active(self.__plugin.format_list.index(self.__client.get_string(self.__plugin.gconf_keys['format']))) + gladexml.get_widget("info_label").set_text(_("Would you like to purchase the album '%s' by '%s'.") % (album, artist)) + gladexml.get_widget("remember_cc_details").set_sensitive(has_gnome_keyring) + + try: + (ccnumber, ccyear, ccmonth, name, email) = self.plugin.get_cc_details() + gladexml.get_widget("cc_entry").set_text(ccnumber) + gladexml.get_widget("yy_entry").set_text(ccyear) + gladexml.get_widget("mm_entry").set_active(ccmonth-1) + gladexml.get_widget("name_entry").set_text(name) + gladexml.get_widget("email_entry").set_text(email) + + gladexml.get_widget("remember_cc_details").set_active(True) + except Exception, e: + print e + + gladexml.get_widget("cc_entry").set_text("") + gladexml.get_widget("yy_entry").set_text("") + gladexml.get_widget("mm_entry").set_active(0) + gladexml.get_widget("name_entry").set_text("") + gladexml.get_widget("email_entry").set_text("") + + gladexml.get_widget("remember_cc_details").set_active(False) + window = gladexml.get_widget("purchase_dialog") if window.run() == gtk.RESPONSE_ACCEPT: - if self.__client.get_bool(self.__plugin.gconf_keys['forget']): - self.__tmp_name = gladexml.get_widget("name_entry").get_text() - self.__tmp_cc = gladexml.get_widget("cc_entry").get_text() - self.__tmp_mm = gladexml.get_widget("mm_combobox").get_active_text() - self.__tmp_yy = gladexml.get_widget("yy_entry").get_text() - self.__purchase_album (sku, pay_combo.get_active() + 5, self.__plugin.format_list[format_combo.get_active()]) + amount = pay_combo.get_active() + 5 + format = self.__plugin.format_list[format_combo.get_active()] + ccnumber = gladexml.get_widget("cc_entry").get_text() + ccyear = gladexml.get_widget("yy_entry").get_text() + ccmonth = gladexml.get_widget("mm_combobox").get_active_text() + name = gladexml.get_widget("name_entry").get_text() + email = self.__client.get_string(self.__plugin.gconf_keys['email']) + + if gladexml.get_widget("remember_cc_details").props.active: + self.plugin.store_cc_details(ccnumber, ccyear, ccmonth, name, email) + else: + self.plugin.clear_cc_details() + + self.__purchase_album (sku, amount, format, ccnumber, ccyear, ccmonth, name, email) window.destroy() @@ -354,19 +371,7 @@ class MagnatuneSource(rb.BrowserSource): # # internal purchasing code # - def __purchase_album(self, sku, pay, format): - ccnumber = self.__client.get_string(self.__plugin.gconf_keys['ccnumber']) - ccyear = self.__client.get_string(self.__plugin.gconf_keys['ccyear']) - ccmonth = self.__client.get_string(self.__plugin.gconf_keys['ccmonth']) - name = self.__client.get_string(self.__plugin.gconf_keys['ccname']) - email = self.__client.get_string(self.__plugin.gconf_keys['email']) - - if self.__client.get_bool(self.__plugin.gconf_keys['forget']): - ccnumber = self.__tmp_cc - ccyear = self.__tmp_yy - ccmonth = self.__tmp_mm - name = self.__tmp_name - + def __purchase_album(self, sku, pay, format, ccnumber, ccyear, ccmonth, name, email): print "purchasing tracks:", sku, pay, format, name, email try: diff --git a/plugins/magnatune/magnatune/__init__.py b/plugins/magnatune/magnatune/__init__.py index 2bf94697..601d5822 100644 --- a/plugins/magnatune/magnatune/__init__.py +++ b/plugins/magnatune/magnatune/__init__.py @@ -8,9 +8,17 @@ import zipfile import sys, os.path import xml import datetime +import string from MagnatuneSource import MagnatuneSource +has_gnomekeyring = False +try: + import gnomekeyring + has_gnome_keyring = True +except: + pass + popup_ui = """ @@ -29,6 +37,8 @@ popup_ui = """ """ +keyring_attributes = {"name": "rb-magnatune-cc-data"} + class Magnatune(rb.Plugin): client = gconf.client_get_default() @@ -38,12 +48,7 @@ class Magnatune(rb.Plugin): gconf_keys = { 'format': "/apps/rhythmbox/plugins/magnatune/format", 'pay': "/apps/rhythmbox/plugins/magnatune/pay", - 'ccnumber': "/apps/rhythmbox/plugins/magnatune/cc_number", - 'ccyear': "/apps/rhythmbox/plugins/magnatune/cc_year", - 'ccmonth': "/apps/rhythmbox/plugins/magnatune/cc_month", - 'ccname': "/apps/rhythmbox/plugins/magnatune/name", - 'email': "/apps/rhythmbox/plugins/magnatune/email", - 'forget': "/apps/rhythmbox/plugins/magnatune/forget" + 'ccauthtoken': "/apps/rhythmbox/plugins/magnatune/ccauthtoken" } @@ -57,6 +62,7 @@ class Magnatune(rb.Plugin): def activate(self, shell): self.shell = shell # so buy_track can update the progress bar self.db = shell.get_property("db") + self.keyring = None self.entry_type = self.db.entry_register_type("MagnatuneEntryType") # allow changes which don't do anything @@ -104,69 +110,111 @@ class Magnatune(rb.Plugin): self.source.delete_thyself() self.source = None self.shell = None + self.keyring = None + + + def get_keyring(self): + if self.keyring is None: + self.keyring = gnomekeyring.get_default_keyring_sync() + return self.keyring + + def store_cc_details(self, *details): + if has_gnome_keyring: + print "storing CC details" + try: + id = gnomekeyring.item_create_sync(self.get_keyring(), + gnomekeyring.ITEM_GENERIC_SECRET, + "Magnatune credit card info", {"name": "rb-magnatune-cc-data"}, + string.join (details, '\n'), True) + except Exception, e: + print e + + def clear_cc_details(self): + if has_gnome_keyring: + print "clearing CC details" + try: + ids = gnomekeyring.find_items_sync (gnomekeyring.ITEM_GENERIC_SECRET, {"name": "rb-magnatune-cc-data"}) + print "keyring ids " + str(ids) + gnomekeyring.item_delete_sync (self.get_keyring(), ids[0]) + except Exception, e: + print e + + def get_cc_details(self): + if has_gnome_keyring: + print "getting CC details" + try: + ids = gnomekeyring.find_items_sync (gnomekeyring.ITEM_GENERIC_SECRET, {"name": "rb-magnatune-cc-data"}) + print "keyring ids " + str(ids) + data = gnomekeyring.item_get_info_sync(self.get_keyring(), ids[0]).get_secret() + return string.split(data, "\n") + except Exception, e: + print e + return ("", "", 0, "", "") def create_configure_dialog(self, dialog=None): + keyring = gnomekeyring.get_default_keyring_sync() if dialog == None: - - def ignore_checkbox_toggled(button): - if button.get_active(): - gladexml.get_widget("name_entry").set_sensitive(False) - gladexml.get_widget("cc_entry").set_sensitive(False) - gladexml.get_widget("mm_entry").set_sensitive(False) - gladexml.get_widget("yy_entry").set_sensitive(False) - gladexml.get_widget("name_entry").set_text("") - gladexml.get_widget("cc_entry").set_text("") - gladexml.get_widget("mm_entry").set_active(0) - gladexml.get_widget("yy_entry").set_text("") - self.client.set_bool(self.gconf_keys['forget'], True) - else: - gladexml.get_widget("name_entry").set_sensitive(True) - gladexml.get_widget("cc_entry").set_sensitive(True) - gladexml.get_widget("mm_entry").set_sensitive(True) - gladexml.get_widget("yy_entry").set_sensitive(True) - self.client.set_bool(self.gconf_keys['forget'], False) - - def yy_entry_changed(entry): - self.client.set_string(self.gconf_keys['ccyear'], entry.get_text()) + def fill_cc_details(): try: - mm = gladexml.get_widget("mm_entry").get_active_text() - if int(entry.get_text()) < (datetime.date.today().year % 100): - gladexml.get_widget("cc_expired_label").visible = True - gladexml.get_widget("cc_expired_label").show() - elif (int(entry.get_text()) == (datetime.date.today().year % 100) and int(mm) < datetime.date.today().month): - gladexml.get_widget("cc_expired_label").visible = True - gladexml.get_widget("cc_expired_label").show() - else: - gladexml.get_widget("cc_expired_label").visible = False - gladexml.get_widget("cc_expired_label").hide() - except Exception,e: + (ccnumber, ccyear, ccmonth, name, email) = self.get_cc_details() + gladexml.get_widget("cc_entry").set_text(ccnumber) + gladexml.get_widget("yy_entry").set_text(ccyear) + gladexml.get_widget("mm_entry").set_active(int(ccmonth)-1) + gladexml.get_widget("name_entry").set_text(name) + gladexml.get_widget("email_entry").set_text(email) + gladexml.get_widget("remember_cc_details").set_active(True) + except Exception, e: print e - - def mm_entry_changed(entry): - self.client.set_string(self.gconf_keys['ccmonth'], entry.get_active_text()) + + gladexml.get_widget("cc_entry").set_text("") + gladexml.get_widget("yy_entry").set_text("") + gladexml.get_widget("mm_entry").set_active(0) + gladexml.get_widget("name_entry").set_text("") + gladexml.get_widget("email_entry").set_text("") + gladexml.get_widget("remember_cc_details").set_active(False) + + def update_expired(): + mm = gladexml.get_widget("mm_entry").get_active() + 1 + yy = 0 try: - yy = gladexml.get_widget("yy_entry").get_text() - if int(yy) < (datetime.date.today().year % 100): - gladexml.get_widget("cc_expired_label").visible = True - gladexml.get_widget("cc_expired_label").show() - elif (int(yy) == (datetime.date.today().year % 100) and int(entry.get_active_text()) < datetime.date.today().month): - gladexml.get_widget("cc_expired_label").visible = True - gladexml.get_widget("cc_expired_label").show() - else: - gladexml.get_widget("cc_expired_label").visible = False - gladexml.get_widget("cc_expired_label").hide() - except Exception,e: + yy = int(gladexml.get_widget("yy_entry").get_text()) + except Exception, e: print e + gladexml.get_widget("cc_expired_label").hide() + return + + if yy < (datetime.date.today().year % 100): + gladexml.get_widget("cc_expired_label").show() + elif (yy == (datetime.date.today().year % 100) and mm < datetime.date.today().month): + gladexml.get_widget("cc_expired_label").show() + else: + gladexml.get_widget("cc_expired_label").hide() + def remember_checkbox_toggled (button): + print "remember CC details toggled " + str(button.get_active()) + gladexml.get_widget("cc_entry").set_sensitive(button.get_active()) + gladexml.get_widget("mm_entry").set_sensitive(button.get_active()) + gladexml.get_widget("yy_entry").set_sensitive(button.get_active()) + gladexml.get_widget("name_entry").set_sensitive(button.get_active()) + gladexml.get_widget("email_entry").set_sensitive(button.get_active()) + + if not button.get_active(): + try: + self.clear_cc_details () + except Exception, e: + print e +# fill_cc_details() + + self.configure_callback_dic = { - "rb_magnatune_name_entry_changed_cb" : lambda w: self.client.set_string(self.gconf_keys['ccname'], w.get_text()), - "rb_magnatune_email_entry_changed_cb" : lambda w: self.client.set_string(self.gconf_keys['email'], w.get_text()), - "rb_magnatune_cc_entry_changed_cb" : lambda w: self.client.set_string(self.gconf_keys['ccnumber'], w.get_text()), - "rb_magnatune_yy_entry_changed_cb" : yy_entry_changed, - "rb_magnatune_mm_entry_changed_cb" : mm_entry_changed, +# "rb_magnatune_yy_entry_changed_cb" : lambda w: update_expired(), +# "rb_magnatune_mm_entry_changed_cb" : lambda w: update_expired(), +# "rb_magnatune_name_entry_changed_cb" : lambda w: None, +# "rb_magnatune_cc_entry_changed_cb" : lambda w: None, +# "rb_magnatune_email_entry_changed_cb" : lambda w: None, "rb_magnatune_pay_combobox_changed_cb" : lambda w: self.client.set_int(self.gconf_keys['pay'], w.get_active() + 5), "rb_magnatune_audio_combobox_changed_cb" : lambda w: self.client.set_string(self.gconf_keys['format'], self.format_list[w.get_active()]), - "rb_magnatune_ignore_cc_info_checkbox_toggled_cb" : ignore_checkbox_toggled + "rb_magnatune_remember_cc_details_toggled_cb" : remember_checkbox_toggled } gladexml = gtk.glade.XML(self.find_file("magnatune-prefs.glade")) @@ -174,16 +222,21 @@ class Magnatune(rb.Plugin): # FIXME this bit should be in glade too dialog = gladexml.get_widget('preferences_dialog') - dialog.connect("response", lambda w, r: w.hide()) + def dialog_response (dialog, response): + if gladexml.get_widget("remember_cc_details").get_active(): + ccnumber = gladexml.get_widget("cc_entry").get_text() + ccyear = gladexml.get_widget("yy_entry").get_text() + ccmonth = str(gladexml.get_widget("mm_entry").get_active() + 1) + name = gladexml.get_widget("name_entry").get_text() + email = gladexml.get_widget("email_entry").get_text() + self.store_cc_details(ccnumber, ccyear, ccmonth, name, email) + dialog.hide() + dialog.connect("response", dialog_response) - gladexml.get_widget("name_entry").set_text(self.client.get_string(self.gconf_keys['ccname'])) - gladexml.get_widget("email_entry").set_text(self.client.get_string(self.gconf_keys['email'])) - gladexml.get_widget("cc_entry").set_text(self.client.get_string(self.gconf_keys['ccnumber'])) - gladexml.get_widget("yy_entry").set_text(self.client.get_string(self.gconf_keys['ccyear'])) - gladexml.get_widget("mm_entry").set_active(int(self.client.get_string(self.gconf_keys['ccmonth'])) - 1) + gladexml.get_widget("remember_cc_details").set_sensitive(has_gnome_keyring) gladexml.get_widget("pay_combobox").set_active(self.client.get_int(self.gconf_keys['pay']) - 5) gladexml.get_widget("audio_combobox").set_active(self.format_list.index(self.client.get_string(self.gconf_keys['format']))) - gladexml.get_widget("ignore_cc_info_checkbox").set_active(self.client.get_bool(self.gconf_keys['forget'])) + fill_cc_details() dialog.present() return dialog diff --git a/rhythmdb/rhythmdb-property-model.c b/rhythmdb/rhythmdb-property-model.c index adefd10d..60555310 100644 --- a/rhythmdb/rhythmdb-property-model.c +++ b/rhythmdb/rhythmdb-property-model.c @@ -447,15 +447,16 @@ rhythmdb_property_model_finalize (GObject *object) if (model->priv->syncing_id != 0) g_source_remove (model->priv->syncing_id); + g_hash_table_destroy (model->priv->reverse_map); + end_ptr = g_sequence_get_end_ptr (model->priv->properties); for (ptr = g_sequence_get_begin_ptr (model->priv->properties); ptr != end_ptr; ptr = g_sequence_ptr_next (ptr)) { RhythmDBPropertyModelEntry *prop = g_sequence_ptr_get_data (ptr); rb_refstring_unref (prop->string); rb_refstring_unref (prop->sort_string); + g_free (prop); } - - g_hash_table_destroy (model->priv->reverse_map); g_sequence_free (model->priv->properties); g_hash_table_destroy (model->priv->entries); -- 2.11.4.GIT