diff --git a/apps/api/views.py b/apps/api/views.py index 9abd8c9a4..ac235bf83 100644 --- a/apps/api/views.py +++ b/apps/api/views.py @@ -173,14 +173,18 @@ def check_share_on_site(request, token): except Profile.DoesNotExist: code = -1 + logging.user(request.user, "~FBFinding feed (check_share_on_site): %s" % rss_url) feed = Feed.get_feed_from_url(rss_url, create=False, fetch=False) if not feed: + logging.user(request.user, "~FBFinding feed (check_share_on_site): %s" % story_url) feed = Feed.get_feed_from_url(story_url, create=False, fetch=False) if not feed: parsed_url = urlparse.urlparse(story_url) base_url = "%s://%s%s" % (parsed_url.scheme, parsed_url.hostname, parsed_url.path) + logging.user(request.user, "~FBFinding feed (check_share_on_site): %s" % base_url) feed = Feed.get_feed_from_url(base_url, create=False, fetch=False) if not feed: + logging.user(request.user, "~FBFinding feed (check_share_on_site): %s" % (base_url + '/')) feed = Feed.get_feed_from_url(base_url+'/', create=False, fetch=False) if feed and user: @@ -271,8 +275,10 @@ def share_story(request, token=None): feed = Feed.get_by_id(feed_id) else: if rss_url: + logging.user(request.user, "~FBFinding feed (share_story): %s" % rss_url) feed = Feed.get_feed_from_url(rss_url, create=True, fetch=True) if not feed: + logging.user(request.user, "~FBFinding feed (share_story): %s" % story_url) feed = Feed.get_feed_from_url(story_url, create=True, fetch=True) if feed: feed_id = feed.pk diff --git a/apps/newsletters/models.py b/apps/newsletters/models.py index 25499429f..41ba62d24 100644 --- a/apps/newsletters/models.py +++ b/apps/newsletters/models.py @@ -61,7 +61,7 @@ class EmailNewsletter: "story_date": datetime.datetime.fromtimestamp(int(params['timestamp'])), "story_title": params['subject'], "story_content": story_content, - "story_author_name": escape(params['from']), + "story_author_name": params['from'], "story_permalink": reverse('newsletter-story', kwargs={'story_hash': story_hash}), "story_guid": params['signature'], diff --git a/apps/oauth/views.py b/apps/oauth/views.py index 1b5b8a5f3..f9f0f04b5 100644 --- a/apps/oauth/views.py +++ b/apps/oauth/views.py @@ -631,6 +631,7 @@ def api_share_new_story(request): story_author = fields.get('story_author', "") comments = fields.get('comments', None) + logging.user(request.user, "~FBFinding feed (api_share_new_story): %s" % story_url) original_feed = Feed.get_feed_from_url(story_url, create=True, fetch=True) story_hash = MStory.guid_hash_unsaved(story_url) if not user.profile.is_premium and MSharedStory.feed_quota(user.pk, original_feed and original_feed.pk or 0, story_hash): @@ -716,6 +717,7 @@ def api_save_new_story(request): user_tags = fields.get('user_tags', "") story = None + logging.user(request.user, "~FBFinding feed (api_save_new_story): %s" % story_url) original_feed = Feed.get_feed_from_url(story_url) if not story_content or not story_title: ti = TextImporter(feed=original_feed, story_url=story_url, request=request) diff --git a/apps/reader/views.py b/apps/reader/views.py index 0913fc7af..2b300356b 100644 --- a/apps/reader/views.py +++ b/apps/reader/views.py @@ -1860,6 +1860,7 @@ def delete_feed_by_url(request): if in_folder == ' ': in_folder = "" + logging.user(request.user, "~FBFinding feed (delete_feed_by_url): %s" % url) feed = Feed.get_feed_from_url(url, create=False) if feed: user_sub_folders = get_object_or_404(UserSubscriptionFolders, user=request.user) diff --git a/apps/rss_feeds/models.py b/apps/rss_feeds/models.py index 737969246..a9b767531 100644 --- a/apps/rss_feeds/models.py +++ b/apps/rss_feeds/models.py @@ -1205,6 +1205,7 @@ class Feed(models.Model): existing_story.story_permalink = story_link existing_story.story_guid = story.get('guid') existing_story.story_tags = story_tags + existing_story.original_text_z = None # Reset Text view cache # Do not allow publishers to change the story date once a story is published. # Leads to incorrect unread story counts. if replace_story_date: @@ -1365,7 +1366,7 @@ class Feed(models.Model): read_stories_last_month = sum([int(rs) for rs in read_stories_per_week if rs]) if read_stories_last_month == 0: original_cutoff = cutoff - cutoff = min(cutoff, 25) + cutoff = min(cutoff, 10) try: logging.debug(" ---> [%-30s] ~FBTrimming down to ~SB%s (instead of %s)~SN stories (~FM%s~FB)" % (self, cutoff, original_cutoff, self.last_story_date.strftime("%Y-%m-%d") if self.last_story_date else "No last story date")) except ValueError, e: diff --git a/apps/rss_feeds/views.py b/apps/rss_feeds/views.py index a8188335e..c8049f98a 100644 --- a/apps/rss_feeds/views.py +++ b/apps/rss_feeds/views.py @@ -32,14 +32,19 @@ IGNORE_AUTOCOMPLETE = [ "latitude", ] +@ajax_login_required @json.json_view def search_feed(request): address = request.REQUEST.get('address') offset = int(request.REQUEST.get('offset', 0)) if not address: return dict(code=-1, message="Please provide a URL/address.") - - feed = Feed.get_feed_from_url(address, create=False, aggressive=True, offset=offset) + + logging.user(request.user, "~FBFinding feed (search_feed): %s" % address) + ip = request.META.get('HTTP_X_FORWARDED_FOR', None) or request.META['REMOTE_ADDR'] + logging.user(request.user, "~FBIP: %s" % ip) + aggressive = request.user.is_authenticated() + feed = Feed.get_feed_from_url(address, create=False, aggressive=aggressive, offset=offset) if feed: return feed.canonical() else: @@ -244,7 +249,8 @@ def load_feed_settings(request, feed_id): stats['duplicate_addresses'] = feed.duplicate_addresses.all() return stats - + +@ratelimit(minutes=10, requests=10) @json.json_view def exception_retry(request): user = get_user(request) diff --git a/clients/android/NewsBlur/AndroidManifest.xml b/clients/android/NewsBlur/AndroidManifest.xml index ee677198f..80c779e2b 100644 --- a/clients/android/NewsBlur/AndroidManifest.xml +++ b/clients/android/NewsBlur/AndroidManifest.xml @@ -2,7 +2,7 @@ + android:versionName="4.8.0b1" > /g, '>'); + }, + formatted_short_date: function() { var timestamp = this.get('story_timestamp'); var dateformat = NEWSBLUR.assets.preference('dateformat'); diff --git a/media/js/newsblur/reader/reader_classifier.js b/media/js/newsblur/reader/reader_classifier.js index 38d734164..a2edc8738 100644 --- a/media/js/newsblur/reader/reader_classifier.js +++ b/media/js/newsblur/reader/reader_classifier.js @@ -495,10 +495,10 @@ var classifier_prototype = { ) ]) ])), - (story.get('story_authors') && $.make('div', { className: 'NB-modal-field NB-fieldset' }, [ + (story.story_authors() && $.make('div', { className: 'NB-modal-field NB-fieldset' }, [ $.make('h5', 'Story Author'), $.make('div', { className: 'NB-fieldset-fields NB-classifiers' }, - this.make_authors([story.get('story_authors')]) + this.make_authors([story.story_authors()]) ) ])), (story.get('story_tags').length && $.make('div', { className: 'NB-modal-field NB-fieldset' }, [ diff --git a/media/js/newsblur/views/feed_selector.js b/media/js/newsblur/views/feed_selector.js index 83ddd3146..97741eb8a 100644 --- a/media/js/newsblur/views/feed_selector.js +++ b/media/js/newsblur/views/feed_selector.js @@ -32,6 +32,8 @@ NEWSBLUR.Views.FeedSelector = Backbone.View.extend({ this.$el.show(); $input.val(''); $input.focus(); + NEWSBLUR.app.feed_list.options.feed_chooser = true; + NEWSBLUR.assets.feeds.trigger('reset'); $feed_list.addClass('NB-selector-active'); $social_feeds.addClass('NB-selector-active'); $body.addClass('NB-selector-active'); @@ -55,6 +57,8 @@ NEWSBLUR.Views.FeedSelector = Backbone.View.extend({ $input.blur(); this.$el.hide(); this.$next_feed = null; + NEWSBLUR.app.feed_list.options.feed_chooser = false; + NEWSBLUR.assets.feeds.trigger('reset'); $feed_list.removeClass('NB-selector-active'); $social_feeds.removeClass('NB-selector-active'); $body.removeClass('NB-selector-active'); diff --git a/media/js/newsblur/views/story_detail_view.js b/media/js/newsblur/views/story_detail_view.js index bfb94ec8b..da26ee74d 100644 --- a/media/js/newsblur/views/story_detail_view.js +++ b/media/js/newsblur/views/story_detail_view.js @@ -170,11 +170,11 @@ NEWSBLUR.Views.StoryDetailView = Backbone.View.extend({ <% } %>\ <%= story.formatted_long_date() %>\ \ - <% if (story.get("story_authors")) { %>\ + <% if (story.story_authors()) { %>\ \ <% } %>\ diff --git a/media/js/newsblur/views/story_title_view.js b/media/js/newsblur/views/story_title_view.js index c93898210..96435cf4c 100644 --- a/media/js/newsblur/views/story_title_view.js +++ b/media/js/newsblur/views/story_title_view.js @@ -64,7 +64,7 @@ NEWSBLUR.Views.StoryTitleView = Backbone.View.extend({
\
\ <%= story.get("story_title") %>\ - <%= story.get("story_authors") %>\ + <%= story.story_authors() %>\ <% if (show_content_preview) { %>\
<%= show_content_preview %>
\ <% } %>\ @@ -110,7 +110,7 @@ NEWSBLUR.Views.StoryTitleView = Backbone.View.extend({ \ \
\ - <%= story.get("story_authors") %>\ + <%= story.story_authors() %>\ \
\ <% if (story.get("comment_count_friends")) { %>\