[MediaController] fix bugs (#493)
[platform/core/csapi/tizenfx.git] / src / Tizen.Multimedia.Remoting / Interop / Interop.MediaControllerClient.cs
1 /*
2  * Copyright (c) 2016 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 using System;
18 using System.Runtime.InteropServices;
19 using Tizen.Applications;
20 using Tizen.Multimedia.Remoting;
21
22 internal static partial class Interop
23 {
24     internal static partial class MediaControllerClient
25     {
26         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
27         internal delegate void ServerUpdatedCallback(string serverName, MediaControllerNativeServerState serverState,
28             IntPtr userData);
29
30         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
31         internal delegate void PlaybackUpdatedCallback(string serverName, IntPtr playback, IntPtr userData);
32
33         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
34         internal delegate void ShuffleModeUpdatedCallback(string serverName, MediaControllerNativeShuffleMode shuffleMode,
35             IntPtr userData);
36
37         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
38         internal delegate void RepeatModeUpdatedCallback(string serverName, MediaControllerNativeRepeatMode repeatMode, IntPtr userData);
39
40         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
41         internal delegate bool ActivatedServerCallback(string serverName, IntPtr userData);
42
43         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
44         internal delegate void CommandCompletedCallback(string serverName, string requestId, MediaControllerError result,
45             IntPtr bundleHandle, IntPtr userData);
46
47         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
48         internal delegate void CustomCommandReceivedCallback(string serverName, string requestId, string customEvent, IntPtr bundleHandle, IntPtr userData);
49
50
51         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_create")]
52         internal static extern MediaControllerError Create(out MediaControllerClientHandle handle);
53
54         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_destroy")]
55         internal static extern MediaControllerError Destroy(IntPtr handle);
56
57         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_server_updated_cb")]
58         internal static extern MediaControllerError SetServerUpdatedCb(MediaControllerClientHandle handle,
59             ServerUpdatedCallback callback, IntPtr userData = default(IntPtr));
60
61         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_server_updated_cb")]
62         internal static extern MediaControllerError UnsetServerUpdatedCb(MediaControllerClientHandle handle);
63
64         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_playback_updated_cb")]
65         internal static extern MediaControllerError SetPlaybackUpdatedCb(MediaControllerClientHandle handle,
66             PlaybackUpdatedCallback callback, IntPtr userData = default(IntPtr));
67
68         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_playback_updated_cb")]
69         internal static extern MediaControllerError UnsetPlaybackUpdatedCb(MediaControllerClientHandle handle);
70
71         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_shuffle_mode_updated_cb")]
72         internal static extern MediaControllerError SetShuffleModeUpdatedCb(MediaControllerClientHandle handle,
73             ShuffleModeUpdatedCallback callback, IntPtr userData = default(IntPtr));
74
75         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_shuffle_mode_updated_cb")]
76         internal static extern MediaControllerError UnsetShuffleModeUpdatedCb(MediaControllerClientHandle handle);
77
78         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_repeat_mode_updated_cb")]
79         internal static extern MediaControllerError SetRepeatModeUpdatedCb(MediaControllerClientHandle handle,
80             RepeatModeUpdatedCallback callback, IntPtr userData = default(IntPtr));
81
82         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_repeat_mode_updated_cb")]
83         internal static extern MediaControllerError UnsetRepeatModeUpdatedCb(MediaControllerClientHandle handle);
84
85         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_cmd_reply_received_cb")]
86         internal static extern MediaControllerError SetCommandCompletedCb(MediaControllerClientHandle handle,
87             CommandCompletedCallback callback, IntPtr userData = default(IntPtr));
88
89         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_cmd_reply_received_cb")]
90         internal static extern MediaControllerError UnsetCommandCompletedCb(MediaControllerClientHandle handle);
91
92         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_custom_event_received_cb")]
93         internal static extern MediaControllerError SetCustomEventCb(MediaControllerClientHandle handle,
94             CustomCommandReceivedCallback callback, IntPtr userData = default(IntPtr));
95
96         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_custom_event_received_cb")]
97         internal static extern MediaControllerError UnsetCustomEventCb(MediaControllerClientHandle handle);
98
99         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playback_state")]
100         internal static extern MediaControllerError GetPlaybackState(IntPtr playback, out MediaControllerNativePlaybackState state);
101
102         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playback_position")]
103         internal static extern MediaControllerError GetPlaybackPosition(IntPtr playback, out ulong position);
104
105         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_destroy_playback")]
106         internal static extern MediaControllerError DestroyPlayback(IntPtr playback);
107
108         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_latest_server_info")]
109         internal static extern MediaControllerError GetLatestServer(MediaControllerClientHandle handle,
110             out IntPtr serverName, out MediaControllerNativeServerState serverState);
111
112         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_playback_info")]
113         internal static extern MediaControllerError GetServerPlayback(MediaControllerClientHandle handle,
114             string serverName, out IntPtr playback);
115
116         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_shuffle_mode")]
117         internal static extern MediaControllerError GetServerShuffleMode(MediaControllerClientHandle handle,
118             string serverName, out MediaControllerNativeShuffleMode mode);
119
120         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_repeat_mode")]
121         internal static extern MediaControllerError GetServerRepeatMode(MediaControllerClientHandle handle,
122             string serverName, out MediaControllerNativeRepeatMode mode);
123
124         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playback_state_command")]
125         internal static extern MediaControllerError SendPlaybackStateCommand(MediaControllerClientHandle handle,
126             string serverName, MediaControllerNativePlaybackAction command);
127
128         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_custom_cmd")]
129         internal static extern MediaControllerError SendCustomCommandBundle(MediaControllerClientHandle handle,
130             string serverName, string command, SafeBundleHandle bundleHandle, out string requestId);
131
132         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_custom_cmd")]
133         internal static extern MediaControllerError SendCustomCommand(MediaControllerClientHandle handle,
134             string serverName, string command, IntPtr bundleHandle, out string requestId);
135
136         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playback_action_cmd")]
137         internal static extern MediaControllerError SendPlaybackActionCommand(MediaControllerClientHandle handle,
138             string serverName, MediaControllerNativePlaybackAction action, out string requestId);
139
140         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playback_position_cmd")]
141         internal static extern MediaControllerError SendPlaybackPositionCommand(MediaControllerClientHandle handle,
142             string serverName, ulong playbackPosition, out string requestId);
143
144         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_shuffle_mode_cmd")]
145         internal static extern MediaControllerError SendShuffleModeCommand(MediaControllerClientHandle handle,
146             string serverName, MediaControllerNativeShuffleMode mode, out string requestId);
147
148         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_repeat_mode_cmd")]
149         internal static extern MediaControllerError SendRepeatModeCommand(MediaControllerClientHandle handle,
150             string serverName, MediaControllerNativeRepeatMode mode, out string requestId);
151
152         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playlist_cmd")]
153         internal static extern MediaControllerError SendPlaylistCommand(MediaControllerClientHandle handle,
154             string serverName, string playlistName, string index, MediaControllerNativePlaybackAction mode,
155             ulong position, out string requestId);
156
157         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_search_cmd")]
158         internal static extern MediaControllerError SendSearchCommand(MediaControllerClientHandle handle,
159             string serverName, IntPtr searchHandle, out string requestId);
160
161         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_event_reply")]
162         internal static extern MediaControllerError SendCustomEventReply(MediaControllerClientHandle handle,
163             string serverName, string requestId, int result, IntPtr bundleHandle);
164         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_event_reply")]
165         internal static extern MediaControllerError SendCustomEventReplyBundle(MediaControllerClientHandle handle,
166             string serverName, string requestId, int result, SafeBundleHandle bundleHandle);
167
168
169         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_foreach_server")]
170         internal static extern MediaControllerError ForeachActivatedServer(MediaControllerClientHandle handle,
171             ActivatedServerCallback callback, IntPtr userData);
172
173         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_age_rating")]
174         internal static extern MediaControllerError GetAgeRating(IntPtr playbackHandle, out int rating);
175
176         #region Capability
177         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
178         internal delegate void PlaybackCapabilityUpdatedCallback(string serverName, IntPtr capaHandle,
179             IntPtr userData = default(IntPtr));
180
181         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
182         internal delegate void ShuffleCapabilityUpdatedCallback(string serverName, MediaControlCapabilitySupport support,
183             IntPtr userData = default(IntPtr));
184
185         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
186         internal delegate void RepeatCapabilityUpdatedCallback(string serverName, MediaControlCapabilitySupport support,
187             IntPtr userData = default(IntPtr));
188
189
190         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playback_content_type")]
191         internal static extern MediaControllerError GetPlaybackContentType(IntPtr playbackHandle,
192             out MediaControlContentType type);
193
194         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_icon")]
195         internal static extern MediaControllerError GetServerIcon(MediaControllerClientHandle clientHandle,
196             string serverName, out string uri);
197
198         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_playback_ability")]
199         internal static extern MediaControllerError GetPlaybackCapabilityHandle(MediaControllerClientHandle clientHandle,
200             string serverName, out IntPtr capaHandle);
201
202         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_shuffle_ability_support")]
203         internal static extern MediaControllerError GetShuffleCapability(MediaControllerClientHandle clientHandle,
204             string serverName, out MediaControlCapabilitySupport type);
205
206         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_repeat_ability_support")]
207         internal static extern MediaControllerError GetRepeatCapability(MediaControllerClientHandle clientHandle,
208             string serverName, out MediaControlCapabilitySupport type);
209
210         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_playback_ability_updated_cb")]
211         internal static extern MediaControllerError SetPlaybackCapabilityUpdatedCb(MediaControllerClientHandle clientHandle,
212             PlaybackCapabilityUpdatedCallback callback, IntPtr userData = default(IntPtr));
213
214         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_playback_ability_updated_cb")]
215         internal static extern MediaControllerError UnsetPlaybackCapabilityUpdatedCb(MediaControllerClientHandle clientHandle);
216
217         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_shuffle_ability_updated_cb")]
218         internal static extern MediaControllerError SetShuffleCapabilityUpdatedCb(MediaControllerClientHandle clientHandle,
219             ShuffleCapabilityUpdatedCallback callback, IntPtr userData = default(IntPtr));
220
221         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_shuffle_ability_updated_cb")]
222         internal static extern MediaControllerError UnsetShuffleCapabilityUpdatedCb(MediaControllerClientHandle clientHandle);
223
224         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_repeat_ability_updated_cb")]
225         internal static extern MediaControllerError SetRepeatCapabilityUpdatedCb(MediaControllerClientHandle clientHandle,
226             RepeatCapabilityUpdatedCallback callback, IntPtr userData = default(IntPtr));
227
228         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_repeat_ability_updated_cb")]
229         internal static extern MediaControllerError UnsetRepeatCapabilityUpdatedCb(MediaControllerClientHandle clientHandle);
230
231         [DllImport(Libraries.MediaController, EntryPoint = "mc_playback_ability_clone")]
232         internal static extern MediaControllerError CloneCapability(IntPtr capaSrcHandle, out IntPtr capaDstHandle);
233
234         [DllImport(Libraries.MediaController, EntryPoint = "mc_playback_ability_destroy")]
235         internal static extern MediaControllerError DestroyCapability(IntPtr capaHandle);
236
237         [DllImport(Libraries.MediaController, EntryPoint = "mc_playback_action_is_supported")]
238         internal static extern MediaControllerError IsCapabilitySupported(IntPtr capaHandle,
239             MediaControllerNativePlaybackAction action, out MediaControlCapabilitySupport support);
240         #endregion Capability
241
242         #region Search
243         [DllImport(Libraries.MediaController, EntryPoint = "mc_search_create")]
244         internal static extern MediaControllerError CreateSearchHandle(out IntPtr searchHandle);
245
246         [DllImport(Libraries.MediaController, EntryPoint = "mc_search_set_condition")]
247         internal static extern MediaControllerError SetSearchCondition(IntPtr searchHandle,
248             MediaControlContentType type, MediaControlSearchCategory category, string keyword, IntPtr bundle);
249
250         [DllImport(Libraries.MediaController, EntryPoint = "mc_search_set_condition")]
251         internal static extern MediaControllerError SetSearchConditionBundle(IntPtr searchHandle,
252             MediaControlContentType type, MediaControlSearchCategory category, string keyword, SafeBundleHandle bundle);
253
254         [DllImport(Libraries.MediaController, EntryPoint = "mc_search_destroy")]
255         internal static extern MediaControllerError DestroySearchHandle(IntPtr searchHandle);
256         #endregion Search
257     }
258
259     internal class MediaControllerClientHandle : SafeHandle
260     {
261         protected MediaControllerClientHandle() : base(IntPtr.Zero, true)
262         {
263         }
264
265         public override bool IsInvalid => handle == IntPtr.Zero;
266
267         protected override bool ReleaseHandle()
268         {
269             var ret = MediaControllerClient.Destroy(handle);
270             if (ret != MediaControllerError.None)
271             {
272                 Tizen.Log.Debug(GetType().FullName, $"Failed to release native {GetType().Name}");
273                 return false;
274             }
275
276             return true;
277         }
278     }
279 }