mirror of
https://github.com/laurent22/joplin.git
synced 2026-10-25 02:47:28 +00:00
All: Improve how resource filenames are determined (#15672)
This commit is contained in:
1 parent
62bab6ece5
commit
5051807374
4 files changed
+25
-3
No files matched your search
@@ -1433,6 +1433,7 @@ packages/lib/models/utils/paginatedFeed.js
|
||||
packages/lib/models/utils/paginationToSql.js
|
||||
packages/lib/models/utils/readOnly.test.js
|
||||
packages/lib/models/utils/readOnly.js
|
||||
packages/lib/models/utils/resourceUtils.test.js
|
||||
packages/lib/models/utils/resourceUtils.js
|
||||
packages/lib/models/utils/types.js
|
||||
packages/lib/models/utils/userData.test.js
|
||||
|
||||
@@ -1406,6 +1406,7 @@ packages/lib/models/utils/paginatedFeed.js
|
||||
packages/lib/models/utils/paginationToSql.js
|
||||
packages/lib/models/utils/readOnly.test.js
|
||||
packages/lib/models/utils/readOnly.js
|
||||
packages/lib/models/utils/resourceUtils.test.js
|
||||
packages/lib/models/utils/resourceUtils.js
|
||||
packages/lib/models/utils/types.js
|
||||
packages/lib/models/utils/userData.test.js
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
import { resourceFilename } from './resourceUtils';
|
||||
|
||||
describe('resourceUtils', () => {
|
||||
it.each([
|
||||
{
|
||||
id: 'this/is a test',
|
||||
mime: 'text/plain',
|
||||
expected: 'this_is_a_test.txt',
|
||||
},
|
||||
{
|
||||
id: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
mime: 'application/json',
|
||||
expected: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json',
|
||||
},
|
||||
])('should correctly determine resource filenames (case %#)', ({ id, mime, expected }) => {
|
||||
expect(resourceFilename({ id, mime })).toBe(expected);
|
||||
});
|
||||
});
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { ResourceEntity } from '../../services/database/types';
|
||||
import * as mime from '../../mime-utils';
|
||||
import { filename } from '@joplin/utils/path';
|
||||
import { filename, safeFileExtension } from '@joplin/utils/path';
|
||||
|
||||
// This file contains resource-related utilities that do not
|
||||
// depend on the database, settings, etc.
|
||||
@@ -8,8 +8,10 @@ import { filename } from '@joplin/utils/path';
|
||||
export const resourceFilename = (resource: ResourceEntity, encryptedBlob = false) => {
|
||||
let extension = encryptedBlob ? 'crypted' : resource.file_extension;
|
||||
if (!extension) extension = resource.mime ? mime.toFileExtension(resource.mime) : '';
|
||||
extension = extension ? `.${extension}` : '';
|
||||
return resource.id + extension;
|
||||
extension = extension ? `.${safeFileExtension(extension)}` : '';
|
||||
// Resource IDs should contain only alphanumeric characters
|
||||
const idComponent = resource.id.replace(/[^a-zA-Z0-9]/g, '_');
|
||||
return idComponent + extension;
|
||||
};
|
||||
|
||||
export const resourceRelativePath = (resource: ResourceEntity, relativeResourceDirPath: string, encryptedBlob = false) => {
|
||||
|
||||
Reference in new issue
Block a user