Index: samesite.py ================================================================== --- samesite.py +++ samesite.py @@ -80,10 +80,11 @@ const_ignore_fields = set([ 'Accept-Ranges', 'Age', 'Cache-Control', 'Connection', 'Content-Type', 'Date', 'Expires', + 'Referer', 'Server', 'Via', 'X-Cache', 'X-Cache-Lookup', 'X-Powered-By' ]) @@ -279,12 +280,14 @@ reload = True record = {} else: # forcibly checking file if no file present if os.access(file_name, os.R_OK): + info += '\nFull file found.' file_stat = os.stat(file_name) elif '_parts' in index[my_path] and os.access(temp_name, os.R_OK): + info += '\nPartial file found.' file_stat = os.stat(temp_name) else: info += '\nFile not found or inaccessible.' index[my_path]['_parts'] = None reload = True @@ -322,29 +325,27 @@ for header in ('Cache-Control', 'Cookie', 'Referer', 'User-Agent'): if header in self.headers: my_headers[header] = self.headers[header] needed = None - # XXX and if we specify full file we don't go partial? - if requested_ranges != None: - if '_parts' in record and record['_parts'] != None: - if config['noparts']: - needed = record['_parts'] - else: - needed = record['_parts'] | requested_ranges - elif not config['noparts']: - needed = requested_ranges - ranges = () - print('Missing ranges: {}, requested ranges: {}, needed ranges: {}.'.format(record['_parts'], requested_ranges, needed)) - if needed != None and len(needed) > 0: - needed.rewind() - while True: - range = needed.pop() - if range[0] == None: - break - ranges += '{}-{}'.format(range[0], range[1] - 1), - my_headers['Range'] = 'bytes=' + ','.join(ranges) + if '_parts' in record and record['_parts'] != None: + if config['noparts'] or requested_ranges == None: + needed = record['_parts'] + else: + needed = record['_parts'] | requested_ranges + elif not config['noparts']: + needed = requested_ranges + ranges = () + print('Missing ranges: {}, requested ranges: {}, needed ranges: {}.'.format(record['_parts'], requested_ranges, needed)) + if needed != None and len(needed) > 0: + needed.rewind() + while True: + range = needed.pop() + if range[0] == None: + break + ranges += '{}-{}'.format(range[0], range[1] - 1), + my_headers['Range'] = 'bytes=' + ','.join(ranges) request = urllib.request.Request(request, headers = my_headers) with urllib.request.urlopen(request) as source: new_record = {} @@ -418,10 +419,12 @@ empty_name = config['dir'] + os.sep + '.tmp' with open(empty_name, 'w+b') as some_file: pass os.renames(empty_name, temp_name) temp_file = open(temp_name, 'r+b') + if requested_ranges == None and needed == None: + needed = new_record['_parts'] needed.rewind() while True: (start, end) = needed.pop() if start == None: break