]> kaliko git repositories - mpd-goodies.git/blob - bin/mrandom
Swith to SPDX for license headers
[mpd-goodies.git] / bin / mrandom
1 #!/usr/bin/env python3
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
5
6 import argparse
7 import sys
8
9 from os.path import basename
10 from random import randrange
11
12 import musicpd
13
14 VERSION = '0.1'
15
16
17 class MRand(musicpd.MPDClient):
18     script_info = dict({
19         'prog': basename(__file__),
20         'description': 'Add some, randomly selected, files to the queue.',
21         'epilog': 'Set MPD host/port in env. var'
22     })
23
24     def __init__(self):
25         """"""
26         musicpd.MPDClient.__init__(self)
27         self.args = self._get_args()
28         self.added = []
29         self._run()
30
31     def _get_args(self):
32         """"""
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()
39         return args
40
41     def get_random_id(self, n: int)->int:
42         """"""
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)
47         return cand
48
49     def _run(self):
50         """"""
51         self.connect()
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)
55             self.disconnect()
56             return
57         # add songs
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")}')
62             self.args.n-=1
63         self.disconnect()
64
65 # Script starts here
66 if __name__ == '__main__':
67     try:
68         MRand()
69     except KeyboardInterrupt:
70         sys.stdout.write('exit')
71
72 # VIM MODLINE
73 # vim: ai ts=4 sw=4 sts=4 expandtab