add a couple of extra methods to be used by the ajax ui when adding
torrents
This commit is contained in:
parent
0037922d9e
commit
df680926ac
|
@ -81,8 +81,8 @@ class json_rpc:
|
||||||
* methods : http://dev.deluge-torrent.org/wiki/Development/UiClient#Remoteapi
|
* methods : http://dev.deluge-torrent.org/wiki/Development/UiClient#Remoteapi
|
||||||
"""
|
"""
|
||||||
#extra exposed methods
|
#extra exposed methods
|
||||||
json_exposed = ["update_ui","system_listMethods",
|
json_exposed = ["update_ui","system_listMethods", "download_torrent_from_url",
|
||||||
"get_webui_config","set_webui_config","get_webui_templates"]
|
"get_webui_config","set_webui_config","get_webui_templates", "get_torrent_info"]
|
||||||
cache = {}
|
cache = {}
|
||||||
|
|
||||||
def GET(self):
|
def GET(self):
|
||||||
|
@ -181,7 +181,77 @@ class json_rpc:
|
||||||
def get_webui_templates(self):
|
def get_webui_templates(self):
|
||||||
return render.get_templates()
|
return render.get_templates()
|
||||||
|
|
||||||
|
def download_torrent_from_url(self, url):
|
||||||
|
"""
|
||||||
|
input:
|
||||||
|
url: the url of the torrent to download
|
||||||
|
|
||||||
|
returns:
|
||||||
|
filename: the temporary file name of the torrent file
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
import urllib
|
||||||
|
import tempfile
|
||||||
|
tmp_file = os.path.join(tempfile.gettempdir(), url.split("/")[-1])
|
||||||
|
filename, headers = urllib.urlretrieve(url, tmp_file)
|
||||||
|
log.debug("filename: %s", filename)
|
||||||
|
return filename
|
||||||
|
|
||||||
|
def get_torrent_info(self, filename):
|
||||||
|
"""
|
||||||
|
Goal:
|
||||||
|
allow the webui to retrieve data about the torrent
|
||||||
|
|
||||||
|
input:
|
||||||
|
url: the url of the torrent to download
|
||||||
|
|
||||||
|
returns:
|
||||||
|
{
|
||||||
|
"name": the torrent name
|
||||||
|
"size": the total size of the torrent
|
||||||
|
"files": the files the torrent contains
|
||||||
|
"info_hash" the torrents info_hash
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
import deluge.bencode
|
||||||
|
|
||||||
|
# Get the torrent data from the torrent file
|
||||||
|
try:
|
||||||
|
log.debug("Attempting to open %s for add.", filename)
|
||||||
|
metadata = deluge.bencode.bdecode(open(filename, "rb").read())
|
||||||
|
except Exception, e:
|
||||||
|
log.warning("Unable to open %s: %s", filename, e)
|
||||||
|
|
||||||
|
from sha import sha
|
||||||
|
info_hash = sha(deluge.bencode.bencode(metadata["info"])).hexdigest()
|
||||||
|
|
||||||
|
# Get list of files from torrent info
|
||||||
|
files = []
|
||||||
|
if metadata["info"].has_key("files"):
|
||||||
|
prefix = ""
|
||||||
|
if len(metadata["info"]["files"]) > 1:
|
||||||
|
prefix = metadata["info"]["name"]
|
||||||
|
|
||||||
|
for f in metadata["info"]["files"]:
|
||||||
|
files.append({
|
||||||
|
'path': os.path.join(prefix, *f["path"]),
|
||||||
|
'size': f["length"],
|
||||||
|
'download': True
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
files.append({
|
||||||
|
"path": metadata["info"]["name"],
|
||||||
|
"size": metadata["info"]["length"],
|
||||||
|
"download": True
|
||||||
|
})
|
||||||
|
log.debug(metadata)
|
||||||
|
return {
|
||||||
|
"name": metadata["info"]["name"],
|
||||||
|
"size": metadata["info"]["length"],
|
||||||
|
"files": files,
|
||||||
|
"info_hash": info_hash
|
||||||
|
}
|
||||||
|
|
||||||
def register():
|
def register():
|
||||||
component.get("PageManager").register_page("/json/rpc",json_rpc)
|
component.get("PageManager").register_page("/json/rpc",json_rpc)
|
||||||
|
|
Loading…
Reference in New Issue