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:
# lock it to prevent two processes run in parallel.
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:
"-center", "-onroot", "-quiet", "-zoom", "auto",
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:
error("cannot execute xli!")