mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-16 02:34:14 +02:00
Name the .qetz MIME type application/x-qet-project+zip
Every other QElectroTech file type is application/x-qet-*; the zipped project was application/x-qelectrotech-project+zip. No release has shipped it yet, so it is renamed now. Files written with the old name still open: the reader accepts both, and the shared-mime-info file keeps the old name as an alias and matches either on content. Review of #1472 (scorpio810, point 2). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,7 +6,7 @@ Exec=qelectrotech %F
|
||||
Icon=qelectrotech
|
||||
Terminal=false
|
||||
Type=Application
|
||||
MimeType=application/x-qet-project;application/x-qelectrotech-project+zip;application/x-qet-element;application/x-qet-titleblock;
|
||||
MimeType=application/x-qet-project;application/x-qet-project+zip;application/x-qet-element;application/x-qet-titleblock;
|
||||
Categories=Graphics;
|
||||
Keywords=Graphics;Science;Electricity;Engineering;
|
||||
Comment=Edit electrical diagrams.
|
||||
|
||||
@@ -34,11 +34,13 @@
|
||||
<comment xml:lang="zh">QElectroTech 项目文件</comment>
|
||||
<glob pattern="*.qet" />
|
||||
</mime-type>
|
||||
<mime-type type="application/x-qelectrotech-project+zip">
|
||||
<mime-type type="application/x-qet-project+zip">
|
||||
<alias type="application/x-qelectrotech-project+zip"/>
|
||||
<sub-class-of type="application/zip"/>
|
||||
<comment>QElectroTech zipped project file</comment>
|
||||
<glob pattern="*.qetz" />
|
||||
<magic priority="60">
|
||||
<match type="string" offset="30" value="mimetypeapplication/x-qet-project+zip"/>
|
||||
<match type="string" offset="30" value="mimetypeapplication/x-qelectrotech-project+zip"/>
|
||||
</magic>
|
||||
</mime-type>
|
||||
|
||||
@@ -46,7 +46,7 @@ The code is `qetcontainer.cpp` (the zip and its files), `qetcontainerdb.cpp`
|
||||
|
||||
| Entry | Content |
|
||||
|---|---|
|
||||
| `mimetype` | `application/x-qelectrotech-project+zip`, the first entry, stored uncompressed |
|
||||
| `mimetype` | `application/x-qet-project+zip`, the first entry, stored uncompressed (files written before October 2026 say `application/x-qelectrotech-project+zip`; both are read) |
|
||||
| `manifest.xml` | `<qetz format="4" min-reader="4" writer="QElectroTech …"/>` |
|
||||
| `project.xml` | the project document, each part replaced by `<qetz-part file="…"/>` |
|
||||
| `project.sqlite` | the engineering data (section 4) |
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
#include <QRegularExpression>
|
||||
#include <QUuid>
|
||||
|
||||
const char QetContainer::MimeType[] = "application/x-qelectrotech-project+zip";
|
||||
const char QetContainer::MimeType[] = "application/x-qet-project+zip";
|
||||
const char QetContainer::OldMimeType[] = "application/x-qelectrotech-project+zip";
|
||||
|
||||
namespace {
|
||||
const QString PartTag = QStringLiteral("qetz-part");
|
||||
@@ -426,7 +427,8 @@ bool QetContainer::join(const QList<QetZip::Entry> &entries, QDomDocument *proje
|
||||
for (const QetZip::Entry &entry : entries)
|
||||
files.insert(entry.name, entry.data);
|
||||
|
||||
if (files.value(QStringLiteral("mimetype")) != QByteArray(MimeType)) {
|
||||
const QByteArray mimetype = files.value(QStringLiteral("mimetype"));
|
||||
if (mimetype != QByteArray(MimeType) && mimetype != QByteArray(OldMimeType)) {
|
||||
setError(error, QStringLiteral("not a QElectroTech project (.qetz)"));
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -53,6 +53,8 @@
|
||||
namespace QetContainer
|
||||
{
|
||||
extern const char MimeType[];
|
||||
/// The MIME type .qetz files had before it was renamed; still read
|
||||
extern const char OldMimeType[];
|
||||
/// Picture bytes by file name, see join()
|
||||
using Pictures = QHash<QString, QByteArray>;
|
||||
/// The format written; files of a later format are refused by join()
|
||||
|
||||
@@ -17,7 +17,7 @@ class tst_qetzip : public QObject
|
||||
static QList<QetZip::Entry> sample()
|
||||
{
|
||||
QList<QetZip::Entry> entries;
|
||||
entries.append({QStringLiteral("mimetype"), QByteArray("application/x-qelectrotech-project+zip"), false});
|
||||
entries.append({QStringLiteral("mimetype"), QByteArray("application/x-qet-project+zip"), false});
|
||||
QByteArray xml("<project>");
|
||||
for (int i = 0 ; i < 2000 ; ++i) xml += "<element name=\"K1\"/>";
|
||||
xml += "</project>";
|
||||
@@ -65,7 +65,7 @@ private slots:
|
||||
QCOMPARE(out.at(i).compress, in.at(i).compress);
|
||||
}
|
||||
// mimetype first and stored: its bytes appear as is after the header
|
||||
QCOMPARE(zip.indexOf("application/x-qelectrotech-project+zip"), 30 + int(qstrlen("mimetype")));
|
||||
QCOMPARE(zip.indexOf("application/x-qet-project+zip"), 30 + int(qstrlen("mimetype")));
|
||||
}
|
||||
|
||||
void sameBytesTwice()
|
||||
|
||||
Reference in New Issue
Block a user