File: testlib-mpris-mock.c

package info (click to toggle)
phosh 0.53.0-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 9,936 kB
  • sloc: ansic: 83,383; xml: 3,981; python: 717; sh: 449; makefile: 34; lisp: 22; javascript: 6
file content (93 lines) | stat: -rw-r--r-- 2,798 bytes parent folder | download | duplicates (2)
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
/*
 * Copyright (C) 2021 Purism SPC
 *
 * SPDX-License-Identifier: GPL-3.0-or-later
 *
 * Author: Guido Günther <agx@sigxcpu.org>
 */

#include "testlib-mpris-mock.h"

#define OBJECT_PATH "/org/mpris/MediaPlayer2"
#define BUS_NAME "org.mpris.MediaPlayer2.PhoshMock"


static char *
load_icon (void)
{
  g_autoptr (GError) err = NULL;
  g_autoptr (GBytes) bytes = NULL;
  g_autofree char *base64;

  bytes = g_resources_lookup_data ("/mobi/phosh/tests/phosh-logo.png", 0, &err);
  g_assert_no_error (err);
  g_assert_true (bytes != NULL);

  base64 = g_base64_encode (g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes));
  return g_strdup_printf ("data:image/png;base64,%s", base64);
}


static void
on_bus_acquired (GDBusConnection *connection,
                 const char      *name,
                 gpointer         user_data)
{
  PhoshTestMprisMock *self = user_data;
  g_autoptr (GError) err = NULL;
  GVariant *metadata;
  GVariantBuilder builder;
  g_autofree char *uri = load_icon ();

  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
  g_variant_builder_add (&builder, "{sv}", "xesam:title",
                         g_variant_new_string ("The Worldhood of the World (As Such)"));
  g_variant_builder_add (&builder, "{sv}", "mpris:artUrl", g_variant_new_string (uri));
  metadata = g_variant_builder_end (&builder);

  phosh_dbus_media_player2_player_set_can_go_previous (self->skel, TRUE);
  phosh_dbus_media_player2_player_set_can_go_next (self->skel, TRUE);
  phosh_dbus_media_player2_player_set_can_play (self->skel, TRUE);
  phosh_dbus_media_player2_player_set_playback_status (self->skel, "Playing");
  phosh_dbus_media_player2_player_set_metadata (self->skel, metadata);
  g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (self->skel),
                                    connection,
                                    OBJECT_PATH,
                                    &err);
  g_assert_no_error (err);
}


PhoshTestMprisMock *
phosh_test_mpris_mock_new (void)
{
  PhoshTestMprisMock *self;

  self = g_new0 (PhoshTestMprisMock, 1);
  self->skel = phosh_dbus_media_player2_player_skeleton_new ();
  return self;
}


void
phosh_test_mpris_mock_dispose (PhoshTestMprisMock *self)
{
  g_clear_handle_id (&self->bus_id,  g_bus_unown_name);
  g_clear_object (&self->skel);
  g_free (self);
}


void
phosh_mpris_mock_export (PhoshTestMprisMock *self)
{
  self->bus_id = g_bus_own_name (G_BUS_TYPE_SESSION,
                                 BUS_NAME,
                                 G_BUS_NAME_OWNER_FLAGS_NONE,
                                 on_bus_acquired,
                                 NULL,
                                 NULL,
                                 self,
                                 NULL);
  g_assert_true (self->bus_id > 0);
}