Handle redirection when adding a torrent by url
This commit is contained in:
parent
a0f9689664
commit
32b41fabd6
|
@ -41,6 +41,12 @@ import base64
|
|||
import logging
|
||||
import threading
|
||||
import tempfile
|
||||
from urlparse import urljoin
|
||||
|
||||
from twisted.internet import reactor, defer
|
||||
from twisted.internet.task import LoopingCall
|
||||
import twisted.web.client
|
||||
import twisted.web.error
|
||||
|
||||
from deluge.httpdownloader import download_file
|
||||
|
||||
|
@ -241,9 +247,13 @@ class Core(component.Component):
|
|||
return self.add_torrent_file(filename, base64.encodestring(data), options)
|
||||
|
||||
def on_download_fail(failure):
|
||||
if failure.check(twisted.web.client.PartialDownloadError):
|
||||
if failure.check(twisted.web.error.PageRedirect):
|
||||
new_url = urljoin(url, failure.getErrorMessage().split(" to ")[1])
|
||||
result = download_file(new_url, tempfile.mkstemp()[1], headers=headers, force_filename=True)
|
||||
result.addCallbacks(on_download_success, on_download_fail)
|
||||
elif failure.check(twisted.web.client.PartialDownloadError):
|
||||
result = download_file(url, tempfile.mkstemp()[1], headers=headers, force_filename=True,
|
||||
allow_compression=False)
|
||||
allow_compression=False)
|
||||
result.addCallbacks(on_download_success, on_download_fail)
|
||||
else:
|
||||
# Log the error and pass the failure onto the client
|
||||
|
|
|
@ -66,6 +66,16 @@ class CoreTestCase(unittest.TestCase):
|
|||
|
||||
return d
|
||||
|
||||
def test_add_torrent_url_with_redirect(self):
|
||||
url = "http://deluge-torrent.org/test_torrent.php?test=redirect"
|
||||
options = {}
|
||||
info_hash = "60d5d82328b4547511fdeac9bf4d0112daa0ce00"
|
||||
|
||||
d = self.core.add_torrent_url(url, options)
|
||||
d.addCallback(self.assertEquals, info_hash)
|
||||
|
||||
return d
|
||||
|
||||
def test_add_torrent_url_with_partial_download(self):
|
||||
url = "http://deluge-torrent.org/test_torrent.php?test=partial"
|
||||
options = {}
|
||||
|
|
|
@ -43,10 +43,12 @@ import gobject
|
|||
import base64
|
||||
import logging
|
||||
import os
|
||||
from urlparse import urljoin
|
||||
|
||||
import pkg_resources
|
||||
|
||||
import twisted.web.client
|
||||
import twisted.web.error
|
||||
from deluge.ui.client import client
|
||||
from deluge.httpdownloader import download_file
|
||||
import deluge.component as component
|
||||
|
@ -656,7 +658,11 @@ class AddTorrentDialog(component.Component):
|
|||
dialog.destroy()
|
||||
|
||||
def on_download_fail(result):
|
||||
if result.check(twisted.web.client.PartialDownloadError):
|
||||
if result.check(twisted.web.error.PageRedirect):
|
||||
new_url = urljoin(url, result.getErrorMessage().split(" to ")[1])
|
||||
result = download_file(new_url, tmp_file, on_part)
|
||||
result.addCallbacks(on_download_success, on_download_fail)
|
||||
elif result.check(twisted.web.client.PartialDownloadError):
|
||||
result = download_file(url, tmp_file, on_part, allow_compression=False)
|
||||
result.addCallbacks(on_download_success, on_download_fail)
|
||||
else:
|
||||
|
|
|
@ -40,12 +40,14 @@ import shutil
|
|||
import logging
|
||||
import hashlib
|
||||
import tempfile
|
||||
from urlparse import urljoin
|
||||
|
||||
from types import FunctionType
|
||||
from twisted.internet import reactor
|
||||
from twisted.internet.defer import Deferred, DeferredList
|
||||
from twisted.web import http, resource, server
|
||||
import twisted.web.client
|
||||
import twisted.web.error
|
||||
|
||||
from deluge import common, component, httpdownloader
|
||||
from deluge.configmanager import ConfigManager, get_config_dir
|
||||
|
@ -645,7 +647,11 @@ class WebApi(JSONComponent):
|
|||
return result
|
||||
|
||||
def on_download_fail(result):
|
||||
if result.check(twisted.web.client.PartialDownloadError):
|
||||
if result.check(twisted.web.error.PageRedirect):
|
||||
new_url = urljoin(url, result.getErrorMessage().split(" to ")[1])
|
||||
result = httpdownloader.download_file(new_url, tmp_file, headers=headers)
|
||||
result.addCallbacks(on_download_success, on_download_fail)
|
||||
elif result.check(twisted.web.client.PartialDownloadError):
|
||||
result = httpdownloader.download_file(url, tmp_file, headers=headers,
|
||||
allow_compression=False)
|
||||
result.addCallbacks(on_download_success, on_download_fail)
|
||||
|
|
Loading…
Reference in New Issue