media: implement importing SRT files

This commit is contained in:
itsmattkc
2022-05-11 13:48:59 -07:00
parent f17c119c29
commit 83e7707025
19 changed files with 517 additions and 76 deletions
+54
View File
@@ -22,6 +22,8 @@
#include <QCoreApplication>
#include "common/xmlutils.h"
namespace olive {
QString SubtitleParams::GenerateASSHeader()
@@ -106,4 +108,56 @@ QString SubtitleParams::GenerateASSHeader()
return ass_code;
}
void SubtitleParams::Load(QXmlStreamReader *reader)
{
this->clear();
while (XMLReadNextStartElement(reader)) {
if (reader->name() == QStringLiteral("streamindex")) {
set_stream_index(reader->readElementText().toInt());
} else if (reader->name() == QStringLiteral("enabled")) {
set_enabled(reader->readElementText().toInt());
} else if (reader->name() == QStringLiteral("subtitles")) {
while (XMLReadNextStartElement(reader)) {
if (reader->name() == QStringLiteral("subtitle")) {
rational in, out;
QString text;
XMLAttributeLoop(reader, attr) {
if (attr.name() == QStringLiteral("in")) {
in = rational::fromString(attr.value().toString());
} else if (attr.name() == QStringLiteral("out")) {
out = rational::fromString(attr.value().toString());
}
}
text = reader->readElementText();
this->push_back(Subtitle(TimeRange(in, out), text));
} else {
reader->skipCurrentElement();
}
}
} else {
reader->skipCurrentElement();
}
}
}
void SubtitleParams::Save(QXmlStreamWriter *writer) const
{
writer->writeTextElement(QStringLiteral("streamindex"), QString::number(stream_index_));
writer->writeTextElement(QStringLiteral("enabled"), QString::number(enabled_));
writer->writeStartElement(QStringLiteral("subtitles"));
for (auto it=this->cbegin(); it!=this->cend(); it++) {
writer->writeStartElement(QStringLiteral("subtitle"));
writer->writeAttribute(QStringLiteral("in"), it->time().in().toString());
writer->writeAttribute(QStringLiteral("out"), it->time().out().toString());
writer->writeCharacters(it->text());
writer->writeEndElement(); // subtitle
}
writer->writeEndElement(); // subtitles
}
}