Automatically loading intro or chooser dialog based on progress of new user.

This commit is contained in:
Samuel Clay 2012-03-12 12:33:54 -07:00
parent cb1bbe25bc
commit 41b68b32eb
7 changed files with 62 additions and 53 deletions

View file

@ -151,6 +151,9 @@ class OPMLImporter(Importer):
if self.user.profile.is_premium and not us.active:
us.active = True
us.save()
if not us.needs_unread_recalc:
us.needs_unread_recalc = True
us.save()
folders.append(feed_db.pk)
return folders
@ -245,6 +248,9 @@ class GoogleReaderImporter(Importer):
'active': self.user.profile.is_premium,
}
)
if not us.needs_unread_recalc:
us.needs_unread_recalc = True
us.save()
if not category: category = "Root"
folders[category].append(feed_db.pk)
except Exception, e:

View file

@ -142,10 +142,10 @@ class Feed(models.Model):
try:
super(Feed, self).save(*args, **kwargs)
return self
except IntegrityError, e:
except IntegrityError:
duplicate_feed = Feed.objects.filter(feed_address=self.feed_address, feed_link=self.feed_link)
logging.debug("%s: %s" % (self.feed_address, duplicate_feed))
logging.debug(' ***> [%-30s] Feed deleted. Could not save: %s' % (unicode(self)[:30], e))
logging.debug(' ***> [%-30s] Feed deleted.' % (unicode(self)[:30]))
if duplicate_feed:
merge_feeds(self.pk, duplicate_feed[0].pk)
return duplicate_feed[0]
@ -1375,8 +1375,8 @@ def merge_feeds(original_feed_id, duplicate_feed_id, force=False):
logging.info(" ---> Feed: [%s - %s] %s - %s" % (original_feed_id, duplicate_feed_id,
original_feed, original_feed.feed_link))
logging.info(" --> %s" % original_feed.feed_address)
logging.info(" --> %s" % duplicate_feed.feed_address)
logging.info(" --> %s / %s" % (original_feed.feed_address, original_feed.feed_link))
logging.info(" --> %s / %s" % (duplicate_feed.feed_address, duplicate_feed.feed_link))
user_subs = UserSubscription.objects.filter(feed=duplicate_feed)
for user_sub in user_subs:

View file

@ -873,21 +873,16 @@ body.NB-theme-serif #story_pane .NB-feed-story-content {
display: none;
margin: -2px 0 0;
}
#NB-progress .NB-progress-link a {
-moz-box-shadow:1px 1px 1px #202020;
-webkit-box-shadow:1px 1px 1px #202020;
box-shadow:1px 1px 1px #202020;
-moz-border-radius:4px;
#NB-progress .NB-progress-link .NB-modal-submit-button {
padding: 3px 0;
font-size: 15px;
width: 90%;
margin: 0 auto;
-moz-box-shadow:2px 2px 0px #404040;
-webkit-box-shadow:2px 2px 0px #404040;
box-shadow:2px 2px 0px #404040;
border-radius: 4px;
border:1px solid #606060;
font-size:12px;
margin:0 4px 0;
padding:0px 8px;
text-decoration:none;
text-transform:uppercase;
background-color: #217412;
color: #FFF;
border:1px solid #303030;
}
#NB-progress.NB-progress-error {
@ -5798,15 +5793,15 @@ background: transparent;
.NB-modal-feedchooser .NB-feedchooser-type {
float: left;
width: 345px;
margin: 24px 12px 0 0;
margin: 0 12px 0 0;
padding: 0 12px 0 0;
}
.NB-modal-feedchooser .NB-feedchooser-type.NB-last {
margin: 24px 0 0 0;
margin: 0 0 0 0;
padding: 0 0 0 24px;
margin-right: 0;
border-left: 1px solid #909090;
border-left: 1px solid #B0B0B0;
}
.NB-modal-feedchooser .NB-feedchooser-info {

View file

@ -42,7 +42,8 @@ NEWSBLUR.AssetModel.Reader = function() {
this.starred_count = 0;
this.read_stories_river_count = 0;
this.flags = {
'favicons_fetching': false
'favicons_fetching': false,
'has_chosen_feeds': false
};
};
@ -296,6 +297,8 @@ NEWSBLUR.AssetModel.Reader.prototype = {
}
});
}
self.detect_any_inactive_feeds();
callback();
};
@ -307,6 +310,12 @@ NEWSBLUR.AssetModel.Reader.prototype = {
this.make_request('/reader/feeds', data, pre_callback, error_callback, {request_type: 'GET'});
},
detect_any_inactive_feeds: function() {
this.flags['has_chosen_feeds'] = _.any(this.feeds, function(feed) {
return feed.active;
});
},
load_feeds_flat: function(callback, error_callback) {
var self = this;
var data = {

View file

@ -1081,7 +1081,6 @@
$feed_list.empty();
this.$s.$story_taskbar.css({'display': 'block'});
this.flags['has_chosen_feeds'] = this.detect_all_inactive_feeds();
var $feeds = this.make_feeds_folder(folders, 0);
$feed_list.css({
'display': 'block',
@ -1097,15 +1096,10 @@
$('.NB-task-manage').removeClass('NB-disabled');
$('.NB-callout-ftux').fadeOut(500);
}
if (NEWSBLUR.Globals.is_authenticated && this.flags['has_chosen_feeds']) {
this.open_dialog_after_feeds_loaded();
if (NEWSBLUR.Globals.is_authenticated && this.model.flags['has_chosen_feeds']) {
_.delay(_.bind(this.start_count_unreads_after_import, this), 1000);
this.force_feeds_refresh($.rescope(this.finish_count_unreads_after_import, this), true);
} else if (!this.flags['has_chosen_feeds'] && this.flags['favicons_downloaded'] && folders.length) {
_.defer(_.bind(this.open_feedchooser_modal, this), 100);
return;
} else if (NEWSBLUR.Globals.is_authenticated && !folders.length) {
this.setup_ftux_add_feed_callout();
}
if (folders.length) {
@ -1119,7 +1113,7 @@
this.force_feed_refresh();
}
_.defer(_.bind(function() {
this.model.load_feed_favicons($.rescope(this.make_feed_favicons, this), this.flags['favicons_downloaded'], this.flags['has_chosen_feeds']);
this.model.load_feed_favicons($.rescope(this.make_feed_favicons, this), this.flags['favicons_downloaded'], this.model.flags['has_chosen_feeds']);
var force_socket = NEWSBLUR.Globals.is_admin;
this.setup_socket_realtime_unread_counts(force_socket);
}, this));
@ -1162,9 +1156,7 @@
$feed_favicon.attr('src', $.favicon(model.get_feed(feed_id)));
});
if (!this.flags['has_chosen_feeds'] && this.model.folders.length) {
_.defer(_.bind(this.open_feedchooser_modal, this), 100);
}
this.open_dialog_after_feeds_loaded();
},
sort_items: function(a, b) {
@ -1218,14 +1210,6 @@
$('.folder', $feeds).tsort('.folder_title_text');
},
detect_all_inactive_feeds: function() {
var feeds = this.model.feeds;
var has_chosen_feeds = _.any(feeds, function(feed) {
return feed.active;
});
return has_chosen_feeds;
},
make_feeds_folder: function(items, depth, collapsed_parent) {
var self = this;
var $feeds = "";
@ -1619,7 +1603,9 @@
$('.NB-progress-counts', $progress).hide();
$('.NB-progress-percentage', $progress).hide();
$progress.addClass('NB-progress-error').addClass('NB-progress-big');
$('.NB-progress-link', $progress).html($.make('a', { href: '#', className: 'NB-splash-link NB-menu-manage-feedchooser' }, 'Choose your 64 sites'));
$('.NB-progress-link', $progress).html($.make('div', {
className: 'NB-modal-submit-button NB-modal-submit-green NB-menu-manage-feedchooser'
}, ['Choose your 64 sites']));
this.show_progress_bar();
},
@ -1632,6 +1618,16 @@
this.hide_progress_bar();
},
open_dialog_after_feeds_loaded: function() {
if (!NEWSBLUR.Globals.is_authenticated) return;
if (!this.model.folders.length) {
_.defer(_.bind(this.open_intro_modal, this), 100);
} else if (!this.model.flags['has_chosen_feeds'] && this.flags['favicons_downloaded'] && this.model.folders.length) {
_.defer(_.bind(this.open_feedchooser_modal, this), 100);
}
},
// ================
// = Progress Bar =
// ================
@ -6335,7 +6331,7 @@
var percentage = 0;
var feeds_count = _.keys(this.model.feeds).length;
if (!this.flags['pause_feed_refreshing']) return;
if (!this.flags['pause_feed_refreshing'] || this.flags['has_unfetched_feeds']) return;
this.flags['count_unreads_after_import_working'] = true;

View file

@ -30,7 +30,7 @@ NEWSBLUR.ReaderFeedchooser.prototype = {
var self = this;
this.$modal = $.make('div', { className: 'NB-modal-feedchooser NB-modal' }, [
$.make('h2', { className: 'NB-modal-title' }, 'Choose Your '+this.MAX_FEEDS),
// $.make('h2', { className: 'NB-modal-title' }, 'Choose Your '+this.MAX_FEEDS),
$.make('div', { className: 'NB-feedchooser-type'}, [
$.make('div', { className: 'NB-feedchooser-info'}, [
$.make('div', { className: 'NB-feedchooser-info-type' }, [
@ -73,7 +73,7 @@ NEWSBLUR.ReaderFeedchooser.prototype = {
]),
$.make('li', { className: 'NB-2' }, [
$.make('div', { className: 'NB-feedchooser-premium-bullet-image' }),
'Unlimited number of sites'
'Unlimited number of sites.'
]),
$.make('li', { className: 'NB-3' }, [
$.make('div', { className: 'NB-feedchooser-premium-bullet-image' }),
@ -81,16 +81,16 @@ NEWSBLUR.ReaderFeedchooser.prototype = {
]),
$.make('li', { className: 'NB-4' }, [
$.make('div', { className: 'NB-feedchooser-premium-bullet-image' }),
'Access to future premium-only features like searching, archives, and [top secret]'
'Access to future features like searching.'
]),
$.make('li', { className: 'NB-5' }, [
$.make('div', { className: 'NB-feedchooser-premium-bullet-image' }),
'You feed my poor, hungry dog for 6 days',
'You feed my poor, hungry dog for 6 days.',
$.make('img', { className: 'NB-feedchooser-premium-poor-hungry-dog', src: NEWSBLUR.Globals.MEDIA_URL + '/img/reader/shiloh.jpg' })
]),
$.make('li', { className: 'NB-6' }, [
$.make('div', { className: 'NB-feedchooser-premium-bullet-image' }),
'You are supporting an indie developer'
'You are supporting a solo indie developer.'
]),
$.make('li', { className: 'NB-7' }, [
$.make('div', { className: 'NB-feedchooser-premium-bullet-image' }),
@ -219,7 +219,7 @@ NEWSBLUR.ReaderFeedchooser.prototype = {
$('#simplemodal-container').corner('6px');
},
'onClose': function(dialog, callback) {
if (!self.flags['has_saved'] && !NEWSBLUR.reader.flags['has_chosen_feeds']) {
if (!self.flags['has_saved'] && !self.model.flags['has_chosen_feeds']) {
NEWSBLUR.reader.show_feed_chooser_button();
}
dialog.data.hide().empty().remove();

View file

@ -1,11 +1,11 @@
NEWSBLUR.ReaderIntro = function(options) {
var defaults = {};
var intro_page = this.model.preference('intro_page');
_.bindAll(this, 'close');
this.model = NEWSBLUR.AssetModel.reader();
this.options = $.extend({
'page_number': this.model.preference('intro_page') || 1
'page_number': intro_page && _.isNumber(intro_page) && intro_page <= 4 ? intro_page : 1
}, defaults, options);
this.services = {
'twitter': {},
@ -235,7 +235,10 @@ _.extend(NEWSBLUR.ReaderIntro.prototype, {
if (page_number == page_count) {
$('.NB-tutorial-next-page-text', this.$modal).text('All Done ');
} else if (page_number > page_count) {
return this.close();
this.close(function() {
NEWSBLUR.reader.open_dialog_after_feeds_loaded();
});
return;
} else if (page_number == 1) {
$('.NB-tutorial-next-page-text', this.$modal).text("Let's Get Started ");
} else {