2 # -*- coding: utf-8 -*-
3 # SPDX-FileCopyrightText: 2009,2010,2012,2019,2023 kaliko <kaliko@azylum.org>
4 # SPDX-License-Identifier: GPL-3.0-or-later
9 from os.path import basename
10 from random import randrange
17 class MRand(musicpd.MPDClient):
19 'prog': basename(__file__),
20 'description': 'Add some, randomly selected, files to the queue.',
21 'epilog': 'Set MPD host/port in env. var'
26 musicpd.MPDClient.__init__(self)
27 self.args = self._get_args()
33 parser = argparse.ArgumentParser(**self.__class__.script_info)
34 parser.add_argument('--version', action='version',
35 version='v%s' % VERSION)
36 parser.add_argument('n', type=int, nargs='?', default=5,
37 help='how many items to add (defaults to 5)')
38 args = parser.parse_args()
41 def get_random_id(self, n: int)->int:
43 cand = randrange(1, n) # songs_cnt excluded
44 if cand in self.added:
45 return self.get_random_id(n)
46 self.added.append(cand)
52 songs_cnt = int(self.stats().get('songs'))
53 if songs_cnt <= self.args.n:
54 print('Not enough songs in libary to run', file=sys.stderr)
58 while self.args.n > 0:
59 cand = self.get_random_id(songs_cnt)
60 song = self.find('(file != "")', 'window', f'{cand}:{cand+1}')[0]
61 print(f'Add {song.get("file")}')
66 if __name__ == '__main__':
69 except KeyboardInterrupt:
70 sys.stdout.write('exit')
73 # vim: ai ts=4 sw=4 sts=4 expandtab