summaryrefslogtreecommitdiffstats
path: root/config.py
diff options
context:
space:
mode:
Diffstat (limited to 'config.py')
-rw-r--r--config.py118
1 files changed, 92 insertions, 26 deletions
diff --git a/config.py b/config.py
index 1bc0b5e..7230285 100644
--- a/config.py
+++ b/config.py
@@ -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