diff options
Diffstat (limited to 'config.py')
-rw-r--r-- | config.py | 118 |
1 files changed, 92 insertions, 26 deletions
@@ -21,42 +21,97 @@ import os import ConfigParser import sys +# Get our reference point. preferably $HOME. homedir = os.getenv("HOME") if homedir is None: homedir = os.path.dirname(sys.argv[0]) - + class _Configuration(object): - def __init__(self): + def __init__(self, optioncreator): self.filename = os.path.join(os.path.join(homedir, ".4grab"), "config.cfg") self.configparser = ConfigParser.RawConfigParser() - if not os.path.exists(self.filename): - self.create_new() - else: - self.configparser.read(self.filename) - - def create_new(self): - self.configparser.add_section("settings") - self.set_category(self.raw_input_with_default("w", "Please enter which category you would like to download from: ")) + self.optioncreator = optioncreator - self.configparser.add_section("locations") - self.configparser.set("locations", "download", self.raw_input_with_default(os.path.join(homedir, "Pictures"), "Please enter where you would like the downloads to go: ")) + self.configparser.read(self.filename) - self.save() + def check(self): + changed = False + # read if it exists + if os.path.exists(self.filename): + self.configparser.read(self.filename) + # locations + if not self.configparser.has_section("locations"): + self.configparser.add_section("locations") + # locations/download_base + if not self.configparser.has_option("locations", "download_base"): + self.create_option("locations", + "download_base", + os.path.join(homedir, + "Pictures"), + "Please enter where " + "you would like the " + "downloads to go: ") + changed = True + # locations/archive + if not self.configparser.has_option("locations", "archive"): + self.create_option("locations", + "archive", + os.path.join(self.configparser.get("locations", + "download_base"), + ".arch"), + "Please enter where in {download_base} you " + "would like to store archived images (used for " + "checking what to download): ") + changed = True + # settings + if not self.configparser.has_section("settings"): + self.configparser.add_section("settings") + # settings/categories + if not self.configparser.has_option("settings", "categories"): + self.create_option("settings", + "categories", + "w", + "Please enter which " + "category you would like " + "to download from: ") + changed = True + # settings/resolutions + if not self.configparser.has_option("settings", "resolutions"): + self.create_option("settings", + "resolutions", + "1600x1050,1900x1200,1900x1080", + "Please enter your preferred " + "resolutions (* for all)") + changed = True + # save + if changed: + self.save() - def raw_input_with_default(self, default, prompt): - inp = raw_input("%s (default=%s): " % (prompt, default)) - if inp == "": - return default - return inp + def create_option(self, section, name, default, message): + self.configparser.set(section, + name, + self.optioncreator(default, + message)) def get_download_location(self): - return self.configparser.get("locations", "download") + return self.configparser.get("locations", "download_base") + def set_download_location(self, value): + self.configparser.set("locations", "download_base", value) - def get_category(self): - return self.configparser.get("settings", "category") + def get_archive_location(self): + return self.configparser.get("locations", "archive") + def set_archive_location(self, value): + self.configparser.set("locations", "archive", value) - def set_category(self, value): - self.configparser.set("settings", "category", value) + def get_categories(self): + return self.configparser.get("settings", "categories").split(',') + def set_categories(self, value = []): + self.configparser.set("settings", "category", ','.join(value)) + + def get_resolutions(self): + return self.configparser.get("settings", "resolutions").split(',') + def set_resolutions(self, value = []): + self.configparser.set("settings", "resolutions", ','.join(value)) def option_exists(self, option): sections = self.configparser.sections() @@ -65,6 +120,7 @@ class _Configuration(object): return True return False + # Should only be used by the command-line def set_option(self, option, value): sec = None sections = self.configparser.sections() @@ -81,9 +137,19 @@ class _Configuration(object): def save(self): dirname = os.path.dirname(self.filename) if not os.path.exists(dirname): - os.mkdir(dirname) + os.makedirs(dirname) configfile = open(self.filename, "w") self.configparser.write(configfile) -_configuration = _Configuration() -def Configuration(): return _configuration +_configuration = None +_optioncreator = None +def Configuration(): + global _optioncreator + global _configuration + + if _optioncreator is None: + raise ValueError("optioncreator must be set") + if _configuration is None: + _configuration = _Configuration(_optioncreator) + _configuration.check() + return _configuration |