Separate metadata loading

"Metadata" is data which is stored in a teletext file format but is not part
of the page itself, such as DE description and CT cycle time in the TTI file
format.
This commit is contained in:
Gavin MacGregor
2025-05-25 12:54:14 +01:00
parent 3f93da8c1a
commit 395f3769cb
5 changed files with 89 additions and 48 deletions

View File

@@ -19,6 +19,7 @@
#include <QAbstractListModel>
#include <QList>
#include <QVariant>
#include "document.h"
@@ -200,6 +201,39 @@ void TeletextDocument::unDeleteSubPageFromRecycle(int subPage)
m_recycleSubPages.removeLast();
}
void TeletextDocument::loadMetaData(QVariantHash const &metadata)
{
bool valueOk;
if (const QString description = metadata.value("description").toString(); !description.isEmpty())
m_description = description;
if (const int pageNumber = metadata.value("pageNumber").toInt(&valueOk); valueOk)
m_pageNumber = pageNumber;
if (metadata.value("fastextAbsolute").toBool()) {
const int magazineFlip = m_pageNumber & 0x700;
for (auto &subPage : m_subPages)
for (int i=0; i<6; i++)
subPage->setFastTextLinkPageNumber(i, subPage->fastTextLinkPageNumber(i) ^ magazineFlip);
}
for (int i=0; i<numberOfSubPages(); i++) {
const QString subPageStr = QString("%1").arg(i, 3, QChar('0'));
if (int region = metadata.value("region" + subPageStr).toInt(&valueOk); valueOk)
subPage(i)->setDefaultCharSet(region);
if (int cycleValue = metadata.value("cycleValue" + subPageStr).toInt(&valueOk); valueOk)
subPage(i)->setCycleValue(cycleValue);
QChar cycleType = metadata.value("cycleType" + subPageStr).toChar();
if (cycleType == 'C')
subPage(i)->setCycleType(LevelOnePage::CTcycles);
else if (cycleType == 'T')
subPage(i)->setCycleType(LevelOnePage::CTseconds);
}
}
void TeletextDocument::setPageNumber(int pageNumber)
{
// If the magazine number was changed, we need to update the relative magazine numbers in FastText