]> git.sesse.net Git - vlc/blob - bindings/phonon/vlc/mediacontroller.cpp
Phonon Backend using VLC
[vlc] / bindings / phonon / vlc / mediacontroller.cpp
1 /*****************************************************************************
2  * VLC backend for the Phonon library                                        *
3  * Copyright (C) 2007-2008 Tanguy Krotoff <tkrotoff@gmail.com>               *
4  * Copyright (C) 2008 Lukas Durfina <lukas.durfina@gmail.com>                *
5  * Copyright (C) 2009 Fathi Boudra <fabo@kde.org>                            *
6  *                                                                           *
7  * This program is free software; you can redistribute it and/or             *
8  * modify it under the terms of the GNU Lesser General Public                *
9  * License as published by the Free Software Foundation; either              *
10  * version 3 of the License, or (at your option) any later version.          *
11  *                                                                           *
12  * This program is distributed in the hope that it will be useful,           *
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of            *
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         *
15  * Lesser General Public License for more details.                           *
16  *                                                                           *
17  * You should have received a copy of the GNU Lesser General Public          *
18  * License along with this package; if not, write to the Free Software       *
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA *
20  *****************************************************************************/
21
22 #include "mediacontroller.h"
23
24 namespace Phonon
25 {
26 namespace VLC {
27
28 MediaController::MediaController()
29 {
30     clearMediaController();
31 }
32
33 MediaController::~MediaController()
34 {
35 }
36
37 void MediaController::clearMediaController()
38 {
39     current_audio_channel = Phonon::AudioChannelDescription();
40     available_audio_channels.clear();
41
42     current_subtitle = Phonon::SubtitleDescription();
43     available_subtitles.clear();
44
45 //    current_chapter = Phonon::ChapterDescription();
46 //    available_chapters.clear();
47     current_chapter = 0;
48     available_chapters = 0;
49
50 //    current_title = Phonon::TitleDescription();
51 //    available_titles.clear();
52     current_title = 0;
53     available_titles = 0;
54
55     i_current_angle = 0;
56     i_available_angles = 0;
57
58     b_autoplay_titles = false;
59 }
60
61 bool MediaController::hasInterface(Interface iface) const
62 {
63     switch (iface) {
64     case AddonInterface::NavigationInterface:
65         return true;
66         break;
67     case AddonInterface::ChapterInterface:
68         return true;
69         break;
70     case AddonInterface::AngleInterface:
71         return true;
72         break;
73     case AddonInterface::TitleInterface:
74         return true;
75         break;
76     case AddonInterface::SubtitleInterface:
77         return true;
78         break;
79     case AddonInterface::AudioChannelInterface:
80         return true;
81         break;
82     default:
83         qCritical() << __FUNCTION__
84         << "Error: unsupported AddonInterface::Interface"
85         << iface;
86     }
87
88     return false;
89 }
90
91 QVariant MediaController::interfaceCall(Interface iface, int i_command, const QList<QVariant> & arguments)
92 {
93     switch (iface) {
94     case AddonInterface::ChapterInterface:
95         switch (static_cast<AddonInterface::ChapterCommand>(i_command)) {
96 //        case AddonInterface::availableChapters:
97 //            return QVariant::fromValue(availableChapters());
98         case AddonInterface::availableChapters:
99             return availableChapters();
100 //        case AddonInterface::currentChapter:
101 //            return QVariant::fromValue(currentChapter());
102         case AddonInterface::chapter:
103             return currentChapter();
104 //        case AddonInterface::setCurrentChapter:
105 //            if( arguments.isEmpty() || !arguments.first().canConvert<ChapterDescription>()) {
106 //                    qCritical() << __FUNCTION__ << "Error: arguments invalid";
107 //                    return false;
108 //                }
109 //            setCurrentChapter(arguments.first().value<ChapterDescription>());
110 //            return true;
111         case AddonInterface::setChapter:
112             if (arguments.isEmpty() || !arguments.first().canConvert(QVariant::Int)) {
113                 qCritical() << __FUNCTION__ << "Error: arguments invalid";
114                 return false;
115             }
116             setCurrentChapter(arguments.first().toInt());
117             return true;
118         default:
119             qCritical() << __FUNCTION__
120             << "Error: unsupported AddonInterface::ChapterInterface command:"
121             << i_command;
122         }
123         break;
124     case AddonInterface::TitleInterface:
125         switch (static_cast<AddonInterface::TitleCommand>(i_command)) {
126 //        case AddonInterface::availableTitles:
127 //            return QVariant::fromValue(availableTitles());
128         case AddonInterface::availableTitles:
129             return availableTitles();
130 //        case AddonInterface::currentTitle:
131 //            return QVariant::fromValue(currentTitle());
132         case AddonInterface::title:
133             return currentTitle();
134 //        case AddonInterface::setCurrentTitle:
135 //            if( arguments.isEmpty() || !arguments.first().canConvert<TitleDescription>()) {
136 //                    qCritical() << __FUNCTION__ << "Error: arguments invalid";
137 //                    return false;
138 //            }
139 //            setCurrentTitle(arguments.first().value<TitleDescription>());
140 //            return true;
141         case AddonInterface::setTitle:
142             if (arguments.isEmpty() || !arguments.first().canConvert(QVariant::Int)) {
143                 qCritical() << __FUNCTION__ << "Error: arguments invalid";
144                 return false;
145             }
146             setCurrentTitle(arguments.first().toInt());
147             return true;
148         case AddonInterface::autoplayTitles:
149             return autoplayTitles();
150         case AddonInterface::setAutoplayTitles:
151             if (arguments.isEmpty() || !arguments.first().canConvert(QVariant::Bool)) {
152                 qCritical() << __FUNCTION__ << "Error: arguments invalid";
153                 return false;
154             }
155             setAutoplayTitles(arguments.first().toBool());
156             return true;
157         default:
158             qCritical() << __FUNCTION__
159             << "Error: unsupported AddonInterface::TitleInterface command:"
160             << i_command;
161         }
162         break;
163     case AddonInterface::AngleInterface:
164         switch (static_cast<AddonInterface::AngleCommand>(i_command)) {
165         case AddonInterface::availableAngles:
166         case AddonInterface::angle:
167         case AddonInterface::setAngle:
168             break;
169         default:
170             qCritical() << __FUNCTION__
171             << "Error: unsupported AddonInterface::AngleInterface command:"
172             << i_command;
173         }
174         break;
175     case AddonInterface::SubtitleInterface:
176         switch (static_cast<AddonInterface::SubtitleCommand>(i_command)) {
177         case AddonInterface::availableSubtitles:
178             return QVariant::fromValue(availableSubtitles());
179         case AddonInterface::currentSubtitle:
180             return QVariant::fromValue(currentSubtitle());
181         case AddonInterface::setCurrentSubtitle:
182             if (arguments.isEmpty() || !arguments.first().canConvert<SubtitleDescription>()) {
183                 qCritical() << __FUNCTION__ << "Error: arguments invalid";
184                 return false;
185             }
186             setCurrentSubtitle(arguments.first().value<SubtitleDescription>());
187             return true;
188         default:
189             qCritical() << __FUNCTION__
190             << "Error: unsupported AddonInterface::SubtitleInterface command:"
191             << i_command;
192         }
193         break;
194     case AddonInterface::AudioChannelInterface:
195         switch (static_cast<AddonInterface::AudioChannelCommand>(i_command)) {
196         case AddonInterface::availableAudioChannels:
197             return QVariant::fromValue(availableAudioChannels());
198         case AddonInterface::currentAudioChannel:
199             return QVariant::fromValue(currentAudioChannel());
200         case AddonInterface::setCurrentAudioChannel:
201             if (arguments.isEmpty() || !arguments.first().canConvert<AudioChannelDescription>()) {
202                 qCritical() << __FUNCTION__ << "Error: arguments invalid";
203                 return false;
204             }
205             setCurrentAudioChannel(arguments.first().value<AudioChannelDescription>());
206             return true;
207         default:
208             qCritical() << __FUNCTION__
209             << "Error: unsupported AddonInterface::AudioChannelInterface command:"
210             << i_command;
211         }
212         break;
213     default:
214         qCritical() << __FUNCTION__
215         << "Error: unsupported AddonInterface::Interface:"
216         << iface;
217     }
218
219     return QVariant();
220 }
221
222 }
223 } // Namespace Phonon::VLC