subclient

Subsonic ncurses client
git clone https://git.e1e0.net/subclient.git
Log | Files | Refs | README

commit ad66fa07d2434811d70cd8c9c67eadb7c23f51ae
parent 76aa952f922b49b4c0d35187e699c3e454bdc7f7
Author: Paco Esteban <paco@e1e0.net>
Date:   Sun, 24 Oct 2021 18:49:39 +0200

implement basic cache cleanup

Diffstat:
Msubclient/subclient.py | 28++++++++++++++++++++++++----
1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/subclient/subclient.py b/subclient/subclient.py @@ -3,6 +3,8 @@ import configparser import curses +import os +import random import sys from datetime import timedelta from subclient import subsonic @@ -44,7 +46,6 @@ class SubClient: self.width = 0 self.listwin_height = 0 self.infowin_height = 0 - self.info_updater = helpers.Job(timedelta(seconds=1), self.update_info) self.init_curses() self.nav_list = self.subsonic.get_artists() @@ -56,6 +57,12 @@ class SubClient: self.nav_pages = self.nav_bottom // self.nav_max_lines self.artist = None + self.playlist = [] + + self.info_updater = helpers.Job(timedelta(seconds=1), self.update_info) + self.cache_cleaner = helpers.Job(timedelta(seconds=60), + self.clean_cache) + self.cache_cleaner.start() def init_curses(self): self.stdscr = curses.initscr() @@ -82,7 +89,10 @@ class SubClient: except KeyboardInterrupt: pass finally: - self.info_updater.stop() + if self.info_updater.is_alive(): + self.info_updater.stop() + if self.cache_cleaner.is_alive(): + self.cache_cleaner.stop() self.player.exit() curses.endwin() @@ -214,8 +224,8 @@ class SubClient: self.nav_pages = self.nav_bottom // self.nav_max_lines def start_player(self): - playlist = self.nav_list[self.nav_top + self.nav_selected:self.nav_bottom] - self.player.play(playlist) + self.playlist = self.nav_list[self.nav_top + self.nav_selected:self.nav_bottom] + self.player.play(self.playlist) def get_info(self): list_info = self.player.get_list_info() @@ -234,6 +244,16 @@ class SubClient: def update_info(self): self.refresh(['info']) + def clean_cache(self): + cache_folder = helpers.get_cache_folder() + cache_folder_size = sum(os.path.getsize(f'{cache_folder}/{f}') for f in os.listdir(cache_folder) if os.path.isfile(f'{cache_folder}/{f}')) + if cache_folder_size > int(self.config['subclient']['max_cache']): + all_files = os.listdir(cache_folder) + pl_files = [x.id for x in self.playlist] + to_delete = list(set(all_files) - set(pl_files)) + for f in random.sample(to_delete, 3): + os.remove(f'{cache_folder}/{f}') + def refresh(self, win): if 'list' in win: self.listwin.erase()