|
|
|
@ -246,6 +246,7 @@ void MpvPart::updatePlaytime(TQTime time) {
|
|
|
|
|
void MpvPart::customEvent(TQCustomEvent *event) {
|
|
|
|
|
if (event->type() == MPVPART_EVENT_PROPERTY_CHANGE) {
|
|
|
|
|
MpvPropertyChangeEvent *pe = (MpvPropertyChangeEvent *)event;
|
|
|
|
|
|
|
|
|
|
if (pe->property() == "time-pos" && pe->format() == MPV_FORMAT_DOUBLE) {
|
|
|
|
|
m_time = pe->toTime();
|
|
|
|
|
updatePlaytime(m_time);
|
|
|
|
@ -264,6 +265,10 @@ void MpvPart::customEvent(TQCustomEvent *event) {
|
|
|
|
|
emit signalNewMeta(m_mrl);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else if (pe->property() == "metadata") {
|
|
|
|
|
updateMetadata();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else if (event->type() == MPVPART_EVENT_EOF) {
|
|
|
|
@ -769,9 +774,59 @@ void MpvPart::hideContextMenu() {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MpvPart::updateMetadata() {
|
|
|
|
|
if (!m_mpv) return;
|
|
|
|
|
|
|
|
|
|
kdDebug() << "update metadata" << endl;
|
|
|
|
|
|
|
|
|
|
// Errors reading metadata are not fatal, as this is not something that
|
|
|
|
|
// the user explicitly requests
|
|
|
|
|
mpv_node result;
|
|
|
|
|
if (mpv_get_property(m_mpv, "metadata", MPV_FORMAT_NODE, &result) < 0) {
|
|
|
|
|
kdWarning() << "mpv: error reading metadata" << endl;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (result.format != MPV_FORMAT_NODE_MAP) {
|
|
|
|
|
kdWarning() << "mpv: wrong metadata format" << endl;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mpv_node_list *map = result.u.list;
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < map->num; ++i) {
|
|
|
|
|
TQString key(map->keys[i]);
|
|
|
|
|
TQString value = TQString::fromUtf8(map->values[i].u.string);
|
|
|
|
|
if (key == "title" || key == "icy-name") {
|
|
|
|
|
m_mrl.setTitle(value);
|
|
|
|
|
}
|
|
|
|
|
else if (key == "artist") {
|
|
|
|
|
m_mrl.setArtist(value);
|
|
|
|
|
}
|
|
|
|
|
else if (key == "album") {
|
|
|
|
|
m_mrl.setAlbum(value);
|
|
|
|
|
}
|
|
|
|
|
else if (key == "track" || key == "icy-title") {
|
|
|
|
|
m_mrl.setTrack(value);
|
|
|
|
|
}
|
|
|
|
|
else if (key == "date") {
|
|
|
|
|
m_mrl.setYear(value);
|
|
|
|
|
}
|
|
|
|
|
else if (key == "genre" || key == "icy-genre") {
|
|
|
|
|
m_mrl.setGenre(value);
|
|
|
|
|
}
|
|
|
|
|
else if (key == "comment" || key == "icy-description") {
|
|
|
|
|
m_mrl.setComment(value);
|
|
|
|
|
}
|
|
|
|
|
kdDebug() << "e " << map->keys[i] << ": " << map->values[i].u.string << endl;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mpv_free_node_contents(&result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define THROW_ERROR(msg, details) \
|
|
|
|
|
kdError() << "mpv: " << msg << " (" << details << ")" << endl; \
|
|
|
|
|
KMessageBox::detailedError(nullptr, i18n(msg), details); \
|
|
|
|
|
KMessageBox::detailedError(nullptr, i18n(msg), details);
|
|
|
|
|
|
|
|
|
|
#define THROW_ERROR_FREE(msg, details) \
|
|
|
|
|
THROW_ERROR(msg, details) \
|
|
|
|
@ -852,7 +907,6 @@ data = result.u.list->values[4].u.ba;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Try to launch ksnapshot
|
|
|
|
|
TQString ksError;
|
|
|
|
|
TQCString ksDcop;
|
|
|
|
|