[MediaController] Add guards to map of playlists' handles
[platform/core/api/webapi-plugins.git] / src / mediacontroller / mediacontroller_instance.h
1 /*
2  * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *    Licensed under the Apache License, Version 2.0 (the "License");
5  *    you may not use this file except in compliance with the License.
6  *    You may obtain a copy of the License at
7  *
8  *        http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *    Unless required by applicable law or agreed to in writing, software
11  *    distributed under the License is distributed on an "AS IS" BASIS,
12  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *    See the License for the specific language governing permissions and
14  *    limitations under the License.
15  */
16
17 #ifndef MEDIACONTROLLER_MEDIACONTROLLER_INSTANCE_H_
18 #define MEDIACONTROLLER_MEDIACONTROLLER_INSTANCE_H_
19
20 #include <memory>
21 #include <mutex>
22
23 #include "common/extension.h"
24 #include "mediacontroller/mediacontroller_client.h"
25 #include "mediacontroller/mediacontroller_server.h"
26
27 namespace extension {
28 namespace mediacontroller {
29
30 class MediaControllerInstance : public common::ParsedInstance {
31  public:
32   MediaControllerInstance();
33   virtual ~MediaControllerInstance();
34
35  private:
36   // server
37   void MediaControllerManagerCreateServer(const picojson::value& args, picojson::object& out);
38   void MediaControllerServerUpdatePlaybackState(const picojson::value& args, picojson::object& out);
39   void MediaControllerServerUpdatePlaybackPosition(const picojson::value& args,
40                                                    picojson::object& out);
41   void MediaControllerServerUpdatePlaybackAgeRating(const picojson::value& args,
42                                                     picojson::object& out);
43   void MediaControllerServerUpdateRepeatMode(const picojson::value& args, picojson::object& out);
44   void MediaControllerServerUpdateRepeatState(const picojson::value& args, picojson::object& out);
45   void MediaControllerServerUpdateShuffleMode(const picojson::value& args, picojson::object& out);
46   void MediaControllerServerUpdatePlaybackContentType(const picojson::value& args,
47                                                       picojson::object& out);
48   void MediaControllerServerUpdateMetadata(const picojson::value& args, picojson::object& out);
49   void MediaControllerServerAddChangeRequestPlaybackInfoListener(const picojson::value& args,
50                                                                  picojson::object& out);
51   void MediaControllerServerRemoveChangeRequestPlaybackInfoListener(const picojson::value& args,
52                                                                     picojson::object& out);
53
54   void MediaControllerServerAddSearchRequestListener(const picojson::value& args,
55                                                      picojson::object& out);
56   void MediaControllerServerRemoveSearchRequestListener(const picojson::value& args,
57                                                         picojson::object& out);
58
59   void MediaControllerServerReplyCommand(const picojson::value& args, picojson::object& out);
60   void MediaControllerServerAddCommandListener(const picojson::value& args, picojson::object& out);
61   void MediaControllerServerRemoveCommandListener(const picojson::value& args,
62                                                   picojson::object& out);
63   void MediaControllerServerCreatePlaylist(const picojson::value& args, picojson::object& out);
64   void MediaControllerServerSavePlaylist(const picojson::value& args, picojson::object& out);
65   void MediaControllerServerDeletePlaylist(const picojson::value& args, picojson::object& out);
66   void MediaControllerServerUpdatePlaybackItem(const picojson::value& args, picojson::object& out);
67   void MediaControllerServerGetAllPlaylists(const picojson::value& args, picojson::object& out);
68   void MediaControllerServerUpdateIconURI(const picojson::value& args, picojson::object& out);
69   void MediaControllerServerSavePlaybackAbilities(const picojson::value& args,
70                                                   picojson::object& out);
71   void MediaControllerServerSetDisplayModeAbility(const picojson::value& args,
72                                                   picojson::object& out);
73   void MediaControllerServerSetDisplayRotationAbility(const picojson::value& args,
74                                                       picojson::object& out);
75   void MediaControllerServerSetSimpleAbility(const picojson::value& args, picojson::object& out);
76   void MediaControllerServerGetAllClientsInfo(const picojson::value& args, picojson::object& out);
77
78   // client info
79   void MediaControllerClientInfoSendEvent(const picojson::value& args, picojson::object& out);
80
81   // client
82   void MediaControllerManagerGetClient(const picojson::value& args, picojson::object& out);
83   void MediaControllerClientFindServers(const picojson::value& args, picojson::object& out);
84   void MediaControllerClientGetLatestServerInfo(const picojson::value& args, picojson::object& out);
85   void MediaControllerClientGetPlaybackInfo(const picojson::value& args, picojson::object& out);
86   void MediaControllerClientGetPlaybackAbility(const picojson::value& args, picojson::object& out);
87   void MediaControllerClientGetDisplayModeAbility(const picojson::value& args,
88                                                   picojson::object& out);
89   void MediaControllerClientGetDisplayRotationAbility(const picojson::value& args,
90                                                       picojson::object& out);
91   void MediaControllerClientGetSimpleAbility(const picojson::value& args, picojson::object& out);
92   void MediaControllerClientAddAbilityChangeListener(const picojson::value& args,
93                                                      picojson::object& out);
94   void MediaControllerClientRemoveAbilityChangeListener(const picojson::value& args,
95                                                         picojson::object& out);
96   void MediaControllerClientFindSubscribedServers(const picojson::value& args,
97                                                   picojson::object& out);
98   void MediaControllerClientSetCustomEventListener(const picojson::value& args,
99                                                    picojson::object& out);
100   void MediaControllerClientUnsetCustomEventListener(const picojson::value& args,
101                                                      picojson::object& out);
102   void MediaControllerClientSendEventReply(const picojson::value& args, picojson::object& out);
103
104   // serverInfo
105   void MediaControllerServerInfoSendPlaybackState(const picojson::value& args,
106                                                   picojson::object& out);
107   void MediaControllerServerInfoSendPlaybackPosition(const picojson::value& args,
108                                                      picojson::object& out);
109   void MediaControllerServerInfoSendRepeatMode(const picojson::value& args, picojson::object& out);
110   void MediaControllerServerInfoSendRepeatState(const picojson::value& args, picojson::object& out);
111   void MediaControllerServerInfoSendShuffleMode(const picojson::value& args, picojson::object& out);
112   void MediaControllerServerInfoSendSearchRequest(const picojson::value& args,
113                                                   picojson::object& out);
114   void MediaControllerServerInfoSendCommand(const picojson::value& args, picojson::object& out);
115   void MediaControllerServerInfoAddServerStatusChangeListener(const picojson::value& args,
116                                                               picojson::object& out);
117   void MediaControllerServerInfoRemoveServerStatusChangeListener(const picojson::value& args,
118                                                                  picojson::object& out);
119   void MediaControllerServerInfoAddPlaybackInfoChangeListener(const picojson::value& args,
120                                                               picojson::object& out);
121   void MediaControllerServerInfoRemovePlaybackInfoChangeListener(const picojson::value& args,
122                                                                  picojson::object& out);
123   void MediaControllerServerInfoSendPlaybackItem(const picojson::value& args,
124                                                  picojson::object& out);
125   void MediaControllerServerInfoAddPlaylistUpdatedListener(const picojson::value& args,
126                                                            picojson::object& out);
127   void MediaControllerServerInfoRemovePlaylistUpdatedListener(const picojson::value& args,
128                                                               picojson::object& out);
129   void MediaControllerServerInfoGetAllPlaylists(const picojson::value& args, picojson::object& out);
130   void MediaControllerServerInfoGetIconURI(const picojson::value& args, picojson::object& out);
131   void MediaControllerServerInfoPlaybackInfoSendPlaybackAction(const picojson::value& args,
132                                                                picojson::object& out);
133   void MediaControllerServerInfoPlaybackInfoSendPlaybackPosition(const picojson::value& args,
134                                                                  picojson::object& out);
135   void MediaControllerServerInfoPlaybackInfoSendShuffleMode(const picojson::value& args,
136                                                             picojson::object& out);
137   void MediaControllerServerInfoPlaybackInfoSendRepeatState(const picojson::value& args,
138                                                             picojson::object& out);
139
140   // abilities_info
141   void MediaControllerAbilitiesInfoSubscribe(const picojson::value& args, picojson::object& out);
142   void MediaControllerAbilitiesInfoUnsubscribe(const picojson::value& args, picojson::object& out);
143
144   // playlist
145   void MediaControllerPlaylistAddItem(const picojson::value& args, picojson::object& out);
146   void MediaControllerPlaylistGetItems(const picojson::value& args, picojson::object& out);
147
148   // subtitles
149   void MediaControllerSubtitlesUpdateEnabled(const picojson::value& args, picojson::object& out);
150   void MediaControllerSubtitlesAddChangeRequestListener(const picojson::value& args,
151                                                         picojson::object& out);
152   void MediaControllerSubtitlesRemoveChangeRequestListener(const picojson::value& args,
153                                                            picojson::object& out);
154   void MediaControllerSubtitlesInfoGetEnabled(const picojson::value& args, picojson::object& out);
155   void MediaControllerSubtitlesInfoSendRequest(const picojson::value& args, picojson::object& out);
156   void MediaControllerSubtitlesInfoAddModeChangeListener(const picojson::value& args,
157                                                          picojson::object& out);
158   void MediaControllerSubtitlesInfoRemoveModeChangeListener(const picojson::value& args,
159                                                             picojson::object& out);
160
161   // mode360
162   void MediaControllerMode360UpdateEnabled(const picojson::value& args, picojson::object& out);
163   void MediaControllerMode360AddChangeRequestListener(const picojson::value& args,
164                                                       picojson::object& out);
165   void MediaControllerMode360RemoveChangeRequestListener(const picojson::value& args,
166                                                          picojson::object& out);
167   void MediaControllerMode360InfoGetEnabled(const picojson::value& args, picojson::object& out);
168   void MediaControllerMode360InfoSendRequest(const picojson::value& args, picojson::object& out);
169   void MediaControllerMode360InfoAddModeChangeListener(const picojson::value& args,
170                                                        picojson::object& out);
171   void MediaControllerMode360InfoRemoveModeChangeListener(const picojson::value& args,
172                                                           picojson::object& out);
173
174   // displayMode
175   void MediaControllerDisplayModeUpdateType(const picojson::value& args, picojson::object& out);
176   void MediaControllerDisplayModeAddChangeRequestListener(const picojson::value& args,
177                                                           picojson::object& out);
178   void MediaControllerDisplayModeRemoveChangeRequestListener(const picojson::value& args,
179                                                              picojson::object& out);
180   void MediaControllerDisplayModeInfoGetType(const picojson::value& args, picojson::object& out);
181   void MediaControllerDisplayModeInfoSendType(const picojson::value& args, picojson::object& out);
182   void MediaControllerDisplayModeInfoAddModeChangeListener(const picojson::value& args,
183                                                            picojson::object& out);
184   void MediaControllerDisplayModeInfoRemoveModeChangeListener(const picojson::value& args,
185                                                               picojson::object& out);
186
187   // displayRotation
188   void MediaControllerDisplayRotationUpdate(const picojson::value& args, picojson::object& out);
189   void MediaControllerDisplayRotationAddChangeRequestListener(const picojson::value& args,
190                                                               picojson::object& out);
191   void MediaControllerDisplayRotationRemoveChangeRequestListener(const picojson::value& args,
192                                                                  picojson::object& out);
193   void MediaControllerDisplayRotationInfoGet(const picojson::value& args, picojson::object& out);
194   void MediaControllerDisplayRotationInfoSend(const picojson::value& args, picojson::object& out);
195   void MediaControllerDisplayRotationInfoAddChangeListener(const picojson::value& args,
196                                                            picojson::object& out);
197   void MediaControllerDisplayRotationInfoRemoveChangeListener(const picojson::value& args,
198                                                               picojson::object& out);
199
200   // playlists
201   void MediaControllerPlaylistsGetPlaylist(const picojson::value& args, picojson::object& out);
202
203   // playlists_info
204   void MediaControllerPlaylistsInfoSendPlaybackItem(const picojson::value& args,
205                                                     picojson::object& out);
206   void MediaControllerPlaylistsInfoGetPlaylist(const picojson::value& args, picojson::object& out);
207
208   std::shared_ptr<MediaControllerClient> client_;
209   std::shared_ptr<MediaControllerServer> server_;
210   std::map<std::string, PlaylistHandleMap> server_playlist_map_;
211   // This mutex is used to guard playlist usage by server_
212   // Some of the calls are async, so it needs to be guarded
213   std::mutex playlist_map_mutex_;
214 };
215
216 }  // namespace mediacontroller
217 }  // namespace extension
218
219 #endif  // MEDIACONTROLLER_MEDIACONTROLLER_INSTANCE_H_