"""
-__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 = 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!")