ReceiveModeRequest should only deal with upload_ids for upload requests, not for other requests

This commit is contained in:
Micah Lee 2018-05-08 13:35:50 -07:00
parent eb3d6f2171
commit 841e47b234
No known key found for this signature in database
GPG key ID: 403C2657CD994F73

View file

@ -670,9 +670,6 @@ class ReceiveModeRequest(Request):
super(ReceiveModeRequest, self).__init__(environ, populate_request, shallow) super(ReceiveModeRequest, self).__init__(environ, populate_request, shallow)
self.web = environ['web'] self.web = environ['web']
# A dictionary that maps filenames to the bytes uploaded so far
self.progress = {}
# Is this a valid upload request? # Is this a valid upload request?
self.upload_request = False self.upload_request = False
if self.method == 'POST': if self.method == 'POST':
@ -683,34 +680,39 @@ class ReceiveModeRequest(Request):
if self.path == '/{}/upload'.format(self.web.slug): if self.path == '/{}/upload'.format(self.web.slug):
self.upload_request = True self.upload_request = True
# If this is an upload request, create an upload_id (attach it to the request) if self.upload_request:
self.upload_id = self.web.upload_count # A dictionary that maps filenames to the bytes uploaded so far
self.web.upload_count += 1 self.progress = {}
# Tell the GUI # Create an upload_id, attach it to the request
self.web.add_request(Web.REQUEST_STARTED, self.path, { self.upload_id = self.web.upload_count
'id': self.upload_id self.web.upload_count += 1
})
# Tell the GUI
self.web.add_request(Web.REQUEST_STARTED, self.path, {
'id': self.upload_id
})
def _get_file_stream(self, total_content_length, content_type, filename=None, content_length=None): def _get_file_stream(self, total_content_length, content_type, filename=None, content_length=None):
""" """
This gets called for each file that gets uploaded, and returns an file-like This gets called for each file that gets uploaded, and returns an file-like
writable stream. writable stream.
""" """
# Tell the GUI about the new file upload if self.upload_request:
self.web.add_request(Web.REQUEST_UPLOAD_NEW_FILE_STARTED, self.path, { # Tell the GUI about the new file upload
'id': self.upload_id, self.web.add_request(Web.REQUEST_UPLOAD_NEW_FILE_STARTED, self.path, {
'filename': filename, 'id': self.upload_id,
'total_bytes': total_content_length 'filename': filename,
}) 'total_bytes': total_content_length
})
self.progress[filename] = { self.progress[filename] = {
'total_bytes': total_content_length, 'total_bytes': total_content_length,
'uploaded_bytes': 0 'uploaded_bytes': 0
} }
if len(self.progress) > 0: if len(self.progress) > 0:
print('') print('')
return ReceiveModeTemporaryFile(filename, self.onionshare_update_func) return ReceiveModeTemporaryFile(filename, self.onionshare_update_func)
@ -719,20 +721,22 @@ class ReceiveModeRequest(Request):
When closing the request, print a newline if this was a file upload. When closing the request, print a newline if this was a file upload.
""" """
super(ReceiveModeRequest, self).close() super(ReceiveModeRequest, self).close()
if len(self.progress) > 0: if self.upload_request:
print('') if len(self.progress) > 0:
print('')
def onionshare_update_func(self, filename, length): def onionshare_update_func(self, filename, length):
""" """
Keep track of the bytes uploaded so far for all files. Keep track of the bytes uploaded so far for all files.
""" """
self.progress[filename]['uploaded_bytes'] += length if self.upload_request:
uploaded = self.web.common.human_readable_filesize(self.progress[filename]['uploaded_bytes']) self.progress[filename]['uploaded_bytes'] += length
total = self.web.common.human_readable_filesize(self.progress[filename]['total_bytes']) uploaded = self.web.common.human_readable_filesize(self.progress[filename]['uploaded_bytes'])
print('{}/{} - {} '.format(uploaded, total, filename), end='\r') total = self.web.common.human_readable_filesize(self.progress[filename]['total_bytes'])
print('{}/{} - {} '.format(uploaded, total, filename), end='\r')
# Update the GUI on the upload progress # Update the GUI on the upload progress
self.web.add_request(Web.REQUEST_PROGRESS, self.path, { self.web.add_request(Web.REQUEST_PROGRESS, self.path, {
'id': self.upload_id, 'id': self.upload_id,
'progress': self.progress 'progress': self.progress
}) })