mirror of
https://github.com/codex-storage/deluge.git
synced 2025-02-25 09:35:16 +00:00
Add TorrentInfo class and use it in AddTorrentDialog
This commit is contained in:
parent
5af5749065
commit
1f0a6eb75e
@ -36,6 +36,53 @@ from sha import sha
|
|||||||
from deluge import bencode
|
from deluge import bencode
|
||||||
from deluge.log import LOG as log
|
from deluge.log import LOG as log
|
||||||
|
|
||||||
|
class TorrentInfo(object):
|
||||||
|
def __init__(self, filename):
|
||||||
|
# Get the torrent data from the torrent file
|
||||||
|
try:
|
||||||
|
log.debug("Attempting to open %s.", filename)
|
||||||
|
self.__m_metadata = bencode.bdecode(open(filename, "rb").read())
|
||||||
|
except Exception, e:
|
||||||
|
log.warning("Unable to open %s: %s", filename, e)
|
||||||
|
|
||||||
|
self.__m_info_hash = sha(bencode.bencode(self.__m_metadata["info"])).hexdigest()
|
||||||
|
|
||||||
|
# Get list of files from torrent info
|
||||||
|
self.__m_files = []
|
||||||
|
if self.__m_metadata["info"].has_key("files"):
|
||||||
|
prefix = ""
|
||||||
|
if len(self.__m_metadata["info"]["files"]) > 1:
|
||||||
|
prefix = self.__m_metadata["info"]["name"]
|
||||||
|
|
||||||
|
for f in self.__m_metadata["info"]["files"]:
|
||||||
|
self.__m_files.append({
|
||||||
|
'path': os.path.join(prefix, *f["path"]),
|
||||||
|
'size': f["length"],
|
||||||
|
'download': True
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
self.__m_files.append({
|
||||||
|
"path": self.__m_metadata["info"]["name"],
|
||||||
|
"size": self.__m_metadata["info"]["length"],
|
||||||
|
"download": True
|
||||||
|
})
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
return self.__m_metadata["info"]["name"]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def info_hash(self):
|
||||||
|
return self.__m_info_hash
|
||||||
|
|
||||||
|
@property
|
||||||
|
def files(self):
|
||||||
|
return self.__m_files
|
||||||
|
|
||||||
|
@property
|
||||||
|
def metadata(self):
|
||||||
|
return self.__m_metadata
|
||||||
|
|
||||||
def get_torrent_info(filename):
|
def get_torrent_info(filename):
|
||||||
"""
|
"""
|
||||||
Return the metadata of a torrent file
|
Return the metadata of a torrent file
|
||||||
|
@ -45,6 +45,7 @@ import deluge.ui.gtkui.listview as listview
|
|||||||
from deluge.configmanager import ConfigManager
|
from deluge.configmanager import ConfigManager
|
||||||
from deluge.log import LOG as log
|
from deluge.log import LOG as log
|
||||||
import deluge.common
|
import deluge.common
|
||||||
|
import deluge.ui.common
|
||||||
|
|
||||||
class AddTorrentDialog(component.Component):
|
class AddTorrentDialog(component.Component):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -179,51 +180,18 @@ class AddTorrentDialog(component.Component):
|
|||||||
break
|
break
|
||||||
|
|
||||||
def add_from_files(self, filenames):
|
def add_from_files(self, filenames):
|
||||||
import deluge.bencode
|
|
||||||
import os.path
|
import os.path
|
||||||
new_row = None
|
new_row = None
|
||||||
|
|
||||||
for filename in filenames:
|
for filename in filenames:
|
||||||
# Get the torrent data from the torrent file
|
# Get the torrent data from the torrent file
|
||||||
try:
|
info = deluge.ui.common.TorrentInfo(filename)
|
||||||
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)
|
|
||||||
continue
|
|
||||||
|
|
||||||
from sha import sha
|
name = "%s (%s)" % (info.name, os.path.split(filename)[-1])
|
||||||
info_hash = sha(deluge.bencode.bencode(metadata["info"])).hexdigest()
|
|
||||||
|
|
||||||
if info_hash in self.infos:
|
|
||||||
log.debug("Torrent already in list!")
|
|
||||||
continue
|
|
||||||
|
|
||||||
# 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
|
|
||||||
})
|
|
||||||
|
|
||||||
name = "%s (%s)" % (metadata["info"]["name"], os.path.split(filename)[-1])
|
|
||||||
new_row = self.torrent_liststore.append(
|
new_row = self.torrent_liststore.append(
|
||||||
[info_hash, name, filename])
|
[info.info_hash, info.name, filename])
|
||||||
self.files[info_hash] = files
|
self.files[info.info_hash] = info.files
|
||||||
self.infos[info_hash] = metadata
|
self.infos[info.info_hash] = info.metadata
|
||||||
|
|
||||||
(model, row) = self.listview_torrents.get_selection().get_selected()
|
(model, row) = self.listview_torrents.get_selection().get_selected()
|
||||||
if not row and new_row:
|
if not row and new_row:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user