2 # -*- coding: utf-8 -*-
3 # SPDX-FileCopyrightText: 2009,2010,2012,2019 kaliko <kaliko@azylum.org>
4 # SPDX-License-Identifier: GPL-3.0-or-later
9 from datetime import timedelta
10 from os.path import basename
17 class Mtime(musicpd.MPDClient):
19 'prog': basename(__file__),
20 'description': 'Print current playlist duration.',
21 'epilog': 'Set MPD host/port in env. var'
25 musicpd.MPDClient.__init__(self)
26 self.args = self._get_args()
30 parser = argparse.ArgumentParser(**self.__class__.script_info)
31 parser.add_argument('--version', action='version',
32 version='v%s' % VERSION)
33 parser.add_argument('-r', '--remaining', action='store_true', dest='remaining',
34 help='print remaining play time (only relevant when paused or playing).',)
35 parser.add_argument('-H', '--human', action='store_true', dest='human',
36 help='print duration in human readable format.',)
37 args = parser.parse_args()
40 def _print_time(self, duration):
42 print(timedelta(seconds=duration))
48 status = self.status()
49 plinfo = self.playlistinfo()
51 if self.args.remaining:
52 if status.get('state') in ['play', 'pause']:
53 total_time = sum(int(trk.get('time')) for trk in plinfo if int(
54 trk.get('pos')) > int(status.get('song')))
55 # add remaining time from current song
56 curr_elapsed = status.get('time').split(':')
57 total_time += int(curr_elapsed[1]) - int(curr_elapsed[0])
59 total_time = sum(int(trk.get('time')) for trk in plinfo)
60 self._print_time(total_time)
66 if __name__ == '__main__':
69 except KeyboardInterrupt:
70 sys.stdout.write('exit')
73 # vim: ai ts=4 sw=4 sts=4 expandtab