Add existing bigfiles to piecefield if they were downloaded outside of ZeroNet
This commit is contained in:
parent
fbc10b8e32
commit
1189c76691
2 changed files with 22 additions and 6 deletions
|
@ -324,6 +324,12 @@ class ContentManagerPlugin(object):
|
|||
# Only add to site size on first request
|
||||
if hash in self.hashfield:
|
||||
size = 0
|
||||
elif size > 1024 * 1024:
|
||||
file_info = self.getFileInfo(inner_path)
|
||||
if file_info: # We already have the file, but not in piecefield
|
||||
sha512 = file_info["sha512"]
|
||||
if sha512 not in self.site.storage.piecefields:
|
||||
self.site.storage.checkBigfile(inner_path)
|
||||
|
||||
return super(ContentManagerPlugin, self).optionalDownloaded(inner_path, hash, size, own)
|
||||
|
||||
|
@ -399,12 +405,10 @@ class SiteStoragePlugin(object):
|
|||
del content
|
||||
self.onUpdated(inner_path)
|
||||
|
||||
def openBigfile(self, inner_path, prebuffer=0):
|
||||
def checkBigfile(self, inner_path):
|
||||
file_info = self.site.content_manager.getFileInfo(inner_path)
|
||||
if not file_info or (file_info and "piecemap" not in file_info): # It's not a big file
|
||||
return False
|
||||
|
||||
self.site.needFile(inner_path, blocking=False) # Download piecemap
|
||||
file_path = self.getPath(inner_path)
|
||||
sha512 = file_info["sha512"]
|
||||
piece_num = int(math.ceil(float(file_info["size"]) / file_info["piece_size"]))
|
||||
|
@ -419,7 +423,13 @@ class SiteStoragePlugin(object):
|
|||
else:
|
||||
self.log.debug("Creating bigfile: %s" % inner_path)
|
||||
self.createSparseFile(inner_path, file_info["size"], sha512)
|
||||
self.piecefields[sha512].fromstring(piece_data * "0")
|
||||
self.piecefields[sha512].fromstring("0" * piece_num)
|
||||
return True
|
||||
|
||||
def openBigfile(self, inner_path, prebuffer=0):
|
||||
if not self.checkBigfile(inner_path):
|
||||
return False
|
||||
self.site.needFile(inner_path, blocking=False) # Download piecemap
|
||||
return BigFile(self.site, inner_path, prebuffer=prebuffer)
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue