aboutsummaryrefslogtreecommitdiffstats
path: root/agl_service_voiceagent/utils/media_controller.py
blob: 60c2717fcc902715178481bb281357ec5af669a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (c) 2023 Malik Talha
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from mpd import MPDClient
import json
from agl_service_voiceagent.utils.config import get_config_value, get_logger
from agl_service_voiceagent.utils.common import load_json_file, words_to_number


class MediaController:
    def __init__(self):
        self.client = MPDClient()
        self.ip = get_config_value('MPD_IP')
        self.port = get_config_value('MPD_PORT')
        self.is_connected = self.connect()

    def connect(self):
        try:
            self.client.connect(self.ip, self.port)
            return True
        except Exception as e:
            print(f"[-] Error: Failed to connect to MPD server: {e}")
            return False

    def play(self, uri):
        '''
        Play the media file at the specified URI.

        Args:
            uri (str): The URI of the media file to play.

        '''
        if not self.is_connected:
            print("[-] Error: MPD client is not connected.")
            return False

        try:
            self.client.clear()
            self.client.add(uri)
            self.client.play()
            return True
        except Exception as e:
            print(f"[-] Error: Failed to play media: {e}")
            return False

    def stop(self):
        '''
        Stop the media player.
        '''
        if not self.is_connected:
            print("[-] Error: MPD client is not connected.")
            return False
        try:
            self.client.stop()
            return True
        except Exception as e:
            print(f"[-] Error: Failed to stop media: {e}")
            return False

    def pause(self):
        '''
        Pause the media player.
        '''
        if not self.is_connected:
            print("[-] Error: MPD client is not connected.")
            return False
        try:
            self.client.pause()
            return True
        except Exception as e:
            print(f"[-] Error: Failed to pause media: {e}")
            return False

    def resume(self):
        '''
        Resume the media player.
        '''
        if not self.is_connected:
            print("[-] Error: MPD client is not connected.")
            return False
        try:
            self.client.play()
            return True
        except Exception as e:
            print(f"[-] Error: Failed to resume media: {e}")
            return False
        
    def next(self):
        '''
        Play the next track in the playlist.
        '''
        if not self.is_connected:
            print("[-] Error: MPD client is not connected.")
            return False
        try:
            self.client.next()
            return True
        except Exception as e:
            print(f"[-] Error: Failed to play next track: {e}")
            return False

    def previous(self):
        '''
        Play the previous track in the playlist.
        '''
        if not self.is_connected:
            print("[-] Error: MPD client is not connected.")
            return False
        try:
            self.client.previous()
            return True
        except Exception as e:
            print(f"[-] Error: Failed to play previous track: {e}")
            return False

    def close(self):
        self.client.close()
        self.client.disconnect()