summaryrefslogtreecommitdiff
path: root/src/libplayback-wrapper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libplayback-wrapper.cpp')
-rw-r--r--src/libplayback-wrapper.cpp96
1 files changed, 96 insertions, 0 deletions
diff --git a/src/libplayback-wrapper.cpp b/src/libplayback-wrapper.cpp
new file mode 100644
index 0000000..a1cfbab
--- /dev/null
+++ b/src/libplayback-wrapper.cpp
@@ -0,0 +1,96 @@
+#include "libplayback-wrapper.h"
+
+LibPlaybackWrapper::LibPlaybackWrapper(Resource *res)
+ : QObject(res), dbusConnection(NULL), libPlaybackHandle(NULL)
+{
+ resource = res;
+}
+
+LibPlaybackWrapper::~LibPlaybackWrapper()
+{
+ pb_playback_destroy(libPlaybackHandle);
+}
+
+bool LibPlaybackWrapper::initialize()
+{
+ DBusError dbusError;
+ dbusConnection = dbus_bus_get(DBUS_BUS_SESSION, &dbusError);
+ if(dbusConnection == NULL) {
+ return false;
+ }
+
+ enum pb_class_e libPlaybackClass = resourceClassToLibPlaybackClass(resource->getResourceClass());
+ quint16 libPlaybackFlags = resourceFlagToLibPlaybackFlags(resource->getResourceFlags());
+ libPlaybackHandle = pb_playback_new_2(dbusConnection, libPlaybackClass, libPlaybackFlags,
+ PB_STATE_STOP, libPlaybackStateHandler, this);
+ if(libPlaybackHandle == NULL) {
+ return false;
+ }
+ return true;
+}
+
+enum pb_class_e resourceClassToLibPlaybackClass(enum ResourceClass resourceClass)
+{
+ switch(resourceClass) {
+ case InvalidClass:
+ return PB_CLASS_NONE;
+ case CallClass:
+ return PB_CLASS_CALL;
+ case MediaClass:
+ return PB_CLASS_MEDIA;
+ case BackgroundClass:
+ return PB_CLASS_BACKGROUND;
+ case RingtoneClass:
+ return PB_CLASS_RINGTONE;
+ case VoiceUIClass:
+ return PB_CLASS_VOICEUI;
+ case CameraClass:
+ return PB_CLASS_CAMERA;
+ case GameClass:
+ return PB_CLASS_GAME;
+ case AlarmClass:
+ return PB_CLASS_ALARM;
+ case FlashClass:
+ return PB_CLASS_FLASH;
+ case SystemClass:
+ return PB_CLASS_SYSTEM;
+ case InputClass:
+ return PB_CLASS_INPUT;
+ default:
+ return PB_CLASS_NONE;
+ }
+}
+
+quint16 resourceFlagToLibPlaybackFlags(quint16 resourceFlags)
+{
+ quint16 libPlaybackFlags = 0;
+ for (int flag=RP_FLAGS_AUDIO;flag<RP_FLAGS_VIDEO_RECORDING;flag=flag<<1) {
+ if((resourceFlags & flag) == flag) {
+ switch(flag) {
+ case RP_FLAGS_AUDIO:
+ libPlaybackFlags += PB_FLAG_AUDIO;
+ break;
+ case RP_FLAGS_VIDEO:
+ libPlaybackFlags += PB_FLAG_VIDEO;
+ break;
+ case RP_FLAGS_AUDIO_RECORDING:
+ libPlaybackFlags += PB_FLAG_AUDIO_RECORDING;
+ break;
+ case RP_FLAGS_VIDEO_RECORDING:
+ libPlaybackFlags += PB_FLAG_VIDEO_RECORDING;
+ break;
+ }
+ }
+ }
+ return libPlaybackFlags;
+}
+
+void libPlaybackStateHandler(pb_playback_t *libPlaybackHandle, enum pb_state_e requestedState,
+ pb_req_t* playbackRequest, void *data)
+{
+// LibPlaybackWrapper *libPlaybackWrapper = (LibPlaybackWrapper*)data;
+
+// libPlaybackWrapper->handleNewState(requestedState);
+
+ pb_playback_req_completed(libPlaybackHandle, playbackRequest);
+}