def save_locally(self, origin_url, image_url, source_type=None, source_location=None, source_name=None, force_download=False, extra_metadata={}, local_filename=None): if not source_type: source_type = self.source_type if not source_name: source_name = self.name if not source_location: source_location = self.location if not force_download and self.parent and origin_url in self.parent.banned: logger.info(lambda: "URL " + origin_url + " is banned, skip downloading") return None try: os.makedirs(self.target_folder) except Exception: pass if origin_url.startswith('//'): origin_url = 'https:' + origin_url if image_url.startswith('//'): image_url = origin_url.split('//')[0] + image_url if not local_filename: local_filename = self.get_local_filename(image_url) logger.info(lambda: "Origin URL: " + origin_url) logger.info(lambda: "Image URL: " + image_url) logger.info(lambda: "Local name: " + local_filename) if not force_download and os.path.exists(local_filename): logger.info(lambda: "File already exists, skip downloading") return None if self.parent and self.parent.options.safe_mode: sfw_rating = Smart.get_sfw_rating(origin_url) if sfw_rating is not None and sfw_rating < 100: logger.info(lambda: "Skipping non-safe download %s. Is the source %s:%s " "suitable for Safe mode?" % (origin_url, source_type, self.location)) return None if self.parent and self.parent.options.safe_mode and 'keywords' in extra_metadata: blacklisted = set(k.lower() for k in extra_metadata['keywords']) & Smart.get_safe_mode_keyword_blacklist() if len(blacklisted) > 0: logger.info(lambda: "Skipping non-safe download %s due to blacklisted keywords (%s). " "Is the source %s:%s suitable for Safe mode?" % (origin_url, str(blacklisted), source_type, self.location)) return None try: r = Util.request(image_url, stream=True) with open(local_filename, 'wb') as f: Util.request_write_to(r, f) except Exception, e: logger.info(lambda: "Download failed from image URL: %s (source location: %s) " % (image_url, self.location)) raise e
def populate_sfw_menu(self): try: self.rating_items = [] sfw_ratings = Smart.get_all_sfw_ratings() def _gui_update(sfw_ratings): try: def _add_menuitem(rating): menuitem = Gtk.ImageMenuItem(_(rating['label_long'])) menuitem.set_visible(True) def _rate(*args, **kwargs): self.parent.report_sfw_rating(file=None, rating=rating['rating']) menuitem.connect("activate", _rate) try: menuitem.set_always_show_image(True) image = Gtk.Image() image.set_from_file(varietyconfig.get_data_file("media", "sfw-%s.svg" % rating['rating'])) menuitem.set_image(image) except: logger.exception(lambda: "Could not set image to NSFW menuitem:") self.sfw_menu.append(menuitem) self.rating_items.append(menuitem) map(_add_menuitem, reversed(sfw_ratings)) separator = Gtk.SeparatorMenuItem.new() separator.set_visible(True) self.sfw_menu.append(separator) self.safe_mode = Gtk.CheckMenuItem(_("_Safe mode")) self.safe_mode.set_visible(True) self.safe_mode.set_active(self.parent.options.safe_mode) self.safe_mode.set_use_underline(True) self.safe_mode_handler_id = self.safe_mode.connect("toggled", self.parent.on_safe_mode_toggled) self.sfw_menu.append(self.safe_mode) self.sfw_menu_item.set_sensitive(True) self.parent.update_indicator() except Exception: logger.exception(lambda: 'Oops, could not populate NSFW menu:') Util.add_mainloop_task(_gui_update, sfw_ratings) except Exception: logger.exception(lambda: 'Oops, could not populate NSFW menu:')
def save_locally(self, origin_url, image_url, source_type=None, source_location=None, source_name=None, force_download=False, extra_metadata={}, local_filename=None): if not source_type: source_type = self.source_type if not source_name: source_name = self.name if not source_location: source_location = self.location if not force_download and self.parent and origin_url in self.parent.banned: logger.info( lambda: "URL " + origin_url + " is banned, skip downloading") return None try: os.makedirs(self.target_folder) except Exception: pass if origin_url.startswith('//'): origin_url = 'https:' + origin_url if image_url.startswith('//'): image_url = origin_url.split('//')[0] + image_url if not local_filename: local_filename = self.get_local_filename(image_url) logger.info(lambda: "Origin URL: " + origin_url) logger.info(lambda: "Image URL: " + image_url) logger.info(lambda: "Local name: " + local_filename) if not force_download and os.path.exists(local_filename): logger.info(lambda: "File already exists, skip downloading") return None if self.parent and self.parent.options.safe_mode: sfw_rating = Smart.get_sfw_rating(origin_url) if sfw_rating is not None and sfw_rating < 100: logger.info( lambda: "Skipping non-safe download %s. Is the source %s:%s " "suitable for Safe mode?" % (origin_url, source_type, self.location)) return None if self.parent and self.parent.options.safe_mode and 'keywords' in extra_metadata: blacklisted = set(k.lower() for k in extra_metadata['keywords'] ) & Smart.get_safe_mode_keyword_blacklist() if len(blacklisted) > 0: logger.info( lambda: "Skipping non-safe download %s due to blacklisted keywords (%s). " "Is the source %s:%s suitable for Safe mode?" % (origin_url, str(blacklisted), source_type, self.location)) return None try: r = Util.request(image_url, stream=True) with open(local_filename, 'wb') as f: Util.request_write_to(r, f) except Exception, e: logger.info( lambda: "Download failed from image URL: %s (source location: %s) " % (image_url, self.location)) raise e