Implement #7199 (Optional subscription)

This commit is contained in:
Kovid Goyal 2010-10-17 08:33:32 -06:00
parent 7020ce507e
commit ca4953f028
4 changed files with 27 additions and 10 deletions

View File

@ -39,7 +39,7 @@
<item>
<widget class="QTabWidget" name="central_widget">
<property name="currentIndex">
<number>2</number>
<number>0</number>
</property>
<widget class="QWidget" name="tabWidgetPage1">
<attribute name="title">

View File

@ -120,12 +120,15 @@ class SchedulerDialog(QDialog, Ui_Dialog):
if self.account.isVisible():
un, pw = map(unicode, (self.username.text(), self.password.text()))
un, pw = un.strip(), pw.strip()
if not un and not pw and self.schedule.isChecked():
error_dialog(self, _('Need username and password'),
_('You must provide a username and/or password to '
'use this news source.'), show=True)
return False
self.recipe_model.set_account_info(urn, un.strip(), pw.strip())
if not getattr(self, 'subscription_optional', False):
error_dialog(self, _('Need username and password'),
_('You must provide a username and/or password to '
'use this news source.'), show=True)
return False
if un or pw:
self.recipe_model.set_account_info(urn, un, pw)
if self.schedule.isChecked():
schedule_type = 'interval' if self.interval_button.isChecked() else 'day/time'
@ -157,7 +160,13 @@ class SchedulerDialog(QDialog, Ui_Dialog):
account_info = self.recipe_model.account_info_from_urn(urn)
customize_info = self.recipe_model.get_customize_info(urn)
self.account.setVisible(recipe.get('needs_subscription', '') == 'yes')
ns = recipe.get('needs_subscription', '')
self.account.setVisible(ns in ('yes', 'optional'))
self.subscription_optional = ns == 'optional'
act = _('Account')
act2 = _('(optional)') if self.subscription_optional else \
_('(required)')
self.account.setTitle(act+' '+act2)
un = pw = ''
if account_info is not None:
un, pw = account_info[:2]

View File

@ -110,9 +110,11 @@ class BasicNewsRecipe(Recipe):
#: If True the GUI will ask the user for a username and password
#: to use while downloading
#: @type: boolean
#: If set to "optional" the use of a username and password becomes optional
needs_subscription = False
#:
#: If True the navigation bar is center aligned, otherwise it is left aligned
center_navbar = True
@ -609,7 +611,8 @@ class BasicNewsRecipe(Recipe):
if self.needs_subscription and (\
self.username is None or self.password is None or \
(not self.username and not self.password)):
raise ValueError(_('The "%s" recipe needs a username and password.')%self.title)
if self.needs_subscription != 'optional':
raise ValueError(_('The "%s" recipe needs a username and password.')%self.title)
self.browser = self.get_browser()
self.image_map, self.image_counter = {}, 1

View File

@ -45,12 +45,17 @@ def serialize_recipe(urn, recipe_class):
return ans
default_author = _('You') if urn.startswith('custom:') else _('Unknown')
ns = attr('needs_subscription', False)
if not ns:
ns = 'no'
if ns is True:
ns = 'yes'
return E.recipe({
'id' : str(urn),
'title' : attr('title', _('Unknown')),
'author' : attr('__author__', default_author),
'language' : attr('language', 'und'),
'needs_subscription' : 'yes' if attr('needs_subscription', False) else 'no',
'needs_subscription' : ns,
'description' : attr('description', '')
})