"""
-__author__ = "Oleg Broytman <phd@phdru.name>"
-__copyright__ = "Copyright (C) 2000-2015 PhiloSoft Design"
-__license__ = "GNU GPL"
-
-__all__ = ['change']
-
from fcntl import flock, LOCK_EX, LOCK_UN, LOCK_NB
from datetime import timedelta
import os
from xsetbg_conf import xsetbg_dir, xsetbg_conf
from xsetbg_db import xsetbg_db
+__all__ = ['change']
+
def error(error_str):
sys.exit("%s: Error: %s\n" % (sys.argv[0], error_str))
min_delay = xsetbg_conf.get("xsetbg", "min_delay")
# Borrowed from http://stackoverflow.com/a/2765366
- td_re = re.compile('(?:(?P<years>\d+)y)?'
- '(?:(?P<months>\d+)m)?'
- '(?:(?P<days>\d+)d)?'
- '(?:T(?:(?P<hours>\d+)h)?'
- '(?:(?P<minutes>\d+)m)?(?:(?P<seconds>\d+)s)?)?')
+ td_re = re.compile('(?:(?P<years>\\d+)y)?'
+ '(?:(?P<months>\\d+)m)?'
+ '(?:(?P<days>\\d+)d)?'
+ '(?:T(?:(?P<hours>\\d+)h)?'
+ '(?:(?P<minutes>\\d+)m)?(?:(?P<seconds>\\d+)s)?)?')
td_dict = td_re.match(min_delay).groupdict(0)
delta = timedelta(days=int(td_dict['days']) +
(int(td_dict['months']) * 30) +
min_delay = 3600*24 # 24 hours
-if xsetbg_db.select('last_shown IS NULL OR last_shown < %d' %
- (time() - min_delay)).count() == 0:
+if xsetbg_db.select(
+ '(is_image = 1) AND (last_shown IS NULL OR last_shown < %d)' %
+ (time() - min_delay)).count() == 0:
error("No unshown images found. Run rescan_fs.py "
"or decrease min_delay. Abort.")
+fs_encoding = xsetbg_conf.get("images", "fs_encoding")
+
def change(force=False):
# Use the program's file as the lock file:
return
try:
- timestamp = xsetbg_db.select('last_shown IS NOT NULL',
- orderBy='-last_shown')[0].last_shown
+ timestamp = xsetbg_db.select(
+ '(is_image = 1) AND (last_shown IS NOT NULL)',
+ orderBy='-last_shown')[0].last_shown
current_time = time()
if not force and timestamp is not None and \
return
# Select a random image that has never been shown
- not_shown_select = xsetbg_db.select('last_shown IS NULL')
+ not_shown_select = xsetbg_db.select(
+ '(is_image = 1) AND (last_shown IS NULL)')
not_shown_count = not_shown_select.count()
if not_shown_count:
row = not_shown_select[random.randint(0, not_shown_count - 1)]
else:
old_shown_select = xsetbg_db.select(
- 'last_shown IS NOT NULL AND last_shown < %d' %
+ '(is_image = 1) AND '
+ '(last_shown IS NOT NULL AND last_shown < %d)' %
current_time - min_delay)
old_shown_count = old_shown_select.count()
if old_shown_count:
program_options = ["xli", "-border", random.choice(borders),
"-center", "-onroot", "-quiet", "-zoom", "auto",
- row.full_name]
+ row.full_name.encode(fs_encoding)]
+
+ ext = os.path.splitext(row.full_name)[1].lower()
+ if ext in ('tif', 'tiff'):
+ program_options[0] = 'xsetbg'
+
+ if ext == 'webp':
+ program_options = ['display', '-backdrop',
+ '-background', random.choice(borders),
+ '-window', 'root',
+ row.full_name.encode(fs_encoding)]
rc = subprocess.call(program_options)
if rc: