Skip to content

Commit

Permalink
feat: support excalidraw file
Browse files Browse the repository at this point in the history
Signed-off-by: Hoang Pham <hoangmaths96@gmail.com>

feat: support excalidraw file

Signed-off-by: Hoang Pham <hoangmaths96@gmail.com>

feat: support excalidraw file

Signed-off-by: Hoang Pham <hoangmaths96@gmail.com>
  • Loading branch information
hweihwang committed Jun 27, 2024
1 parent 2482688 commit 540e2df
Show file tree
Hide file tree
Showing 9 changed files with 108 additions and 26 deletions.
2 changes: 1 addition & 1 deletion 3rdparty
Submodule 3rdparty updated 1491 files
1 change: 1 addition & 0 deletions core/img/filetypes/whiteboard.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions core/js/mimetype.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ OC.MimeType = {
while (mimeType in OC.MimeTypeList.aliases) {
mimeType = OC.MimeTypeList.aliases[mimeType];
}

if (mimeType in OC.MimeType._mimeTypeIcons) {
return OC.MimeType._mimeTypeIcons[mimeType];
}
Expand Down
2 changes: 2 additions & 0 deletions core/js/mimetypelist.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ OC.MimeTypeList={
"application/postscript": "image",
"application/rss+xml": "application/xml",
"application/vnd.android.package-archive": "package/x-generic",
"application/vnd.excalidraw+json": "whiteboard",
"application/vnd.lotus-wordpro": "x-office/document",
"application/vnd.garmin.tcx+xml": "location",
"application/vnd.google-earth.kml+xml": "location",
Expand Down Expand Up @@ -141,6 +142,7 @@ OC.MimeTypeList={
"text-code",
"text-vcard",
"video",
"whiteboard",
"x-office-document",
"x-office-drawing",
"x-office-form",
Expand Down
120 changes: 97 additions & 23 deletions lib/private/Repair/RepairMimeTypes.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
namespace OC\Repair;

use OC\Migration\NullOutput;
use OCP\DB\Exception;
use OCP\DB\IResult;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IConfig;
use OCP\IDBConnection;
Expand All @@ -18,23 +20,27 @@ class RepairMimeTypes implements IRepairStep {
private int $changeCount = 0;

/** @var int */
protected $folderMimeTypeId;
protected int $folderMimeTypeId;

public function __construct(
protected IConfig $config,
protected IDBConnection $connection
) {
}

public function getName() {
public function getName(): string {
return 'Repair mime types';
}

private function updateMimetypes($updatedMimetypes) {
/**
* @throws Exception
*/
private function updateMimetypes($updatedMimetypes): IResult|int|null {
if ($this->dryRun) {
$this->changeCount += count($updatedMimetypes);
return;
return null;
}

$query = $this->connection->getQueryBuilder();
$query->select('id')
->from('mimetypes')
Expand Down Expand Up @@ -82,7 +88,21 @@ private function updateMimetypes($updatedMimetypes) {
return $count;
}

private function introduceAsciidocType() {
/**
* @throws Exception
*/
private function introduceExcalidrawType(): IResult|int|null {
$updatedMimetypes = [
'excalidraw' => 'application/vnd.excalidraw+json',
];

return $this->updateMimetypes($updatedMimetypes);
}

/**
* @throws Exception
*/
private function introduceAsciidocType(): IResult|int|null {
$updatedMimetypes = [
'adoc' => 'text/asciidoc',
'asciidoc' => 'text/asciidoc',
Expand All @@ -91,7 +111,10 @@ private function introduceAsciidocType() {
return $this->updateMimetypes($updatedMimetypes);
}

private function introduceImageTypes() {
/**
* @throws Exception
*/
private function introduceImageTypes(): IResult|int|null {
$updatedMimetypes = [
'jp2' => 'image/jp2',
'webp' => 'image/webp',
Expand All @@ -100,7 +123,10 @@ private function introduceImageTypes() {
return $this->updateMimetypes($updatedMimetypes);
}

private function introduceWindowsProgramTypes() {
/**
* @throws Exception
*/
private function introduceWindowsProgramTypes(): IResult|int|null {
$updatedMimetypes = [
'htaccess' => 'text/plain',
'bat' => 'application/x-msdos-program',
Expand All @@ -110,7 +136,10 @@ private function introduceWindowsProgramTypes() {
return $this->updateMimetypes($updatedMimetypes);
}

private function introduceLocationTypes() {
/**
* @throws Exception
*/
private function introduceLocationTypes(): IResult|int|null {
$updatedMimetypes = [
'gpx' => 'application/gpx+xml',
'kml' => 'application/vnd.google-earth.kml+xml',
Expand All @@ -121,7 +150,10 @@ private function introduceLocationTypes() {
return $this->updateMimetypes($updatedMimetypes);
}

private function introduceInternetShortcutTypes() {
/**
* @throws Exception
*/
private function introduceInternetShortcutTypes(): IResult|int|null {
$updatedMimetypes = [
'url' => 'application/internet-shortcut',
'webloc' => 'application/internet-shortcut'
Expand All @@ -130,7 +162,10 @@ private function introduceInternetShortcutTypes() {
return $this->updateMimetypes($updatedMimetypes);
}

private function introduceStreamingTypes() {
/**
* @throws Exception
*/
private function introduceStreamingTypes(): IResult|int|null {
$updatedMimetypes = [
'm3u' => 'audio/mpegurl',
'm3u8' => 'audio/mpegurl',
Expand All @@ -140,7 +175,10 @@ private function introduceStreamingTypes() {
return $this->updateMimetypes($updatedMimetypes);
}

private function introduceVisioTypes() {
/**
* @throws Exception
*/
private function introduceVisioTypes(): IResult|int|null {
$updatedMimetypes = [
'vsdm' => 'application/vnd.visio',
'vsdx' => 'application/vnd.visio',
Expand All @@ -153,7 +191,10 @@ private function introduceVisioTypes() {
return $this->updateMimetypes($updatedMimetypes);
}

private function introduceComicbookTypes() {
/**
* @throws Exception
*/
private function introduceComicbookTypes(): IResult|int|null {
$updatedMimetypes = [
'cb7' => 'application/comicbook+7z',
'cba' => 'application/comicbook+ace',
Expand All @@ -166,7 +207,10 @@ private function introduceComicbookTypes() {
return $this->updateMimetypes($updatedMimetypes);
}

private function introduceOpenDocumentTemplates() {
/**
* @throws Exception
*/
private function introduceOpenDocumentTemplates(): IResult|int|null {
$updatedMimetypes = [
'ott' => 'application/vnd.oasis.opendocument.text-template',
'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
Expand All @@ -177,7 +221,10 @@ private function introduceOpenDocumentTemplates() {
return $this->updateMimetypes($updatedMimetypes);
}

private function introduceFlatOpenDocumentType() {
/**
* @throws Exception
*/
private function introduceFlatOpenDocumentType(): IResult|int|null {
$updatedMimetypes = [
"fodt" => "application/vnd.oasis.opendocument.text-flat-xml",
"fods" => "application/vnd.oasis.opendocument.spreadsheet-flat-xml",
Expand All @@ -188,15 +235,21 @@ private function introduceFlatOpenDocumentType() {
return $this->updateMimetypes($updatedMimetypes);
}

private function introduceOrgModeType() {
/**
* @throws Exception
*/
private function introduceOrgModeType(): IResult|int|null {
$updatedMimetypes = [
'org' => 'text/org'
];

return $this->updateMimetypes($updatedMimetypes);
}

private function introduceOnlyofficeFormType() {
/**
* @throws Exception
*/
private function introduceOnlyofficeFormType(): IResult|int|null {
$updatedMimetypes = [
"oform" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document.oform",
"docxf" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document.docxf",
Expand All @@ -205,15 +258,21 @@ private function introduceOnlyofficeFormType() {
return $this->updateMimetypes($updatedMimetypes);
}

private function introduceEnhancedMetafileFormatType() {
/**
* @throws Exception
*/
private function introduceEnhancedMetafileFormatType(): IResult|int|null {
$updatedMimetypes = [
'emf' => 'image/emf',
];

return $this->updateMimetypes($updatedMimetypes);
}

private function introduceEmlAndMsgFormatType() {
/**
* @throws Exception
*/
private function introduceEmlAndMsgFormatType(): IResult|int|null {
$updatedMimetypes = [
'eml' => 'message/rfc822',
'msg' => 'application/vnd.ms-outlook',
Expand All @@ -222,22 +281,31 @@ private function introduceEmlAndMsgFormatType() {
return $this->updateMimetypes($updatedMimetypes);
}

private function introduceAacAudioType() {
/**
* @throws Exception
*/
private function introduceAacAudioType(): IResult|int|null {
$updatedMimetypes = [
'aac' => 'audio/aac',
];

return $this->updateMimetypes($updatedMimetypes);
}

private function introduceReStructuredTextFormatType() {
/**
* @throws Exception
*/
private function introduceReStructuredTextFormatType(): IResult|int|null {
$updatedMimetypes = [
'rst' => 'text/x-rst',
];

return $this->updateMimetypes($updatedMimetypes);
}

/**
* @throws Exception
*/
public function migrationsAvailable(): bool {
$this->dryRun = true;
$this->run(new NullOutput());
Expand All @@ -250,15 +318,17 @@ private function getMimeTypeVersion(): string {
// 29.0.0.10 is the last version with a mimetype migration before it was moved to a separate version number
if (version_compare($serverVersion, '29.0.0.10', '>')) {
return $this->config->getAppValue('files', 'mimetype_version', '29.0.0.10');
} else {
return $serverVersion;
}

return $serverVersion;
}

/**
* Fix mime types
*
* @throws Exception
*/
public function run(IOutput $out) {
public function run(IOutput $out): void {
$serverVersion = $this->config->getSystemValueString('version', '0.0.0');
$mimeTypeVersion = $this->getMimeTypeVersion();

Expand Down Expand Up @@ -329,6 +399,10 @@ public function run(IOutput $out) {
$out->info('Fixed ReStructured Text mime type');
}

if (version_compare($mimeTypeVersion, '30.0.0.0', '<') && $this->introduceExcalidrawType()) {
$out->info('Fixed Excalidraw mime type');
}

if (!$this->dryRun) {
$this->config->setAppValue('files', 'mimetype_version', $serverVersion);
}
Expand Down
1 change: 1 addition & 0 deletions resources/config/mimetypealiases.dist.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
"application/postscript": "image",
"application/rss+xml": "application/xml",
"application/vnd.android.package-archive": "package/x-generic",
"application/vnd.excalidraw+json": "whiteboard",
"application/vnd.lotus-wordpro": "x-office/document",
"application/vnd.garmin.tcx+xml": "location",
"application/vnd.google-earth.kml+xml": "location",
Expand Down
1 change: 1 addition & 0 deletions resources/config/mimetypemapping.dist.json
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
"eps": ["application/postscript"],
"epub": ["application/epub+zip"],
"erf": ["image/x-dcraw"],
"excalidraw": ["application/vnd.excalidraw+json"],
"exe": ["application/x-ms-dos-executable"],
"fb2": ["application/x-fictionbook+xml", "text/plain"],
"flac": ["audio/flac"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ OC.MimeTypeList={
"application/postscript": "image",
"application/rss+xml": "application/xml",
"application/vnd.android.package-archive": "package/x-generic",
"application/vnd.excalidraw+json": "whiteboard",
"application/vnd.lotus-wordpro": "x-office/document",
"application/vnd.garmin.tcx+xml": "location",
"application/vnd.google-earth.kml+xml": "location",
Expand Down Expand Up @@ -142,6 +143,7 @@ OC.MimeTypeList={
"text-code",
"text-vcard",
"video",
"whiteboard",
"x-office-document",
"x-office-drawing",
"x-office-form",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"hashes": {
"core\/js\/mimetypelist.js": "c5cc5239ea67d5f09ef49b72929205be7684c7fc7c829637cb57963bfa5a3e9ec96aec97f2935cbe7c14e96c3294f3caa25829277e691e6b494dff4be50bdb21"
"core\/js\/mimetypelist.js": "507bb72181a0213598eaa03dbb6f7290b367e06b706aa15873a921c491980a13165c9858924d9b4b478b8444e92bb5e4169f5f971d184b77a63c3fcc5b3acf59"
},
"signature": "RCyHmaoLXr0NfqTWDM8xUhe2LsRwF2QMIGyDT9f4dShnyCO5VCApYbu6IzgiBVOAPBTSq\/Wv4NaivDbcNTVJKavTvOzJiWJvPy84Z8Xb3hceTL\/WuelFryPCZq11wy6Zrxt+\/FgAD+tHHao0BmMKa5iVFSl5i1cSUrA2W4CXxPybo2Ajbp4bOHSt6BIhzpsHtzuxxSfRGex19\/CqFGR5S8pXGAJ4gw5huJN2zkyLTEdRjuUW8RWNNZDt+XmVNp8\/ZzIePxoigo5u2tPxlwU0i4+5TejMGjxD07EhfrUWFJhgCheCdYv72cCsfKAuclpCFyB+Z9g6\/RhrUArvpXz2qD+foeL+6mhSyjTpyixmBvwrsL3VgYt+gg1T+wJukwnB2GD9xRjxGBL0j6Hgqs4saAgY9b+E\/wA89NtJ8+OP+wanCNqPJQG21UoeJRFFIbX\/K+YI39keNXM28kjFNgNBWlNbXqi8S6mRYX+PZBA6CVaXqfG\/NZzFLtRTbhoO3tOXqzgAx31XseZaPwlvl+gSCVaPdHkbCih9uV5gow05zdrQ2S7jGECBTRm4sMInP0lLZLVLED16W2gDbSk0Qey8dGBwwn\/WOnPS3LZrCzvstKkyBCVWVjaDhZ47WzxFRCXwJAmSoY1dFEGRG+B91hF413cw+SqqebfqNx99dFjpo0k=",
"signature": "qGQx9Sy0ynziPeir6H7dIsTdSjjOrLEEbB+sf00sWpmQ\/izXW9Zd7jeTKgMHfrew+d+NyyR3O5V1m\/FkMtmp61LM1l22VpyuiRctFOs1qSxXmDRu27LLIP3d2yayLqpROOEdJSMgDoQU1yGV05bnK0u2yy3srxZa2XUjTaDRT5M+xRBPuc1CtEQ1azp07Xk7N2FnoGjc3\/TusodpHovlKwUg5uSX5nC5da7KJWJ9luM4B\/etl717Hrauw5xIgi+AryuIjhahaYvnIJcM0yZYkZ7KIqOa6Y\/SZFRC0+kB+KJdu3+ZJ4RTTnxmVVcQ4DN2fEozjr6ZDZGaRY+TnF8UaPopba5xDipHq8A4Qm0DWewOG9G4CFdJViGHYFTmIMWealugQLY6ucDcaYaw+kqa66Es7VX0Use0WJFymlleDchqaRWd1n18rEBjEBmDc8s4pQeXZRu8nCxngYUyKrImKWdLpTnxgThqFTukT\/zkaP6klXWydfISK07aKlil7ha84Ud83g71SwIsq3x4y7BSeXyZGRdkzImqlSwgz60u1ndG6m\/cG3Es01v6ao26H4Rs28deLQfBMR6xdKZn272Dsm\/shyXlj4ElZ4jtxqJk5EfBC0Jv6xOsfEIxgdJ7igU52CYrQVhdKQf+4O8XnRth0qvFBTv7btiRCPZflsQ+mRs=",
"certificate": "-----BEGIN CERTIFICATE-----\r\nMIIEvjCCAqagAwIBAgIUc\/0FxYrsgSs9rDxp03EJmbjN0NwwDQYJKoZIhvcNAQEF\r\nBQAwIzEhMB8GA1UECgwYb3duQ2xvdWQgQ29kZSBTaWduaW5nIENBMB4XDTE1MTEw\r\nMzIxMDMzM1oXDTE2MTEwMzIxMDMzM1owDzENMAsGA1UEAwwEY29yZTCCAiIwDQYJ\r\nKoZIhvcNAQEBBQADggIPADCCAgoCggIBALb6EgHpkAqZbO5vRO8XSh7G7XGWHw5s\r\niOf4RwPXR6SE9bWZEm\/b72SfWk\/\/J6AbrD8WiOzBuT\/ODy6k5T1arEdHO+Pux0W1\r\nMxYJJI4kH74KKgMpC0SB0Rt+8WrMqV1r3hhJ46df6Xr\/xolP3oD+eLbShPcblhdS\r\nVtkZEkoev8Sh6L2wDCeHDyPxzvj1w2dTdGVO9Kztn0xIlyfEBakqvBWtcxyi3Ln0\r\nklnxlMx3tPDUE4kqvpia9qNiB1AN2PV93eNr5\/2riAzIssMFSCarWCx0AKYb54+d\r\nxLpcYFyqPJ0ydBCkF78DD45RCZet6PNYkdzgbqlUWEGGomkuDoJbBg4wzgzO0D77\r\nH87KFhYW8tKFFvF1V3AHl\/sFQ9tDHaxM9Y0pZ2jPp\/ccdiqnmdkBxBDqsiRvHvVB\r\nCn6qpb4vWGFC7vHOBfYspmEL1zLlKXZv3ezMZEZw7O9ZvUP3VO\/wAtd2vUW8UFiq\r\ns2v1QnNLN6jNh51obcwmrBvWhJy9vQIdtIjQbDxqWTHh1zUSrw9wrlklCBZ\/zrM0\r\ni8nfCFwTxWRxp3H9KoECzO\/zS5R5KIS7s3\/wq\/w9T2Ie4rcecgXwDizwnn0C\/aKc\r\nbDIjujpL1s9HO05pcD\/V3wKcPZ1izymBkmMyIbL52iRVN5FTVHeZdXPpFuq+CTQJ\r\nQ238lC+A\/KOVAgMBAAEwDQYJKoZIhvcNAQEFBQADggIBAGoKTnh8RfJV4sQItVC2\r\nAvfJagkrIqZ3iiQTUBQGTKBsTnAqE1H7QgUSV9vSd+8rgvHkyZsRjmtyR1e3A6Ji\r\noNCXUbExC\/0iCPUqdHZIVb+Lc\/vWuv4ByFMybGPydgtLoEUX2ZrKFWmcgZFDUSRd\r\n9Uj26vtUhCC4bU4jgu6hIrR9IuxOBLQUxGTRZyAcXvj7obqRAEZwFAKQgFpfpqTb\r\nH+kjcbZSaAlLVSF7vBc1syyI8RGYbqpwvtREqJtl5IEIwe6huEqJ3zPnlP2th\/55\r\ncf3Fovj6JJgbb9XFxrdnsOsDOu\/tpnaRWlvv5ib4+SzG5wWFT5UUEo4Wg2STQiiX\r\nuVSRQxK1LE1yg84bs3NZk9FSQh4B8vZVuRr5FaJsZZkwlFlhRO\/\/+TJtXRbyNgsf\r\noMRZGi8DLGU2SGEAHcRH\/QZHq\/XDUWVzdxrSBYcy7GSpT7UDVzGv1rEJUrn5veP1\r\n0KmauAqtiIaYRm4f6YBsn0INcZxzIPZ0p8qFtVZBPeHhvQtvOt0iXI\/XUxEWOa2F\r\nK2EqhErgMK\/N07U1JJJay5tYZRtvkGq46oP\/5kQG8hYST0MDK6VihJoPpvCmAm4E\r\npEYKQ96x6A4EH9Y9mZlYozH\/eqmxPbTK8n89\/p7Ydun4rI+B2iiLnY8REWWy6+UQ\r\nV204fGUkJqW5CrKy3P3XvY9X\r\n-----END CERTIFICATE-----"
}

0 comments on commit 540e2df

Please sign in to comment.