Delay modifications to MIME database until first use

Initialization of the MIME database takes time, and it is good to avoid
this during startup.
We nevertheless want to apply some modifications to the MIME database, so
we need to delay these modifications until first use. Allow registration
of additional initialization functions. Since the initialization
functions access the MIME database, which does locking for thread-
safety, we need to separate the initialization to outside these locking
functions.

Change-Id: I2b1706347768bcf081644e078ccfa45302d61641
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Eike Ziller
2023-09-05 10:10:44 +02:00
parent 7200644f75
commit 1870501443
9 changed files with 88 additions and 41 deletions

View File

@@ -746,19 +746,25 @@ MimeTypeSettingsPrivate::UserMimeTypeHash MimeTypeSettingsPrivate::readUserModif
return userMimeTypes;
}
void MimeTypeSettingsPrivate::applyUserModifiedMimeTypes(const UserMimeTypeHash &mimeTypes)
static void registerUserModifiedMimeTypes(const MimeTypeSettingsPrivate::UserMimeTypeHash &mimeTypes)
{
// register in mime data base, and remember for later
for (auto it = mimeTypes.constBegin(); it != mimeTypes.constEnd(); ++it) {
Utils::MimeType mt = Utils::mimeTypeForName(it.key());
if (!mt.isValid()) // loaded from settings
if (!mt.isValid())
continue;
m_userModifiedMimeTypes.insert(it.key(), it.value());
Utils::setGlobPatternsForMimeType(mt, it.value().globPatterns);
Utils::setMagicRulesForMimeType(mt, it.value().rules);
}
}
void MimeTypeSettingsPrivate::applyUserModifiedMimeTypes(const UserMimeTypeHash &mimeTypes)
{
// register in mime data base, and remember for later
for (auto it = mimeTypes.constBegin(); it != mimeTypes.constEnd(); ++it)
m_userModifiedMimeTypes.insert(it.key(), it.value());
registerUserModifiedMimeTypes(mimeTypes);
}
// MimeTypeSettingsPage
MimeTypeSettings::MimeTypeSettings()
@@ -792,8 +798,9 @@ QStringList MimeTypeSettings::keywords() const
void MimeTypeSettings::restoreSettings()
{
MimeTypeSettingsPrivate::UserMimeTypeHash mimetypes
= MimeTypeSettingsPrivate::readUserModifiedMimeTypes();
MimeTypeSettingsPrivate::applyUserModifiedMimeTypes(mimetypes);
= MimeTypeSettingsPrivate::readUserModifiedMimeTypes();
MimeTypeSettingsPrivate::m_userModifiedMimeTypes = mimetypes;
Utils::addMimeInitializer([mimetypes] { registerUserModifiedMimeTypes(mimetypes); });
}
QWidget *MimeEditorDelegate::createEditor(QWidget *parent,