MOBILE-4653 utils: Move file related utils functions

main
Pau Ferrer Ocaña 2024-11-15 14:20:07 +01:00
parent 5e3d233272
commit 8ba784564b
10 changed files with 51 additions and 39 deletions

View File

@ -29,6 +29,7 @@ import { CorePath } from '@singletons/path';
import { CorePlatform } from '@services/platform';
import { toBoolean } from '@/core/transforms/boolean';
import { CoreLoadings } from '@services/loadings';
import { CoreFileUtils } from '@singletons/file-utils';
/**
* Component to handle a local file. Only files inside the app folder can be managed.
@ -182,7 +183,7 @@ export class CoreLocalFileComponent implements OnInit {
}
const modal = await CoreLoadings.show();
const fileAndDir = CoreFile.getFileAndDirectoryFromPath(this.relativePath);
const fileAndDir = CoreFileUtils.getFileAndDirectoryFromPath(this.relativePath);
const newPath = CorePath.concatenatePaths(fileAndDir.directory, newName);
try {

View File

@ -46,6 +46,7 @@ import { CorePlatform } from '@services/platform';
import { Chooser } from '@features/native/plugins';
import { CoreToasts } from '@services/toasts';
import { CoreLoadings } from '@services/loadings';
import { CoreFileUtils } from '@singletons/file-utils';
/**
* Helper service to upload files.
@ -210,7 +211,7 @@ export class CoreFileUploaderHelperProvider {
options?: CoreFileUploaderOptions,
): Promise<FileEntry> {
const fileName = options?.fileName || CoreFile.getFileAndDirectoryFromPath(path).name;
const fileName = options?.fileName || CoreFileUtils.getFileAndDirectoryFromPath(path).name;
// Check that size isn't too large.
if (maxSize !== undefined && maxSize != -1) {
@ -283,7 +284,7 @@ export class CoreFileUploaderHelperProvider {
* @returns File name, undefined if cannot get it.
*/
protected getChosenFileNameFromPath(result: ChooserResult): string | undefined {
const nameAndDir = CoreFile.getFileAndDirectoryFromPath(result.uri);
const nameAndDir = CoreFileUtils.getFileAndDirectoryFromPath(result.uri);
if (!nameAndDir.name) {
return;

View File

@ -243,7 +243,7 @@ export class CoreFileUploaderProvider {
deleteAfterUpload: !isFromAlbum,
mimeType: mimetype,
};
const fileName = CoreFile.getFileAndDirectoryFromPath(uri).name;
const fileName = CoreFileUtils.getFileAndDirectoryFromPath(uri).name;
if (isIOS && (mimetype == 'image/jpeg' || mimetype == 'image/png')) {
// In iOS, the pictures can have repeated names, even if they come from the album.
@ -287,7 +287,7 @@ export class CoreFileUploaderProvider {
originalFiles.forEach((file) => {
const stillInList = currentFiles.some((currentFile) =>
CoreFileHelper.getFileUrl(<CoreWSFile> currentFile) == CoreFileHelper.getFileUrl(file));
CoreFileHelper.getFileUrl(<CoreWSFile> currentFile) === CoreFileHelper.getFileUrl(file));
if (!stillInList) {
filesToDelete.push({

View File

@ -29,6 +29,7 @@ import {
} from './core';
import { CONTENTS_LIBRARIES_TABLE_NAME, CONTENT_TABLE_NAME, CoreH5PLibraryCachedAssetsDBRecord } from '../services/database/h5p';
import { CoreH5PLibraryBeingSaved } from './storage';
import { CoreFileUtils } from '@singletons/file-utils';
/**
* Equivalent to Moodle's implementation of H5PFileStorage.
@ -115,7 +116,7 @@ export class CoreH5PFileStorage {
}
treated[url] = url;
const assetPathFolder = CoreFile.getFileAndDirectoryFromPath(assetPath).directory;
const assetPathFolder = CoreFileUtils.getFileAndDirectoryFromPath(assetPath).directory;
fileContent = fileContent.replace(
new RegExp(CoreText.escapeForRegex(match), 'g'),
@ -300,7 +301,7 @@ export class CoreH5PFileStorage {
async getContentFolderNameByUrl(fileUrl: string, siteId: string): Promise<string> {
const path = await CoreFilepool.getFilePathByUrl(siteId, fileUrl);
const fileAndDir = CoreFile.getFileAndDirectoryFromPath(path);
const fileAndDir = CoreFileUtils.getFileAndDirectoryFromPath(path);
return CoreMimetypeUtils.removeExtension(fileAndDir.name);
}

View File

@ -17,7 +17,7 @@ import { toBoolean } from '@/core/transforms/boolean';
import { Component, OnInit, Input } from '@angular/core';
import { FileEntry } from '@awesome-cordova-plugins/file/ngx';
import { CoreFile } from '@services/file';
import { CoreFileUtils } from '@singletons/file-utils';
import { ModalController, Translate } from '@singletons';
import { CoreSharedFilesComponentsModule } from '../components.module';
@ -58,7 +58,7 @@ export class CoreSharedFilesListModalComponent implements OnInit {
*/
calculateTitle(path?: string): void {
if (path) {
this.title = CoreFile.getFileAndDirectoryFromPath(path).name;
this.title = CoreFileUtils.getFileAndDirectoryFromPath(path).name;
} else {
this.title = Translate.instant('core.sharedfiles.sharedfiles');
}

View File

@ -20,6 +20,7 @@ import { CoreFile } from '@services/file';
import { CoreNavigator } from '@services/navigator';
import { CoreSiteBasicInfo } from '@services/sites';
import { CoreDomUtils } from '@services/utils/dom';
import { CoreFileUtils } from '@singletons/file-utils';
/**
* Page to display the list of sites to choose one to store a shared file.
@ -57,7 +58,7 @@ export class CoreSharedFilesChooseSitePage implements OnInit {
}
if (this.filePath) {
const fileAndDir = CoreFile.getFileAndDirectoryFromPath(this.filePath);
const fileAndDir = CoreFileUtils.getFileAndDirectoryFromPath(this.filePath);
this.fileName = fileAndDir.name;
}

View File

@ -14,7 +14,7 @@
import { Component, OnInit } from '@angular/core';
import { CoreFile } from '@services/file';
import { CoreFileUtils } from '@singletons/file-utils';
import { CoreNavigator } from '@services/navigator';
import { Translate } from '@singletons';
@ -54,7 +54,7 @@ export class CoreSharedFilesListPage implements OnInit {
*/
calculateTitle(path?: string): void {
if (path) {
this.title = CoreFile.getFileAndDirectoryFromPath(path).name;
this.title = CoreFileUtils.getFileAndDirectoryFromPath(path).name;
} else {
this.title = Translate.instant('core.sharedfiles.sharedfiles');
}

View File

@ -80,15 +80,11 @@ export class CoreFileProvider {
static readonly CHUNK_SIZE = 1048576; // 1 MB. Same chunk size as Ionic Native.
protected logger: CoreLogger;
protected logger = CoreLogger.getInstance('CoreFileProvider');
protected initialized = false;
protected basePath = '';
protected isHTMLAPI = false;
constructor() {
this.logger = CoreLogger.getInstance('CoreFileProvider');
}
/**
* Sets basePath to use with HTML API. Reserved for core use.
*
@ -438,11 +434,11 @@ export class CoreFileProvider {
*
* @param filename The file name.
* @returns The file name normalized.
*
* @deprecated since 5.0. Not used anymore.
*/
normalizeFileName(filename: string): string {
filename = CoreUrl.decodeURIComponent(filename);
return filename;
return CoreUrl.decodeURIComponent(filename);
}
/**
@ -820,7 +816,7 @@ export class CoreFileProvider {
from = this.removeBasePath(from);
to = this.removeBasePath(to);
const toFileAndDir = this.getFileAndDirectoryFromPath(to);
const toFileAndDir = CoreFileUtils.getFileAndDirectoryFromPath(to);
if (toFileAndDir.directory && !destDirExists) {
// Create the target directory if it doesn't exist.
@ -851,23 +847,10 @@ export class CoreFileProvider {
*
* @param path Path to be extracted.
* @returns Plain object containing the file name and directory.
* @description
* file.pdf -> directory: '', name: 'file.pdf'
* /file.pdf -> directory: '', name: 'file.pdf'
* path/file.pdf -> directory: 'path', name: 'file.pdf'
* path/ -> directory: 'path', name: ''
* path -> directory: '', name: 'path'
* @deprecated since 5.0. Use CoreFileUtils.getFileAndDirectoryFromPath instead.
*/
getFileAndDirectoryFromPath(path: string): {directory: string; name: string} {
const file = {
directory: '',
name: '',
};
file.directory = path.substring(0, path.lastIndexOf('/'));
file.name = path.substring(path.lastIndexOf('/') + 1);
return file;
return CoreFileUtils.getFileAndDirectoryFromPath(path);
}
/**
@ -1028,7 +1011,7 @@ export class CoreFileProvider {
const fileEntry = await this.getExternalFile(from);
// Create the destination dir if it doesn't exist.
const dirAndFile = this.getFileAndDirectoryFromPath(to);
const dirAndFile = CoreFileUtils.getFileAndDirectoryFromPath(to);
const dirEntry = await this.createDir(dirAndFile.directory);

View File

@ -38,6 +38,7 @@ import { CoreSite } from '@classes/sites/site';
import { CoreNative } from '@features/native/services/native';
import { CoreLoadings } from '@services/loadings';
import { CorePromiseUtils } from '@singletons/promise-utils';
import { CoreFileUtils } from '@singletons/file-utils';
type CoreFrameElement = FrameElement & {
window?: Window;
@ -431,7 +432,7 @@ export class CoreIframeUtilsProvider {
? ('src' in element ? element.src : element.data)
: null;
if (src) {
const dirAndFile = CoreFile.getFileAndDirectoryFromPath(src);
const dirAndFile = CoreFileUtils.getFileAndDirectoryFromPath(src);
if (dirAndFile.directory) {
url = CorePath.concatenatePaths(dirAndFile.directory, url);
} else {

View File

@ -64,7 +64,7 @@ export class CoreFileUtils {
// Check if there are 2 files with the same name.
for (let i = 0; i < files.length; i++) {
const file = files[i];
const name = (this.isFileEntry(file) ? file.name : file.filename) || '';
const name = (CoreFileUtils.isFileEntry(file) ? file.name : file.filename) || '';
if (names.indexOf(name) > -1) {
return Translate.instant('core.filenameexist', { $a: name });
@ -76,4 +76,28 @@ export class CoreFileUtils {
return false;
}
/**
* Extract the file name and directory from a given path.
*
* @param path Path to be extracted.
* @returns Plain object containing the file name and directory.
* @description
* file.pdf -> directory: '', name: 'file.pdf'
* /file.pdf -> directory: '', name: 'file.pdf'
* path/file.pdf -> directory: 'path', name: 'file.pdf'
* path/ -> directory: 'path', name: ''
* path -> directory: '', name: 'path'
*/
static getFileAndDirectoryFromPath(path: string): {directory: string; name: string} {
const file = {
directory: '',
name: '',
};
file.directory = path.substring(0, path.lastIndexOf('/'));
file.name = path.substring(path.lastIndexOf('/') + 1);
return file;
}
}