]> kaliko git repositories - mpd-goodies.git/blob - bin/mtime
Fixed protocol version check for mlast
[mpd-goodies.git] / bin / mtime
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 # SPDX-FileCopyrightText: 2009,2010,2012,2019 kaliko <kaliko@azylum.org>
4 # SPDX-License-Identifier: GPL-3.0-or-later
5
6 import argparse
7 import sys
8
9 from datetime import timedelta
10 from os.path import basename
11
12 import musicpd
13
14 VERSION = '0.2'
15
16
17 class Mtime(musicpd.MPDClient):
18     script_info = dict({
19         'prog': basename(__file__),
20         'description': 'Print current playlist duration.',
21         'epilog': 'Set MPD host/port in env. var'
22     })
23
24     def __init__(self):
25         musicpd.MPDClient.__init__(self)
26         self.args = self._get_args()
27         self._run()
28
29     def _get_args(self):
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()
38         return args
39
40     def _print_time(self, duration):
41         if self.args.human:
42             print(timedelta(seconds=duration))
43         else:
44             print(duration)
45
46     def _run(self):
47         self.connect()
48         status = self.status()
49         plinfo = self.playlistinfo()
50         total_time = 0
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])
58         else:
59             total_time = sum(int(trk.get('time')) for trk in plinfo)
60         self._print_time(total_time)
61         self.disconnect()
62         sys.exit(0)
63
64
65 # Script starts here
66 if __name__ == '__main__':
67     try:
68         Mtime()
69     except KeyboardInterrupt:
70         sys.stdout.write('exit')
71
72 # VIM MODLINE
73 # vim: ai ts=4 sw=4 sts=4 expandtab