From b899ec0fdc2d306ea27ebe9d0b0851f6e34134c4 Mon Sep 17 00:00:00 2001 From: Frederic Date: Sun, 10 Dec 2017 12:33:38 +0100 Subject: [PATCH] improved animation selection logic, added support for subdirs and symlinks in animation directory --- utils/miniplayer.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/utils/miniplayer.py b/utils/miniplayer.py index 297fbcb..d37f94f 100755 --- a/utils/miniplayer.py +++ b/utils/miniplayer.py @@ -1,4 +1,4 @@ -#!/usr/bin/python3 +#!/usr/bin/env python3 import threading import os @@ -55,6 +55,8 @@ class MiniPlayer(object): self.maxPlayNext = 3 self.__playNext = [] self.__running = False + self.__anims = {} + self.__anims_remaining = {} def terminate(self): self.__running = False @@ -79,10 +81,16 @@ class MiniPlayer(object): """ if len(self.__playNext) > 0 and os.path.isfile(self.__playNext[0]): - return self.__playNext.pop(0) + anim = self.__playNext.pop(0) else: - files = os.listdir(self.__animDir) - return random.choice(files) + anims = { os.path.join(dp, fn) for dp, dns, fns in \ + os.walk(self.__animDir, followlinks=True) for fn in fns } + if anims != self.__anims or len(self.__anims_remaining) == 0: + self.__anims = anims + self.__anims_remaining = set(anims) + anim = random.sample(self.__anims_remaining, 1)[0] + self.__anims_remaining.remove(anim) + return anim def run(self): """