mirror of
https://github.com/viq/NewsBlur.git
synced 2025-09-18 21:43:31 +00:00
Speeding up All Site Stories. Also beta-ing river with read_filter of all (not just unread).
This commit is contained in:
parent
4d8920ce9b
commit
6470c2ee08
6 changed files with 84 additions and 55 deletions
|
@ -742,6 +742,17 @@ def load_river_stories__redis(request):
|
|||
|
||||
# Find starred stories
|
||||
if found_feed_ids:
|
||||
if read_filter == 'all':
|
||||
story_ids = [story['id'] for story in stories]
|
||||
userstories_db = MUserStory.objects(user_id=user.pk,
|
||||
feed_id__in=found_feed_ids,
|
||||
story_id__in=story_ids
|
||||
).only('story_id').hint([('user_id', 1),
|
||||
('feed_id', 1),
|
||||
('story_id', 1)])
|
||||
userstories = set(us.story_id for us in userstories_db)
|
||||
else:
|
||||
userstories = []
|
||||
starred_stories = MStarredStory.objects(
|
||||
user_id=user.pk,
|
||||
story_feed_id__in=found_feed_ids
|
||||
|
@ -749,6 +760,7 @@ def load_river_stories__redis(request):
|
|||
starred_stories = dict([(story.story_guid, story.starred_date)
|
||||
for story in starred_stories])
|
||||
else:
|
||||
userstories = []
|
||||
starred_stories = {}
|
||||
|
||||
# Intelligence classifiers for all feeds involved
|
||||
|
@ -772,9 +784,13 @@ def load_river_stories__redis(request):
|
|||
classifier_titles=classifier_titles,
|
||||
classifier_tags=classifier_tags)
|
||||
|
||||
|
||||
# Just need to format stories
|
||||
for story in stories:
|
||||
story['read_status'] = 0
|
||||
if read_filter == 'all' and story['id'] in userstories:
|
||||
story['read_status'] = 1
|
||||
else:
|
||||
story['read_status'] = 0
|
||||
story_date = localtime_for_timezone(story['story_date'], user.profile.timezone)
|
||||
story['short_parsed_date'] = format_story_link_date__short(story_date, now)
|
||||
story['long_parsed_date'] = format_story_link_date__long(story_date, now)
|
||||
|
|
|
@ -1707,11 +1707,11 @@ background: transparent;
|
|||
position: absolute;
|
||||
}
|
||||
|
||||
#story_pane .NB-story-iframe {
|
||||
#story_pane .NB-text-view {
|
||||
left: 200%;
|
||||
top: 0;
|
||||
}
|
||||
#story_pane .NB-text-view {
|
||||
#story_pane .NB-story-iframe {
|
||||
left: 300%;
|
||||
top: 0;
|
||||
}
|
||||
|
@ -3226,7 +3226,7 @@ background: transparent;
|
|||
.NB-taskbar .NB-task-view-switch-arrow {
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
right: -8px;
|
||||
left: -8px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background: transparent url('/media/embed/icons/silk/arrow_switch.png') no-repeat center 0px;
|
||||
|
|
|
@ -536,8 +536,8 @@ NEWSBLUR.AssetModel = Backbone.Router.extend({
|
|||
this.make_request('/reader/river_stories', {
|
||||
feeds: feeds,
|
||||
page: page,
|
||||
order: this.view_setting(feed_id, 'order')
|
||||
// read_filter: this.view_setting(feed_id, 'read_filter')
|
||||
order: this.view_setting(feed_id, 'order'),
|
||||
read_filter: this.view_setting(feed_id, 'read_filter')
|
||||
}, pre_callback, error_callback, {
|
||||
'ajax_group': (page ? 'feed_page' : 'feed'),
|
||||
'request_type': 'GET'
|
||||
|
|
|
@ -228,6 +228,18 @@ NEWSBLUR.Collections.Folders = Backbone.Collection.extend({
|
|||
}
|
||||
});
|
||||
},
|
||||
|
||||
feeds_with_unreads: function(options) {
|
||||
options = options || {};
|
||||
|
||||
return _.compact(_.flatten(this.map(function(item) {
|
||||
if (item.is_feed()) {
|
||||
return item.feed.has_unreads(options) && item.feed;
|
||||
} else if (item.is_folder()) {
|
||||
return item.folders.feeds_with_unreads(options);
|
||||
}
|
||||
})));
|
||||
},
|
||||
|
||||
propagate_feed_selected: function() {
|
||||
if (this.parent_folder) {
|
||||
|
|
|
@ -1404,7 +1404,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
var feeds = this.list_feeds_with_unreads_in_folder($folder, false, true);
|
||||
var feeds = this.list_feeds_with_unreads_in_folder(this.active_folder.folders, false, true);
|
||||
this.cache['river_feeds_with_unreads'] = feeds;
|
||||
this.hide_stories_error();
|
||||
this.show_stories_progress_bar(feeds.length);
|
||||
|
@ -1452,29 +1452,28 @@
|
|||
}
|
||||
},
|
||||
|
||||
list_feeds_with_unreads_in_folder: function($folder, counts_only, visible_only) {
|
||||
list_feeds_with_unreads_in_folder: function(folder, counts_only, visible_only) {
|
||||
var model = this.model;
|
||||
var unread_view = this.get_unread_view_name();
|
||||
$folder = $folder || this.$s.$feed_list;
|
||||
folder = folder || this.active_folder.folders;
|
||||
|
||||
var $feeds = $('.feed:not(.NB-empty)', $folder);
|
||||
var feeds = _.compact(_.map($('.feed:not(.NB-empty)', $folder), function(o) {
|
||||
var feed_id = parseInt($(o).data('id'), 10);
|
||||
var feed = model.get_feed(feed_id);
|
||||
if (!feed) {
|
||||
return;
|
||||
} else if (counts_only && !visible_only) {
|
||||
if (!folder || folder.get('fake')) {
|
||||
folder = NEWSBLUR.assets.folders;
|
||||
}
|
||||
|
||||
var feeds = _.compact(_.map(folder.feeds_with_unreads(), function(feed) {
|
||||
if (counts_only && !visible_only) {
|
||||
return feed.get('ps') + feed.get('nt') + feed.get('ng');
|
||||
} else if (counts_only && visible_only) {
|
||||
if (unread_view == 'positive') return feed.get('ps');
|
||||
if (unread_view == 'neutral') return feed.get('ps') + feed.get('nt');
|
||||
if (unread_view == 'negative') return feed.get('ps') + feed.get('nt') + feed.get('ng');
|
||||
} else if (!counts_only && visible_only) {
|
||||
if (unread_view == 'positive') return feed.get('ps') && feed_id;
|
||||
if (unread_view == 'neutral') return (feed.get('ps') || feed.get('nt')) && feed_id;
|
||||
if (unread_view == 'negative') return (feed.get('ps') || feed.get('nt') || feed.get('ng')) && feed_id;
|
||||
if (unread_view == 'positive') return feed.get('ps') && feed.id;
|
||||
if (unread_view == 'neutral') return (feed.get('ps') || feed.get('nt')) && feed.id;
|
||||
if (unread_view == 'negative') return (feed.get('ps') || feed.get('nt') || feed.get('ng')) && feed.id;
|
||||
} else {
|
||||
return (feed.get('ps') || feed.get('nt') || feed.get('ng')) && feed_id;
|
||||
return (feed.get('ps') || feed.get('nt') || feed.get('ng')) && feed.id;
|
||||
}
|
||||
}));
|
||||
|
||||
|
@ -1759,7 +1758,10 @@
|
|||
NEWSBLUR.app.original_tab_view.iframe_not_busting();
|
||||
this.model.flags['no_more_stories'] = true;
|
||||
|
||||
message = message || "Oh no! <br> There was an error!";
|
||||
if (!message || message == 'error') {
|
||||
message = "Oh no! <br> There was an error!";
|
||||
}
|
||||
|
||||
if (data && data.status) {
|
||||
if (data.status == 502) {
|
||||
message = "NewsBlur is down right now. <br> Try again soon.";
|
||||
|
@ -2345,8 +2347,8 @@
|
|||
var $taskbar_buttons = $('.NB-taskbar .task_button_view');
|
||||
var $feed_view = this.$s.$feed_view;
|
||||
var $feed_iframe = this.$s.$feed_iframe;
|
||||
var $page_to_feed_arrow = $('.NB-taskbar .NB-task-view-page-to-feed-arrow');
|
||||
var $feed_to_story_arrow = $('.NB-taskbar .NB-task-view-feed-to-story-arrow');
|
||||
var $to_feed_arrow = $('.NB-taskbar .NB-task-view-to-feed-arrow');
|
||||
var $to_story_arrow = $('.NB-taskbar .NB-task-view-to-story-arrow');
|
||||
var $to_text_arrow = $('.NB-taskbar .NB-task-view-to-text-arrow');
|
||||
|
||||
if (!options.skip_save_type && this.story_view != view) {
|
||||
|
@ -2354,17 +2356,17 @@
|
|||
}
|
||||
|
||||
this.hide_stories_error();
|
||||
$page_to_feed_arrow.hide();
|
||||
$feed_to_story_arrow.hide();
|
||||
$to_feed_arrow.hide();
|
||||
$to_story_arrow.hide();
|
||||
$to_text_arrow.hide();
|
||||
this.flags['page_view_showing_feed_view'] = false;
|
||||
this.flags['feed_view_showing_story_view'] = false;
|
||||
this.flags['temporary_story_view'] = false;
|
||||
if (options.skip_save_type == 'page') {
|
||||
$page_to_feed_arrow.show();
|
||||
$to_feed_arrow.show();
|
||||
this.flags['page_view_showing_feed_view'] = true;
|
||||
} else if (options.skip_save_type == 'story') {
|
||||
$feed_to_story_arrow.show();
|
||||
$to_story_arrow.show();
|
||||
this.flags['feed_view_showing_story_view'] = true;
|
||||
} else if (options.skip_save_type == 'text') {
|
||||
$to_text_arrow.show();
|
||||
|
@ -2413,7 +2415,7 @@
|
|||
});
|
||||
|
||||
NEWSBLUR.app.story_list.reset_story_positions();
|
||||
} else if (view == 'story') {
|
||||
} else if (view == 'text') {
|
||||
$story_pane.animate({
|
||||
'left': -2 * $feed_iframe.width()
|
||||
}, {
|
||||
|
@ -2421,11 +2423,11 @@
|
|||
'duration': this.model.preference('animations') ? 550 : 0,
|
||||
'queue': false
|
||||
});
|
||||
NEWSBLUR.app.story_tab_view.load_story_iframe();
|
||||
NEWSBLUR.app.text_tab_view.load_story();
|
||||
if (!this.active_story) {
|
||||
this.show_next_story(1);
|
||||
}
|
||||
} else if (view == 'text') {
|
||||
} else if (view == 'story') {
|
||||
$story_pane.animate({
|
||||
'left': -3 * $feed_iframe.width()
|
||||
}, {
|
||||
|
@ -2433,7 +2435,7 @@
|
|||
'duration': this.model.preference('animations') ? 550 : 0,
|
||||
'queue': false
|
||||
});
|
||||
NEWSBLUR.app.text_tab_view.load_story();
|
||||
NEWSBLUR.app.story_tab_view.load_story_iframe();
|
||||
if (!this.active_story) {
|
||||
this.show_next_story(1);
|
||||
}
|
||||
|
@ -2451,20 +2453,20 @@
|
|||
// view = 'page';
|
||||
} else if ($active.hasClass('task_view_feed')) {
|
||||
view = 'page';
|
||||
} else if ($active.hasClass('task_view_story')) {
|
||||
view = 'feed';
|
||||
} else if ($active.hasClass('task_view_text')) {
|
||||
view = 'story';
|
||||
view = 'feed';
|
||||
} else if ($active.hasClass('task_view_story')) {
|
||||
view = 'text';
|
||||
}
|
||||
} else if (direction == 1) {
|
||||
if ($active.hasClass('task_view_page')) {
|
||||
view = 'feed';
|
||||
} else if ($active.hasClass('task_view_feed')) {
|
||||
view = 'story';
|
||||
} else if ($active.hasClass('task_view_story')) {
|
||||
view = 'text';
|
||||
} else if ($active.hasClass('task_view_text')) {
|
||||
// view = 'story';
|
||||
view = 'story';
|
||||
} else if ($active.hasClass('task_view_story')) {
|
||||
// view = 'text';
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2834,7 +2836,11 @@
|
|||
$.make('ul', { className: 'segmented-control NB-menu-manage-view-setting-order' }, [
|
||||
$.make('li', { className: 'NB-view-setting-order-newest NB-active' }, 'Newest first'),
|
||||
$.make('li', { className: 'NB-view-setting-order-oldest' }, 'Oldest')
|
||||
])
|
||||
]),
|
||||
(NEWSBLUR.Globals.is_admin && $.make('ul', { className: 'segmented-control NB-menu-manage-view-setting-readfilter' }, [
|
||||
$.make('li', { className: 'NB-view-setting-readfilter-all NB-active' }, 'All stories'),
|
||||
$.make('li', { className: 'NB-view-setting-readfilter-unread' }, 'Unread only')
|
||||
]))
|
||||
]),
|
||||
$.make('li', { className: 'NB-menu-separator' }),
|
||||
$.make('li', { className: 'NB-menu-item NB-menu-manage-move NB-menu-manage-folder-move' }, [
|
||||
|
@ -3698,7 +3704,6 @@
|
|||
|
||||
get_unread_count: function(visible_only, feed_id) {
|
||||
var total = 0;
|
||||
var $folder;
|
||||
feed_id = feed_id || this.active_feed;
|
||||
var feed = this.model.get_feed(feed_id);
|
||||
|
||||
|
@ -3719,12 +3724,7 @@
|
|||
}
|
||||
return total;
|
||||
} else if (this.flags['river_view'] && !this.flags['social_view']) {
|
||||
if (feed_id == 'river:') {
|
||||
$folder = this.$s.$feed_list;
|
||||
} else {
|
||||
$folder = $('li.folder.NB-selected');
|
||||
}
|
||||
var counts = this.list_feeds_with_unreads_in_folder($folder, true, visible_only);
|
||||
var counts = this.list_feeds_with_unreads_in_folder(this.active_folder.folders, true, visible_only);
|
||||
return _.reduce(counts, function(m, c) { return m + c; }, 0);
|
||||
} else if (this.flags['river_view'] && this.flags['social_view']) {
|
||||
var unread_score = this.get_unread_view_score();
|
||||
|
|
|
@ -166,15 +166,7 @@
|
|||
<div class="task_button_background"></div>
|
||||
<div class="NB-task-image"></div>
|
||||
<span class="NB-task-title">Feed</span>
|
||||
<div class="NB-task-view-switch-arrow NB-task-view-feed-to-story-arrow"></div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="task_button task_button_view task_view_story">
|
||||
<div class="NB-task-button-wrapper">
|
||||
<div class="task_button_background"></div>
|
||||
<div class="NB-task-image"></div>
|
||||
<span class="NB-task-title">Story</span>
|
||||
<div class="NB-task-view-switch-arrow NB-task-view-to-text-arrow"></div>
|
||||
<div class="NB-task-view-switch-arrow NB-task-view-to-feed-arrow"></div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="task_button task_button_view task_view_text">
|
||||
|
@ -182,6 +174,15 @@
|
|||
<div class="task_button_background"></div>
|
||||
<div class="NB-task-image"></div>
|
||||
<span class="NB-task-title">Text</span>
|
||||
<div class="NB-task-view-switch-arrow NB-task-view-to-text-arrow"></div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="task_button task_button_view task_view_story">
|
||||
<div class="NB-task-button-wrapper">
|
||||
<div class="task_button_background"></div>
|
||||
<div class="NB-task-image"></div>
|
||||
<span class="NB-task-title">Story</span>
|
||||
<div class="NB-task-view-switch-arrow NB-task-view-to-story-arrow"></div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -233,10 +234,10 @@
|
|||
<div class="NB-feed-story-view-floater"></div>
|
||||
<ul class="NB-feed-stories"></ul>
|
||||
</div>
|
||||
<iframe id="story_iframe" class="NB-story-iframe"></iframe>
|
||||
<div class="NB-text-view">
|
||||
<div class="NB-text-view-detail"></div>
|
||||
</div>
|
||||
<iframe id="story_iframe" class="NB-story-iframe"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue