commit ad66fa07d2434811d70cd8c9c67eadb7c23f51ae
parent 76aa952f922b49b4c0d35187e699c3e454bdc7f7
Author: Paco Esteban <paco@e1e0.net>
Date: Sun, 24 Oct 2021 18:49:39 +0200
implement basic cache cleanup
Diffstat:
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()