diff --git a/apps/feed_import/models.py b/apps/feed_import/models.py index a37fd5aa2..e9ee7fae5 100644 --- a/apps/feed_import/models.py +++ b/apps/feed_import/models.py @@ -127,7 +127,8 @@ class OPMLImporter(Importer): def process(self): # self.clear_feeds() - outline = opml.from_string(str(self.opml_xml)) + + outline = opml.from_string(self.opml_xml) folders = self.get_folders() try: folders = self.process_outline(outline, folders) diff --git a/apps/feed_import/views.py b/apps/feed_import/views.py index 35f0cafdf..cb2ee7a71 100644 --- a/apps/feed_import/views.py +++ b/apps/feed_import/views.py @@ -35,33 +35,32 @@ def opml_upload(request): if 'file' in request.FILES: logging.user(request, "~FR~SBOPML upload starting...") file = request.FILES['file'] - xml_opml = file.read() + xml_opml = str(file.read().decode('utf-8', 'ignore')) try: - uploaded_opml = UploadedOPML.objects.create(user_id=request.user.pk, opml_file=xml_opml) + UploadedOPML.objects.create(user_id=request.user.pk, opml_file=xml_opml) except (UnicodeDecodeError, InvalidStringData): - uploaded_opml = None folders = None code = -1 message = "There was a Unicode decode error when reading your OPML file." - if uploaded_opml: - opml_importer = OPMLImporter(xml_opml, request.user) - try: - folders = opml_importer.try_processing() - except TimeoutError: - folders = None - ProcessOPML.delay(request.user.pk) - feed_count = opml_importer.count_feeds_in_opml() - logging.user(request, "~FR~SBOPML pload took too long, found %s feeds. Tasking..." % feed_count) - payload = dict(folders=folders, delayed=True, feed_count=feed_count) - code = 2 - message = "" - except AttributeError: - code = -1 - message = "OPML import failed. Couldn't parse XML file." - folders = None + opml_importer = OPMLImporter(xml_opml, request.user) + try: + folders = opml_importer.try_processing() + except TimeoutError: + folders = None + ProcessOPML.delay(request.user.pk) + feed_count = opml_importer.count_feeds_in_opml() + logging.user(request, "~FR~SBOPML pload took too long, found %s feeds. Tasking..." % feed_count) + payload = dict(folders=folders, delayed=True, feed_count=feed_count) + code = 2 + message = "" + except AttributeError: + code = -1 + message = "OPML import failed. Couldn't parse XML file." + folders = None if folders: + code = 1 feeds = UserSubscription.objects.filter(user=request.user).values() payload = dict(folders=folders, feeds=feeds) logging.user(request, "~FR~SBOPML Upload: ~SK%s~SN~SB~FR feeds" % (len(feeds))) diff --git a/media/js/newsblur/reader/reader_intro.js b/media/js/newsblur/reader/reader_intro.js index 40611f3b0..b162a700d 100644 --- a/media/js/newsblur/reader/reader_intro.js +++ b/media/js/newsblur/reader/reader_intro.js @@ -608,10 +608,14 @@ _.extend(NEWSBLUR.ReaderIntro.prototype, { $('.NB-intro-import-delayed', self.$modal).show(); $('.NB-intro-import-restart', self.$modal).hide(); $('.NB-intro-import-message', self.$modal).hide(); + } else if (data.code < 0) { + $('.NB-intro-import-delayed', self.$modal).hide(); + $('.NB-intro-import-restart', self.$modal).hide(); + $('.NB-intro-import-message', self.$modal).show().addClass('NB-error').text(data.message); } else { $('.NB-intro-import-delayed', self.$modal).hide(); $('.NB-intro-import-restart', self.$modal).show(); - $('.NB-intro-import-message', self.$modal).show().text("All done!"); + $('.NB-intro-import-message', self.$modal).show().removeClass('NB-error').text("All done!"); } }, this)); }, @@ -631,6 +635,7 @@ _.extend(NEWSBLUR.ReaderIntro.prototype, { dataType: 'json', success: function (data, status) { NEWSBLUR.assets.load_feeds(function() { + console.log(["opml upload", data, status]); $loading.removeClass('NB-active'); self.advance_import_carousel(2); if (data.payload.delayed) { @@ -639,6 +644,10 @@ _.extend(NEWSBLUR.ReaderIntro.prototype, { $('.NB-intro-import-delayed', self.$modal).show(); $('.NB-intro-import-restart', self.$modal).hide(); $('.NB-intro-import-message', self.$modal).hide(); + } else if (data.code < 0) { + $('.NB-intro-import-delayed', self.$modal).hide(); + $('.NB-intro-import-restart', self.$modal).show(); + $('.NB-intro-import-message', self.$modal).addClass('NB-error').show().text(data.message); } else { $('.NB-intro-import-message', self.$modal).text("All done!").removeClass('NB-error').show(); $('.NB-intro-import-delayed', self.$modal).hide();