Fix bug with webseeds
Fix ...
Content-type: text/plain
Author: andar
Revision: 5677
Log:
Use piece_sizes in KiBs
Fix bug with webseeds
Fix bug with multi-level directories
Diff:
Modified: trunk/deluge/maketorrent.py
===================================================================
--- trunk/deluge/maketorrent.py 2009-08-18 22:19:09 UTC (rev 5676)
+++ trunk/deluge/maketorrent.py 2009-08-19 01:45:55 UTC (rev 5677)
@@ -72,7 +72,7 @@
self.__comment = ""
self.__private = False
self.__trackers = []
- self.__web_seeds = []
+ self.__webseeds = []
self.__pad_files = False
def save(self, torrent_path, progress=None):
@@ -123,17 +123,19 @@
datasize = get_path_size(self.data_path)
- if not self.piece_size:
+ if self.piece_size:
+ piece_size = piece_size * 1024
+ else:
# We need to calculate a piece size
psize = 16384
- while (datasize / psize) > 1024:
+ while (datasize / psize) > 1024 and psize < 8192 * 1024:
psize *= 2
- self.piece_size = psize
+ piece_size = psize / 1024
# Calculate the number of pieces we will require for the data
- num_pieces = datasize / self.piece_size
- torrent["info"]["piece length"] = self.piece_size
+ num_pieces = datasize / piece_size
+ torrent["info"]["piece length"] = piece_size
# Create the info
if os.path.isdir(self.data_path):
@@ -144,7 +146,8 @@
for (dirpath, dirnames, filenames) in os.walk(self.data_path):
for index, filename in enumerate(filenames):
size = get_path_size(os.path.join(self.data_path, dirpath,
filename))
- p = dirpath.lstrip(self.data_path)
+ p = dirpath[len(self.data_path):]
+ p = p.lstrip("/")
p = p.split("/")
if p[0]:
p += [filename]
@@ -153,14 +156,13 @@
files.append((size, p))
# Add a padding file if necessary
if self.pad_files and (index + 1) < len(filenames):
- left = size % self.piece_size
+ left = size % piece_size
if left:
p = list(p)
p[-1] = "_____padding_file_" + str(padding_count)
- files.append((self.piece_size - left, p))
+ files.append((piece_size - left, p))
padding_count += 1
-
# Run the progress function with 0 completed pieces
if progress:
progress(0, num_pieces)
@@ -179,10 +181,10 @@
fs[-1]["attr"] = "p"
else:
fd = open(os.path.join(self.data_path, *path), "rb")
- r = fd.read(self.piece_size - len(buf))
+ r = fd.read(piece_size - len(buf))
while r:
buf += r
- if len(buf) == self.piece_size:
+ if len(buf) == piece_size:
pieces.append(sha(buf).digest())
# Run the progress function if necessary
if progress:
@@ -190,7 +192,7 @@
buf = ""
else:
break
- r = fd.read(self.piece_size - len(buf))
+ r = fd.read(piece_size - len(buf))
fd.close()
if buf:
@@ -208,13 +210,13 @@
pieces = []
fd = open(self.data_path, "rb")
- r = fd.read(self.piece_size)
+ r = fd.read(piece_size)
while r:
pieces.append(sha(r).digest())
if progress:
progress(len(pieces), num_pieces)
- r = fd.read(self.piece_size)
+ r = fd.read(piece_size)
torrent["info"]["pieces"] = "".join(pieces)
@@ -238,7 +240,7 @@
"""
if os.path.exists(path) and (os.path.isdir(path) or
os.path.isfile(path)):
- self.__data_path = path
+ self.__data_path = os.path.abspath(path)
else:
raise InvalidPath("No such file or directory: %s" % path)
@@ -246,21 +248,22 @@
"""
The size of pieces in bytes. The size must be a multiple of 16KiB.
If you don't set a piece size, one will be automatically selected to
- produce a torrent with less than 1024 pieces.
+ produce a torrent with less than 1024 pieces or the smallest possible
+ with a 8192KiB piece size.
"""
return self.__piece_size
def set_piece_size(self, size):
"""
- :param size: the desired piece size in bytes
+ :param size: the desired piece size in KiBs
:type size: int
- :raises InvalidPieceSize: if the piece size is not a multiple of 16KiB
+ :raises InvalidPieceSize: if the piece size is not a multiple of 16 KiB
"""
- if size % 16384 and size:
- raise InvalidPieceSize("Piece size must be a multiple of 16384")
+ if size % 16 and size:
+ raise InvalidPieceSize("Piece size must be a multiple of 16 KiB")
self.__piece_size = size
def get_comment(self):
@@ -320,7 +323,7 @@
If the url ends in '.php' then it will be considered Hoffman-style, if
not it will be considered GetRight-style.
"""
- return self.__web_seeds
+ return self.__webseeds
def set_webseeds(self, webseeds):
"""
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"deluge-commit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/deluge-commit?hl=en
-~----------~----~----~----~------~----~------~--~---