Exception modal now has delete and retry options that work. Change feed link/address are still in the works, but they show up. (Buttons don't do anything yet.)

This commit is contained in:
Samuel Clay 2010-08-25 10:18:08 -04:00
parent 389157e2f0
commit e01bb9eb74
7 changed files with 169 additions and 28 deletions

View file

@ -117,6 +117,7 @@ def load_feeds(request):
feeds[sub.feed.pk]['not_yet_fetched'] = True
if sub.feed.has_exception:
feeds[sub.feed.pk]['has_exception'] = True
feeds[sub.feed.pk]['feed_address'] = sub.feed.feed_address
if not_yet_fetched:
for f in feeds:
@ -195,6 +196,7 @@ def refresh_feeds(request):
}
if sub.feed.has_exception:
feeds[sub.feed.pk]['has_exception'] = True
feeds[sub.feed.pk]['feed_address'] = sub.feed.feed_address
if request.POST.get('check_fetch_status', False):
feeds[sub.feed.pk]['not_yet_fetched'] = not sub.feed.fetched_once

View file

@ -3,4 +3,5 @@ from apps.rss_feeds import views
urlpatterns = patterns('',
url(r'^statistics', views.load_feed_statistics, name='statistics'),
url(r'^exception_retry', views.exception_retry, name='exception-retry'),
)

View file

@ -28,4 +28,15 @@ def load_feed_statistics(request):
logging.info(" ---> [%s] Statistics: %s" % (request.user, feed))
return stats
return stats
@json.json_view
def exception_retry(request):
feed_id = request.POST['feed_id']
feed = get_object_or_404(Feed, pk=feed_id)
feed.has_exception = False
feed.fetched_once = False
feed.save()
return {'code': 1}

View file

@ -406,6 +406,9 @@ a img {
top: 2px;
}
#feed_list .feed.NB-feed-unfetched .feed_counts {
display: none;
}
#feed_list .feed.NB-feed-unfetched .feed_favicon {
opacity: .5;
}
@ -2622,11 +2625,11 @@ background: transparent;
}
.NB-menu-manage .NB-menu-manage-feed .NB-menu-manage-image {
margin-left: 18px;
/* margin-left: 18px; */
}
.NB-menu-manage .NB-menu-manage-feed {
padding-left: 54px;
/* padding-left: 54px;*/
}
/* ==================== */
@ -2708,4 +2711,28 @@ background: transparent;
color: #606060;
font-size: 12px;
margin: 24px 0;
}
.NB-modal-exception .NB-exception-option-option {
color: #A0A0A0;
padding: 0 8px 0 0;
}
.NB-modal-exception .NB-exception-option-meta {
float: right;
font-size: 11px;
font-weight: bold;
padding: 2px 0 0 0;
}
.NB-modal-exception .NB-exception-option-meta-recommended {
color: #4A9937;
}
.NB-modal-exception .NB-exception-option-address {
opacity: .2;
}
.NB-modal-exception .NB-modal-submit input.NB-modal-submit-save {
margin-bottom: 6px;
}

View file

@ -229,6 +229,11 @@ NEWSBLUR.AssetModel.Reader.prototype = {
updated = true;
}
}
if ((feed['has_exception'] && !self.feeds[f]['has_exception']) ||
(self.feeds[f]['has_exception'] && !feed['has_exception'])) {
updated = true;
self.feeds[f]['has_exception'] = !!feed['has_exception'];
}
if (updated && !(f in updated_feeds)) {
updated_feeds.push(f);
}
@ -442,8 +447,19 @@ NEWSBLUR.AssetModel.Reader.prototype = {
start_import_from_google_reader: function(callback) {
this.make_request('/import/import_from_google_reader/', {}, callback);
},
save_exception_retry: function(feed_id, callback) {
var self = this;
if (NEWSBLUR.Globals.is_authenticated) {
this.make_request('/rss_feeds/exception_retry', {'feed_id': feed_id}, function() {
if ($.isFunction(callback)) callback();
});
} else {
if ($.isFunction(callback)) callback();
}
}
};

View file

@ -562,7 +562,7 @@
var item = items[i];
if (typeof item == "number") {
var feed = this.model.feeds[item];
var feed = this.model.get_feed(item);
if (!feed) continue;
var $feed = this.make_feed_title_line(feed, true, 'feed');
$feeds.append($feed);
@ -641,7 +641,7 @@
]),
$.make('img', { className: 'feed_favicon', src: this.google_favicon_url + feed.feed_link }),
$.make('span', { className: 'feed_title' }, feed.feed_title),
$.make('div', { className: 'NB-feedbar-manage-feed', title: 'Manage Opinions' }),
$.make('div', { className: 'NB-feedbar-manage-feed', title: 'Manage Intelligence' }),
(type == 'story' && $.make('div', { className: 'NB-feedbar-statistics', title: 'Statistics' })),
(type == 'story' && $.make('div', { className: 'NB-feedbar-last-updated' }, [
$.make('span', { className: 'NB-feedbar-last-updated-label' }, 'Updated: '),
@ -1993,7 +1993,7 @@
]),
$.make('li', { className: 'NB-menu-manage-trainer' }, [
$.make('div', { className: 'NB-menu-manage-image' }),
$.make('div', { className: 'NB-menu-manage-title' }, 'Train intelligence'),
$.make('div', { className: 'NB-menu-manage-title' }, 'Intelligence Trainer'),
$.make('div', { className: 'NB-menu-manage-subtitle' }, 'Accurate filters are happy filters.')
]),
$.make('li', { className: 'NB-menu-manage-preferences' }, [
@ -2016,16 +2016,16 @@
$.make('div', { className: 'NB-menu-manage-image' }),
$.make('div', { className: 'NB-menu-manage-title' }, 'Really delete?')
]),
$.make('li', { className: 'NB-menu-manage-feed NB-menu-manage-feed-manage' }, [
$.make('div', { className: 'NB-menu-manage-image' }),
$.make('div', { className: 'NB-menu-manage-title' }, 'Manage opinions'),
$.make('div', { className: 'NB-menu-manage-subtitle' }, 'What you like and don\'t like.')
]),
$.make('li', { className: 'NB-menu-manage-feed NB-menu-manage-feed-train' }, [
$.make('div', { className: 'NB-menu-manage-image' }),
$.make('div', { className: 'NB-menu-manage-title' }, 'Train intelligence'),
$.make('div', { className: 'NB-menu-manage-title' }, 'Site intelligence trainer'),
$.make('div', { className: 'NB-menu-manage-subtitle' }, 'Choose classifiers for this site.')
]),
$.make('li', { className: 'NB-menu-manage-feed NB-menu-manage-feed-manage' }, [
$.make('div', { className: 'NB-menu-manage-image' }),
$.make('div', { className: 'NB-menu-manage-title' }, 'Site intelligence manager'),
$.make('div', { className: 'NB-menu-manage-subtitle' }, 'What you like and don\'t like.')
]),
$.make('li', { className: 'NB-menu-manage-feed NB-menu-manage-feed-stats' }, [
$.make('div', { className: 'NB-menu-manage-image' }),
$.make('div', { className: 'NB-menu-manage-title' }, 'Site statistics'),
@ -2337,7 +2337,7 @@
delete this.cache.refresh_callback;
}
this.model.refresh_feeds($.rescope(this.post_feed_refresh, this));
this.model.refresh_feeds($.rescope(this.post_feed_refresh, this), this.flags['has_unfetched_feeds']);
},
post_feed_refresh: function(e, updated_feeds) {

View file

@ -13,6 +13,7 @@ NEWSBLUR.ReaderFeedException.prototype = {
runner: function() {
this.make_modal();
this.change_retry_option_meta();
this.handle_cancel();
this.open_modal();
@ -28,21 +29,79 @@ NEWSBLUR.ReaderFeedException.prototype = {
$.make('img', { className: 'NB-modal-feed-image feed_favicon', src: this.google_favicon_url + this.feed.feed_link }),
$.make('span', { className: 'NB-modal-feed-title' }, this.feed.feed_title)
]),
$.make('div', { className: 'NB-exception-explanation' }, 'Not much to do yet. Soon you will be able to fix the URL, delete the feed, or force a retry.'),
$.make('form', { className: 'NB-exception-form' }, [
$.make('div', { className: 'NB-modal-submit' }, [
$.make('input', { type: 'submit', disabled: 'true', className: 'NB-disabled', value: 'Fill out proposed changes...' }),
' or ',
$.make('a', { href: '#', className: 'NB-modal-cancel' }, 'cancel')
$.make('div', { className: 'NB-fieldset NB-exception-option NB-exception-option-retry NB-modal-submit' }, [
$.make('h5', [
$.make('div', { className: 'NB-exception-option-meta' }),
$.make('span', { className: 'NB-exception-option-option' }, 'Option 1:'),
'Retry'
]),
$.make('div', { className: 'NB-fieldset-fields' }, [
$.make('div', [
$.make('div', { className: 'NB-loading' }),
$.make('input', { type: 'submit', value: 'Retry fetching and parsing', className: 'NB-modal-submit-save NB-modal-submit-retry' }),
$.make('div', { className: 'NB-error' })
])
])
]).bind('submit', function(e) {
e.preventDefault();
self.save_preferences();
return false;
})
]),
$.make('div', { className: 'NB-fieldset NB-exception-option NB-exception-option-address NB-modal-submit' }, [
$.make('h5', [
$.make('span', { className: 'NB-exception-option-option' }, 'Option 2:'),
'Change Website Address'
]),
$.make('div', { className: 'NB-fieldset-fields' }, [
$.make('div', [
$.make('div', { className: 'NB-loading' }),
$.make('label', { 'for': 'NB-exception-input-link' }, [
$.make('div', { className: 'NB-folder-icon' }),
'Website URL: '
]),
$.make('input', { type: 'text', id: 'NB-exception-input-link', className: 'NB-exception-input-link', name: 'feed_link', value: this.feed['feed_link'] }),
$.make('input', { type: 'submit', value: 'Fetch Feed From Website', className: 'NB-modal-submit-save NB-modal-submit-fetch' }),
$.make('div', { className: 'NB-error' })
])
])
]),
$.make('div', { className: 'NB-fieldset NB-exception-option NB-exception-option-address NB-modal-submit' }, [
$.make('h5', [
$.make('span', { className: 'NB-exception-option-option' }, 'Option 2:'),
'Change RSS Feed Address'
]),
$.make('div', { className: 'NB-fieldset-fields' }, [
$.make('div', [
$.make('div', { className: 'NB-loading' }),
$.make('label', { 'for': 'NB-exception-input-address' }, [
$.make('div', { className: 'NB-folder-icon' }),
'RSS/XML URL: '
]),
$.make('input', { type: 'text', id: 'NB-exception-input-address', className: 'NB-exception-input-address', name: 'feed_address', value: this.feed['feed_address'] }),
$.make('input', { type: 'submit', value: 'Parse this RSS/XML Feed', className: 'NB-modal-submit-save NB-modal-submit-parse' }),
$.make('div', { className: 'NB-error' })
])
])
]),
$.make('div', { className: 'NB-fieldset NB-exception-option NB-exception-option-delete NB-modal-submit' }, [
$.make('h5', [
$.make('span', { className: 'NB-exception-option-option' }, 'Option 3:'),
'Just Delete This Feed'
]),
$.make('div', { className: 'NB-fieldset-fields' }, [
$.make('div', [
$.make('div', { className: 'NB-loading' }),
$.make('input', { type: 'submit', value: 'Delete It. It Just Won\'t Work!', className: 'NB-modal-submit-save NB-modal-submit-delete' }),
$.make('div', { className: 'NB-error' })
])
])
])
]);
},
change_retry_option_meta: function() {
var $meta = $('.NB-exception-option-retry .NB-exception-option-meta', this.$modal);
$meta.addClass('NB-exception-option-meta-recommended');
$meta.text('Recommended');
},
open_modal: function() {
var self = this;
@ -79,6 +138,26 @@ NEWSBLUR.ReaderFeedException.prototype = {
$.modal.close();
});
},
save_retry_feed: function() {
var self = this;
this.model.save_exception_retry(this.feed_id, function() {
NEWSBLUR.reader.flags['has_unfetched_feeds'] = true;
NEWSBLUR.reader.force_feed_refresh();
$.modal.close();
});
},
delete_feed: function() {
var $loading = $('.NB-modal-loading', this.$model);
$loading.addClass('NB-active');
var feed_id = this.feed_id;
this.model.delete_publisher(feed_id, function() {
NEWSBLUR.reader.delete_feed(feed_id);
$.modal.close();
});
},
// ===========
// = Actions =
@ -86,11 +165,16 @@ NEWSBLUR.ReaderFeedException.prototype = {
handle_click: function(elem, e) {
var self = this;
$.targetIs(e, { tagSelector: '.NB-add-url-submit' }, function($t, $p) {
$.targetIs(e, { tagSelector: '.NB-modal-submit-retry' }, function($t, $p) {
e.preventDefault();
self.save_add_url();
self.save_retry_feed();
});
$.targetIs(e, { tagSelector: '.NB-modal-submit-delete' }, function($t, $p) {
e.preventDefault();
self.delete_feed();
});
}