mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-08-31 21:41:33 +00:00
Showing OPML errors and fixing unicode decode error by sanitizing OPML uploads.
This commit is contained in:
parent
687c044b10
commit
4b5fce6ce7
3 changed files with 30 additions and 21 deletions
|
@ -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)
|
||||
|
|
|
@ -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)))
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Add table
Reference in a new issue