-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
remove tmp files when they leave playlist
however, this doesn't work consistently across larigira restarts: you should expect that restarting larigira will cause leftover files to remain. refs #12
- Loading branch information
Showing
2 changed files
with
52 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
''' | ||
This component will look for files to be removed. There are some assumptions: | ||
* Only files in $TMPDIR are removed. Please remember that larigira has its | ||
own specific TMPDIR | ||
* MPD URIs are parsed, and only file:/// is supported | ||
''' | ||
import os | ||
import logging | ||
import mpd | ||
|
||
|
||
class UnusedCleaner: | ||
def __init__(self, conf): | ||
self.conf = conf | ||
self.waiting_removal_files = set() | ||
self.log = logging.getLogger(self.__class__.__name__) | ||
|
||
def _get_mpd(self): | ||
mpd_client = mpd.MPDClient(use_unicode=True) | ||
mpd_client.connect(self.conf['MPD_HOST'], self.conf['MPD_PORT']) | ||
return mpd_client | ||
|
||
def watch(self, uri): | ||
''' | ||
adds fpath to the list of "watched" file | ||
as soon as it leaves the mpc playlist, it is removed | ||
''' | ||
if not uri.startswith('file:///'): | ||
raise ValueError('not a file URI') | ||
fpath = uri[len('file://'):] | ||
if not os.path.exists(fpath): | ||
self.log.warning('a path that does not exist is being monitored') | ||
self.waiting_removal_files.add(fpath) | ||
|
||
def check_playlist(self): | ||
'''check playlist + internal watchlist to see what can be removed''' | ||
mpd = self._get_mpd() | ||
files_in_playlist = {song['file'] for song in mpd.playlistid() | ||
if song['file'].startswith('/')} | ||
for fpath in self.waiting_removal_files - files_in_playlist: | ||
# we can remove it! | ||
self.log.debug('removing unused: {}'.format(fpath)) | ||
self.waiting_removal_files.remove(fpath) | ||
if os.path.exists(fpath): | ||
os.unlink(fpath) |