def update_icon_cache(self, url, info): self.dbItem.confirm_db_thread() if self.removed: icon_cache_updater.update_finished() return needs_save = False needsChange = False if info == None or (info['status'] != 304 and info['status'] != 200): self.error_callback(url, "bad response") return try: # Our cache is good. Hooray! if info['status'] == 304: return needsChange = True # We have to update it, and if we can't write to the file, we # should pick a new filename. if ((self.filename and not fileutil.access(self.filename, os.R_OK | os.W_OK))): self.filename = None cachedir = app.config.get(prefs.ICON_CACHE_DIRECTORY) try: fileutil.makedirs(cachedir) except OSError: pass try: # Write to a temp file. if self.filename: tmp_filename = self.filename + ".part" else: tmp_filename = os.path.join(cachedir, info["filename"]) + ".part" tmp_filename, output = next_free_filename(tmp_filename) output.write(info["body"]) output.close() except IOError: self.remove_file(tmp_filename) return except ValueError: logging.warn('update_icon_cache: next_free_filename failed ' '#1, candidate = %r', tmp_filename) return filename = unicode(info["filename"]) filename = unicode_to_filename(filename, cachedir) filename = os.path.join(cachedir, filename) needs_save = True try: filename, fp = next_free_filename(filename) except ValueError: logging.warn('update_icon_cache: next_free_filename failed ' '#2, candidate = %r', filename) return if self.filename: filename = self.filename self.filename = None self.remove_file(filename) # we need to move the file here--so we close the file # pointer and then move the file. fp.close() try: self.remove_file(filename) fileutil.rename(tmp_filename, filename) except (IOError, OSError): logging.exception("iconcache: fileutil.move failed") filename = None self.filename = filename etag = unicodify(info.get("etag")) modified = unicodify(info.get("modified")) if self.etag != etag: needs_save = True self.etag = etag if self.modified != modified: needs_save = True self.modified = modified if self.url != url: needs_save = True self.url = url finally: if needsChange: self.icon_changed(needs_save=needs_save) self.updating = False if self.needsUpdate: self.needsUpdate = False self.request_update(True) icon_cache_updater.update_finished()
def update_icon_cache(self, url, info): self.dbItem.confirm_db_thread() if self.removed: app.icon_cache_updater.update_finished() return needs_save = False needsChange = False if info == None or (info['status'] != 304 and info['status'] != 200): self.error_callback(url, "bad response") return try: # Our cache is good. Hooray! if info['status'] == 304: return needsChange = True # We have to update it, and if we can't write to the file, we # should pick a new filename. if ((self.filename and not fileutil.access(self.filename, os.R_OK | os.W_OK))): self.filename = None cachedir = app.config.get(prefs.ICON_CACHE_DIRECTORY) try: fileutil.makedirs(cachedir) except OSError: pass try: # Write to a temp file. if self.filename: tmp_filename = self.filename + ".part" else: tmp_filename = os.path.join(cachedir, info["filename"]) + ".part" tmp_filename, output = next_free_filename(tmp_filename) output.write(info["body"]) output.close() except IOError: self.remove_file(tmp_filename) return except ValueError: logging.warn('update_icon_cache: next_free_filename failed ' '#1, candidate = %r', tmp_filename) return filename = unicode(info["filename"]) filename = unicode_to_filename(filename, cachedir) filename = os.path.join(cachedir, filename) needs_save = True try: filename, fp = next_free_filename(filename) except ValueError: logging.warn('update_icon_cache: next_free_filename failed ' '#2, candidate = %r', filename) return if self.filename: filename = self.filename self.filename = None self.remove_file(filename) # we need to move the file here--so we close the file # pointer and then move the file. fp.close() try: self.remove_file(filename) fileutil.rename(tmp_filename, filename) except (IOError, OSError): logging.exception("iconcache: fileutil.move failed") filename = None self.filename = filename etag = unicodify(info.get("etag")) modified = unicodify(info.get("modified")) if self.etag != etag: needs_save = True self.etag = etag if self.modified != modified: needs_save = True self.modified = modified if self.url != url: needs_save = True self.url = url finally: if needsChange: self.icon_changed(needs_save=needs_save) self.updating = False if self.needsUpdate: self.needsUpdate = False self.request_update(True) app.icon_cache_updater.update_finished()
def update_icon_cache(self, url, info): self.dbItem.confirm_db_thread() if self.removed: iconCacheUpdater.update_finished() return needs_save = False needsChange = False if info == None or (info['status'] != 304 and info['status'] != 200): self.error_callback(url, "bad response") return try: # Our cache is good. Hooray! if info['status'] == 304: return needsChange = True # We have to update it, and if we can't write to the file, we # should pick a new filename. if self.filename and not fileutil.access(self.filename, os.R_OK | os.W_OK): self.filename = None cachedir = app.config.get(prefs.ICON_CACHE_DIRECTORY) try: fileutil.makedirs(cachedir) except OSError: pass try: # Write to a temp file. if self.filename: tmp_filename = self.filename + ".part" else: tmp_filename = os.path.join(cachedir, info["filename"]) + ".part" tmp_filename, output = next_free_filename(tmp_filename) output.write(info["body"]) output.close() except IOError: self.remove_file(tmp_filename) return if self.filename: self.remove_file(self.filename) # Create a new filename always to avoid browser caching in case a # file changes. # Add a random unique id parts = unicodify(info["filename"]).split('.') uid = u"%08d" % random.randint(0, 99999999) if len(parts) == 1: parts.append(uid) else: parts[-1:-1] = [uid] self.filename = u'.'.join(parts) self.filename = unicode_to_filename(self.filename, cachedir) self.filename = os.path.join(cachedir, self.filename) self.filename, fp = next_free_filename(self.filename) needs_save = True try: fileutil.rename(tmp_filename, self.filename) except OSError: self.filename = None needs_save = True fp.close() etag = unicodify(info.get("etag")) modified = unicodify(info.get("modified")) if self.etag != etag: needs_save = True self.etag = etag if self.modified != modified: needs_save = True self.modified = modified if self.url != url: needs_save = True self.url = url finally: if needsChange: self.icon_changed(needs_save=needs_save) self.updating = False if self.needsUpdate: self.needsUpdate = False self.request_update(True) iconCacheUpdater.update_finished()