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");
|
"Invalid Playback Status");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
case Property::eGetMetadata:
|
case Property::eGetMetadata:
|
||||||
std::vector<struct MPRISMetadata> list = handler->GetDefaultMetadata();
|
return handler->GetMetadataAsGVariant();
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MOZ_ASSERT_UNREACHABLE("Switch Statement incomplete");
|
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) {
|
void MPRISServiceHandler::EmitEvent(mozilla::dom::MediaControlKeysEvent event) {
|
||||||
for (auto& listener : mListeners) {
|
for (auto& listener : mListeners) {
|
||||||
listener->OnKeyPressed(event);
|
listener->OnKeyPressed(event);
|
||||||
@ -658,20 +677,5 @@ bool MPRISServiceHandler::OpenUri(char* aUri) {
|
|||||||
return false;
|
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 widget
|
||||||
} // namespace mozilla
|
} // namespace mozilla
|
||||||
|
@ -18,11 +18,6 @@
|
|||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace widget {
|
namespace widget {
|
||||||
|
|
||||||
struct MPRISMetadata {
|
|
||||||
const char* mKey;
|
|
||||||
GVariant* mValue;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class implements the "MPRIS" D-Bus Service
|
* This class implements the "MPRIS" D-Bus Service
|
||||||
* (https://specifications.freedesktop.org/mpris-spec/2.2),
|
* (https://specifications.freedesktop.org/mpris-spec/2.2),
|
||||||
@ -114,7 +109,6 @@ class MPRISServiceHandler final : public dom::MediaControlKeysEventSource {
|
|||||||
void SetShuffle(bool aShuffle);
|
void SetShuffle(bool aShuffle);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
std::vector<struct MPRISMetadata> GetDefaultMetadata();
|
|
||||||
double GetVolume() const;
|
double GetVolume() const;
|
||||||
bool SetVolume(double aVolume);
|
bool SetVolume(double aVolume);
|
||||||
int64_t GetPosition() const;
|
int64_t GetPosition() const;
|
||||||
@ -126,6 +120,9 @@ class MPRISServiceHandler final : public dom::MediaControlKeysEventSource {
|
|||||||
bool CanSeek() const;
|
bool CanSeek() const;
|
||||||
bool CanControl() const;
|
bool CanControl() const;
|
||||||
|
|
||||||
|
void SetMediaMetadata(const dom::MediaMetadataBase& aMetadata) override;
|
||||||
|
GVariant* GetMetadataAsGVariant() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
~MPRISServiceHandler();
|
~MPRISServiceHandler();
|
||||||
|
|
||||||
@ -142,6 +139,7 @@ class MPRISServiceHandler final : public dom::MediaControlKeysEventSource {
|
|||||||
GDBusConnection* mConnection = nullptr;
|
GDBusConnection* mConnection = nullptr;
|
||||||
bool mInitialized = false;
|
bool mInitialized = false;
|
||||||
nsAutoCString mIdentity;
|
nsAutoCString mIdentity;
|
||||||
|
Maybe<dom::MediaMetadataBase> mMetadata;
|
||||||
|
|
||||||
// Queries nsAppInfo to get the branded browser name and vendor
|
// Queries nsAppInfo to get the branded browser name and vendor
|
||||||
void InitIdentity();
|
void InitIdentity();
|
||||||
@ -158,7 +156,7 @@ class MPRISServiceHandler final : public dom::MediaControlKeysEventSource {
|
|||||||
static void OnBusAcquiredStatic(GDBusConnection* aConnection,
|
static void OnBusAcquiredStatic(GDBusConnection* aConnection,
|
||||||
const gchar* aName, gpointer aUserData);
|
const gchar* aName, gpointer aUserData);
|
||||||
|
|
||||||
void EmitEvent(mozilla::dom::MediaControlKeysEvent event);
|
void EmitEvent(dom::MediaControlKeysEvent event);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace widget
|
} // namespace widget
|
||||||
|
Loading…
Reference in New Issue
Block a user