###################################################################### # Copyright 2009, 2010 ryuslash # # This file is part of 4grab. # # 4grab is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # 4grab is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with 4grab. If not, see . ###################################################################### import config import Image import shutil import os import datetime def dummy_option_creator(value1, value2): pass config._optioncreator = dummy_option_creator class Sorter: def __init__(self): self.conf = config.Configuration() self.resolutions = self.conf.get_resolutions() def act(self, filename): download_base = self.conf.get_download_location() retval = True if self.check_filename(filename): image = None try: image = Image.open(os.path.join(download_base, filename)) except IOError: retval = False if not image == None and self.archive_check(filename): for resolution in self.resolutions: resolution = resolution.split('x') foldername = "%s-%s" % (resolution[0], resolution[1]) folderpath = os.path.join(download_base, foldername) if str(image.size[0]) == resolution[0] and \ str(image.size[1]) == resolution[1]: if not os.path.exists(folderpath): os.makedirs(folderpath) self.copy(filename, folderpath) break self.archive(filename) self.remove(filename) return retval def copy(self, filename, destpath): download_base = self.conf.get_download_location() source = os.path.join(download_base, os.path.basename(filename)) today = datetime.date.today() dest = os.path.join(destpath, "%d-%d-%d" % (today.year, today.month, today.day)) if not os.path.exists(dest): os.makedirs(dest) dest = os.path.join(dest, os.path.basename(filename)) #today = datetime.date.today() #dest = os.path.join(dest, # "%d-%d-%d" % (today.year, today.month, today.day)) if source != dest: shutil.copy(source, dest) else: print "\nHow can this even happen?! Copying", source, "to", dest def archive(self, filename): download_base = self.conf.get_download_location() location = self.conf.get_archive_location() if not os.path.exists(location): os.makedirs(location) dest = os.path.join(location, filename) f = open(dest, "w") file.close(f) def archive_check(self, filename): archive_path = self.conf.get_archive_location() fullname = os.path.join(archive_path, filename) return os.path.exists(fullname) def check_filename(self, filename): ext = os.path.splitext(filename)[1] return ext == ".jpg" or \ ext == ".png" or \ ext == ".gif" def remove(self, filename): download_base = self.conf.get_download_location() source = os.path.join(download_base, filename) os.remove(source) if __name__ == "__main__": conf = config.Configuration() download_base = conf.get_download_location() sorter = Sorter() for item in os.listdir(download_base): sorter.act(item)