mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 01:05:45 +00:00
Bug 1620340 - part1: Implement SetMediaMetadata() for the MPRISServiceHandler, r=alwu
Differential Revision: https://phabricator.services.mozilla.com/D65801 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
85fc50fbee
commit
673ce25897
@ -266,13 +266,7 @@ static GVariant* HandleGetProperty(GDBusConnection* aConnection,
|
||||
"Invalid Playback Status");
|
||||
return nullptr;
|
||||
case Property::eGetMetadata:
|
||||
std::vector<struct MPRISMetadata> list = handler->GetDefaultMetadata();
|
||||
GVariantBuilder builder;
|
||||
g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}"));
|
||||
for (auto const& data : list) {
|
||||
g_variant_builder_add(&builder, "{sv}", data.mKey, data.mValue);
|
||||
}
|
||||
return g_variant_builder_end(&builder);
|
||||
return handler->GetMetadataAsGVariant();
|
||||
}
|
||||
|
||||
MOZ_ASSERT_UNREACHABLE("Switch Statement incomplete");
|
||||
@ -606,6 +600,31 @@ GVariant* MPRISServiceHandler::GetPlaybackStatus() const {
|
||||
}
|
||||
}
|
||||
|
||||
void MPRISServiceHandler::SetMediaMetadata(
|
||||
const dom::MediaMetadataBase& aMetadata) {
|
||||
mMetadata = Some(aMetadata);
|
||||
}
|
||||
|
||||
GVariant* MPRISServiceHandler::GetMetadataAsGVariant() const {
|
||||
GVariantBuilder builder;
|
||||
g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}"));
|
||||
g_variant_builder_add(&builder, "{sv}", "mpris:trackid",
|
||||
g_variant_new("o", "/valid/path"));
|
||||
|
||||
if (mMetadata.isSome()) {
|
||||
g_variant_builder_add(
|
||||
&builder, "{sv}", "xesam:title",
|
||||
g_variant_new_string(NS_ConvertUTF16toUTF8(mMetadata->mTitle).get()));
|
||||
GVariantBuilder artistBuilder; // Artists is a list.
|
||||
g_variant_builder_init(&artistBuilder, G_VARIANT_TYPE("as"));
|
||||
g_variant_builder_add(&artistBuilder, "s",
|
||||
NS_ConvertUTF16toUTF8(mMetadata->mArtist).get());
|
||||
g_variant_builder_add(&builder, "{sv}", "xesam:artist",
|
||||
g_variant_builder_end(&artistBuilder));
|
||||
}
|
||||
return g_variant_builder_end(&builder);
|
||||
}
|
||||
|
||||
void MPRISServiceHandler::EmitEvent(mozilla::dom::MediaControlKeysEvent event) {
|
||||
for (auto& listener : mListeners) {
|
||||
listener->OnKeyPressed(event);
|
||||
@ -658,20 +677,5 @@ bool MPRISServiceHandler::OpenUri(char* aUri) {
|
||||
return false;
|
||||
}
|
||||
|
||||
std::vector<struct MPRISMetadata> MPRISServiceHandler::GetDefaultMetadata() {
|
||||
std::vector<struct MPRISMetadata> list;
|
||||
|
||||
list.push_back({"mpris:trackid", g_variant_new("o", "/valid/path")});
|
||||
list.push_back({"xesam:title", g_variant_new_string("Firefox")});
|
||||
|
||||
GVariantBuilder artistBuilder; // Artists is a list.
|
||||
g_variant_builder_init(&artistBuilder, G_VARIANT_TYPE("as"));
|
||||
g_variant_builder_add(&artistBuilder, "s", "Mozilla");
|
||||
GVariant* artists = g_variant_builder_end(&artistBuilder);
|
||||
|
||||
list.push_back({"xesam:artist", artists});
|
||||
return list;
|
||||
}
|
||||
|
||||
} // namespace widget
|
||||
} // namespace mozilla
|
||||
|
@ -18,11 +18,6 @@
|
||||
namespace mozilla {
|
||||
namespace widget {
|
||||
|
||||
struct MPRISMetadata {
|
||||
const char* mKey;
|
||||
GVariant* mValue;
|
||||
};
|
||||
|
||||
/**
|
||||
* This class implements the "MPRIS" D-Bus Service
|
||||
* (https://specifications.freedesktop.org/mpris-spec/2.2),
|
||||
@ -114,7 +109,6 @@ class MPRISServiceHandler final : public dom::MediaControlKeysEventSource {
|
||||
void SetShuffle(bool aShuffle);
|
||||
#endif
|
||||
|
||||
std::vector<struct MPRISMetadata> GetDefaultMetadata();
|
||||
double GetVolume() const;
|
||||
bool SetVolume(double aVolume);
|
||||
int64_t GetPosition() const;
|
||||
@ -126,6 +120,9 @@ class MPRISServiceHandler final : public dom::MediaControlKeysEventSource {
|
||||
bool CanSeek() const;
|
||||
bool CanControl() const;
|
||||
|
||||
void SetMediaMetadata(const dom::MediaMetadataBase& aMetadata) override;
|
||||
GVariant* GetMetadataAsGVariant() const;
|
||||
|
||||
private:
|
||||
~MPRISServiceHandler();
|
||||
|
||||
@ -142,6 +139,7 @@ class MPRISServiceHandler final : public dom::MediaControlKeysEventSource {
|
||||
GDBusConnection* mConnection = nullptr;
|
||||
bool mInitialized = false;
|
||||
nsAutoCString mIdentity;
|
||||
Maybe<dom::MediaMetadataBase> mMetadata;
|
||||
|
||||
// Queries nsAppInfo to get the branded browser name and vendor
|
||||
void InitIdentity();
|
||||
@ -158,7 +156,7 @@ class MPRISServiceHandler final : public dom::MediaControlKeysEventSource {
|
||||
static void OnBusAcquiredStatic(GDBusConnection* aConnection,
|
||||
const gchar* aName, gpointer aUserData);
|
||||
|
||||
void EmitEvent(mozilla::dom::MediaControlKeysEvent event);
|
||||
void EmitEvent(dom::MediaControlKeysEvent event);
|
||||
};
|
||||
|
||||
} // namespace widget
|
||||
|
Loading…
Reference in New Issue
Block a user