summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar ryuslash2010-03-16 23:17:46 +0100
committerGravatar ryuslash2010-03-16 23:17:46 +0100
commit8e101c92f930422f0ec97d8d15511732732a9f37 (patch)
tree6d56a1b61299eaea7de11b72ba1e52a3317f284d
parentcaba2811b94577eb89e13d9d1a7f7de64c979acc (diff)
download4grab-8e101c92f930422f0ec97d8d15511732732a9f37.tar.gz
4grab-8e101c92f930422f0ec97d8d15511732732a9f37.zip
Disconnected the property creation function
The function used to create a new property has been changed to be a callback function, so that later on a UI might use a dialog.
-rwxr-xr-x4grab.py23
-rw-r--r--config.py68
-rw-r--r--download.py5
3 files changed, 67 insertions, 29 deletions
diff --git a/4grab.py b/4grab.py
index fd12c32..f2b8da8 100755
--- a/4grab.py
+++ b/4grab.py
@@ -26,9 +26,18 @@ import config
import download
import progressbar
+def raw_input_with_default(default, prompt):
+ inp = raw_input("%s (default=%s): " % (prompt, default))
+ if inp == "":
+ return default
+ return inp
+
base_url = "http://boards.4chan.org/"
parser = optparse.OptionParser()
downloader = download.Downloader(progressbar.Progress)
+conf = config.Configuration()
+
+conf.set_optioncreator(raw_input_with_default)
def walk_with_wizard(baseurl):
wzrd_msg = "Pilates! *SHAZAM* Here they come!"
@@ -54,8 +63,8 @@ def walk_with_wizard(baseurl):
[thread])
else:
inp = raw_input("Which category would you like to download? ")
- config.Configuration().set_category(inp)
- baseurl = "%s%s/" % (baseurl, config.Configuration().get_category())
+ conf.set_category(inp)
+ baseurl = "%s%s/" % (baseurl, conf.get_category())
print wzrd_msg
t = downloader.get_thread_links(baseurl)
@@ -109,15 +118,15 @@ if options.wizard and (options.tempcat
exit(1)
if options.confval:
- if not config.Configuration().option_exists(options.confval[0]):
+ if not conf.option_exists(options.confval[0]):
print ("%s: error: %s is not a "
"valid configuration option") % (sys.argv[0],
options.confval[0])
exit(1)
print "Setting", options.confval[0], "to", options.confval[1]
- config.Configuration().set_option(options.confval[0],
+ conf.set_option(options.confval[0],
options.confval[1])
- config.Configuration().save()
+ conf.save()
exit(0)
elif options.wizard:
@@ -150,9 +159,9 @@ elif options.thread:
exit(0)
elif options.tempcat:
- config.Configuration().set_category(options.tempcat)
+ conf.set_category(options.tempcat)
-base_url = "%s%s/" % (base_url, config.Configuration().get_category())
+base_url = "%s%s/" % (base_url, conf.get_category())
try:
t = downloader.get_thread_links(base_url)
diff --git a/config.py b/config.py
index 1bc0b5e..2f15933 100644
--- a/config.py
+++ b/config.py
@@ -24,36 +24,64 @@ import sys
homedir = os.getenv("HOME")
if homedir is None:
homedir = os.path.dirname(sys.argv[0])
-
+
class _Configuration(object):
def __init__(self):
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.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.check()
+
+ self.configparser.read(self.filename)
+
+ def set_optioncreator(self, optioncreator):
+ self.optioncreator = optioncreator
+
+ 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
+ # 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
- self.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 get_category(self):
- return self.configparser.get("settings", "category")
+ return self.configparser.get("settings", "categories")
def set_category(self, value):
self.configparser.set("settings", "category", value)
@@ -81,7 +109,7 @@ 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)
diff --git a/download.py b/download.py
index 2405805..05a5328 100644
--- a/download.py
+++ b/download.py
@@ -25,7 +25,8 @@ import htmlparser
#import progressbar
import config
-savedir = config.Configuration().get_download_location()
+conf = config.Configuration()
+savedir = conf.get_download_location()
if not os.path.exists(savedir):
os.makedirs(savedir)
@@ -127,7 +128,7 @@ class Downloader(object):
if __name__ == "__main__":
# Get a file-like object for the 4chan.org w/imgboard
- base_url = "http://boards.4chan.org/" + config.Configuration().get_category() + "/"
+ base_url = "http://boards.4chan.org/" + conf.get_category() + "/"
# Get the hyperlinks.
t = get_thread_links(base_url)