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:
Marc Streckfuss 2020-03-11 15:47:09 +00:00
parent 85fc50fbee
commit 673ce25897
2 changed files with 31 additions and 29 deletions

View File

@ -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

View File

@ -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