#!/usr/bin/env python3 # -*- coding: utf-8 -*- # SPDX-FileCopyrightText: 2009,2010,2012,2019,2023 kaliko # SPDX-License-Identifier: GPL-3.0-or-later import argparse import sys from os.path import basename from random import randrange import musicpd VERSION = '0.1' class MRand(musicpd.MPDClient): script_info = dict({ 'prog': basename(__file__), 'description': 'Add some, randomly selected, files to the queue.', 'epilog': 'Set MPD host/port in env. var' }) def __init__(self): """""" musicpd.MPDClient.__init__(self) self.args = self._get_args() self.added = [] self._run() def _get_args(self): """""" parser = argparse.ArgumentParser(**self.__class__.script_info) parser.add_argument('--version', action='version', version='v%s' % VERSION) parser.add_argument('n', type=int, nargs='?', default=5, help='how many items to add (defaults to 5)') args = parser.parse_args() return args def get_random_id(self, n: int)->int: """""" cand = randrange(1, n) # songs_cnt excluded if cand in self.added: return self.get_random_id(n) self.added.append(cand) return cand def _run(self): """""" self.connect() songs_cnt = int(self.stats().get('songs')) if songs_cnt <= self.args.n: print('Not enough songs in libary to run', file=sys.stderr) self.disconnect() return # add songs while self.args.n > 0: cand = self.get_random_id(songs_cnt) song = self.find('(file != "")', 'window', f'{cand}:{cand+1}')[0] print(f'Add {song.get("file")}') self.args.n-=1 self.disconnect() # Script starts here if __name__ == '__main__': try: MRand() except KeyboardInterrupt: sys.stdout.write('exit') # VIM MODLINE # vim: ai ts=4 sw=4 sts=4 expandtab