X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=xsetbg.py;h=706e183ef2cad8338877b5a6c59bfa04a419c2c5;hb=839045f02d15aa1ffb272eb60dff01a5a8f9bd69;hp=2658956c39fc39e78e36c84476ccb994254a4301;hpb=13c9b4aeb309e7f3d92323041cb904e662390eaf;p=xsetbg.git diff --git a/xsetbg.py b/xsetbg.py index 2658956..706e183 100644 --- a/xsetbg.py +++ b/xsetbg.py @@ -6,12 +6,6 @@ using xli program. """ -__author__ = "Oleg Broytman " -__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 @@ -24,6 +18,8 @@ from time import time 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)) @@ -76,11 +72,14 @@ else: 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: @@ -94,8 +93,9 @@ def change(force=False): 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 \ @@ -104,13 +104,15 @@ def change(force=False): 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: @@ -121,7 +123,17 @@ def change(force=False): 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: