MOBILE-3819 core: Remove code deprecated in 3.8 or older
parent
705f7ce92d
commit
f63722e9f8
|
@ -40,8 +40,8 @@ export class AddonFilterMultilangHandlerService extends CoreFilterDefaultHandler
|
||||||
*/
|
*/
|
||||||
async filter(
|
async filter(
|
||||||
text: string,
|
text: string,
|
||||||
filter: CoreFilterFilter, // eslint-disable-line @typescript-eslint/no-unused-vars
|
filter?: CoreFilterFilter, // eslint-disable-line @typescript-eslint/no-unused-vars
|
||||||
options: CoreFilterFormatTextOptions, // eslint-disable-line @typescript-eslint/no-unused-vars
|
options?: CoreFilterFormatTextOptions, // eslint-disable-line @typescript-eslint/no-unused-vars
|
||||||
siteId?: string, // eslint-disable-line @typescript-eslint/no-unused-vars
|
siteId?: string, // eslint-disable-line @typescript-eslint/no-unused-vars
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
let language = await CoreLang.getCurrentLanguage();
|
let language = await CoreLang.getCurrentLanguage();
|
||||||
|
|
|
@ -19,7 +19,6 @@ import { CoreWSExternalWarning } from '@services/ws';
|
||||||
import { CoreTextUtils } from '@services/utils/text';
|
import { CoreTextUtils } from '@services/utils/text';
|
||||||
import { CoreTimeUtils } from '@services/utils/time';
|
import { CoreTimeUtils } from '@services/utils/time';
|
||||||
import { CoreUser } from '@features/user/services/user';
|
import { CoreUser } from '@features/user/services/user';
|
||||||
import { AddonMessages, AddonMessagesMarkMessageReadResult } from '@addons/messages/services/messages';
|
|
||||||
import { CoreSite, CoreSiteWSPreSets } from '@classes/site';
|
import { CoreSite, CoreSiteWSPreSets } from '@classes/site';
|
||||||
import { CoreLogger } from '@singletons/logger';
|
import { CoreLogger } from '@singletons/logger';
|
||||||
import { makeSingleton } from '@singletons';
|
import { makeSingleton } from '@singletons';
|
||||||
|
@ -320,7 +319,7 @@ export class AddonNotificationsProvider {
|
||||||
async markNotificationRead(
|
async markNotificationRead(
|
||||||
notificationId: number,
|
notificationId: number,
|
||||||
siteId?: string,
|
siteId?: string,
|
||||||
): Promise<CoreMessageMarkNotificationReadWSResponse | AddonMessagesMarkMessageReadResult> {
|
): Promise<CoreMessageMarkNotificationReadWSResponse> {
|
||||||
|
|
||||||
const site = await CoreSites.getSite(siteId);
|
const site = await CoreSites.getSite(siteId);
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,6 @@ export class CoreConstants {
|
||||||
static readonly SETTINGS_NOTIFICATION_SOUND = 'CoreSettingsNotificationSound';
|
static readonly SETTINGS_NOTIFICATION_SOUND = 'CoreSettingsNotificationSound';
|
||||||
static readonly SETTINGS_SYNC_ONLY_ON_WIFI = 'CoreSettingsSyncOnlyOnWifi';
|
static readonly SETTINGS_SYNC_ONLY_ON_WIFI = 'CoreSettingsSyncOnlyOnWifi';
|
||||||
static readonly SETTINGS_DEBUG_DISPLAY = 'CoreSettingsDebugDisplay';
|
static readonly SETTINGS_DEBUG_DISPLAY = 'CoreSettingsDebugDisplay';
|
||||||
static readonly SETTINGS_REPORT_IN_BACKGROUND = 'CoreSettingsReportInBackground'; // @deprecated since 3.5.0
|
|
||||||
static readonly SETTINGS_SEND_ON_ENTER = 'CoreSettingsSendOnEnter';
|
static readonly SETTINGS_SEND_ON_ENTER = 'CoreSettingsSendOnEnter';
|
||||||
static readonly SETTINGS_ZOOM_LEVEL = 'CoreSettingsZoomLevel';
|
static readonly SETTINGS_ZOOM_LEVEL = 'CoreSettingsZoomLevel';
|
||||||
static readonly SETTINGS_COLOR_SCHEME = 'CoreSettingsColorScheme';
|
static readonly SETTINGS_COLOR_SCHEME = 'CoreSettingsColorScheme';
|
||||||
|
|
|
@ -22,7 +22,6 @@ import { CoreFormatDatePipe } from './format-date';
|
||||||
import { CoreNoTagsPipe } from './no-tags';
|
import { CoreNoTagsPipe } from './no-tags';
|
||||||
import { CoreSecondsToHMSPipe } from './seconds-to-hms';
|
import { CoreSecondsToHMSPipe } from './seconds-to-hms';
|
||||||
import { CoreTimeAgoPipe } from './time-ago';
|
import { CoreTimeAgoPipe } from './time-ago';
|
||||||
import { CoreToLocaleStringPipe } from './to-locale-string';
|
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
|
@ -34,7 +33,6 @@ import { CoreToLocaleStringPipe } from './to-locale-string';
|
||||||
CoreNoTagsPipe,
|
CoreNoTagsPipe,
|
||||||
CoreSecondsToHMSPipe,
|
CoreSecondsToHMSPipe,
|
||||||
CoreTimeAgoPipe,
|
CoreTimeAgoPipe,
|
||||||
CoreToLocaleStringPipe,
|
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
CoreBytesToSizePipe,
|
CoreBytesToSizePipe,
|
||||||
|
@ -45,7 +43,6 @@ import { CoreToLocaleStringPipe } from './to-locale-string';
|
||||||
CoreNoTagsPipe,
|
CoreNoTagsPipe,
|
||||||
CoreSecondsToHMSPipe,
|
CoreSecondsToHMSPipe,
|
||||||
CoreTimeAgoPipe,
|
CoreTimeAgoPipe,
|
||||||
CoreToLocaleStringPipe,
|
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
export class CorePipesModule {}
|
export class CorePipesModule {}
|
||||||
|
|
|
@ -1,66 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { Pipe, PipeTransform } from '@angular/core';
|
|
||||||
import { CoreTimeUtils } from '@services/utils/time';
|
|
||||||
|
|
||||||
import { CoreLogger } from '@singletons/logger';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Filter to format a timestamp to a locale string. Timestamp can be in seconds or milliseconds.
|
|
||||||
*
|
|
||||||
* @deprecated since 3.6. Use coreFormatDate instead.
|
|
||||||
*/
|
|
||||||
@Pipe({
|
|
||||||
name: 'coreToLocaleString',
|
|
||||||
})
|
|
||||||
export class CoreToLocaleStringPipe implements PipeTransform {
|
|
||||||
|
|
||||||
protected logger: CoreLogger;
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
this.logger = CoreLogger.getInstance('CoreToLocaleStringPipe');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Format a timestamp to a locale string.
|
|
||||||
*
|
|
||||||
* @param timestamp The timestamp (can be in seconds or milliseconds).
|
|
||||||
* @return Formatted time.
|
|
||||||
*/
|
|
||||||
transform(timestamp: number | string): string {
|
|
||||||
if (typeof timestamp == 'string') {
|
|
||||||
// Convert the value to a number.
|
|
||||||
const numberTimestamp = parseInt(timestamp, 10);
|
|
||||||
if (isNaN(numberTimestamp)) {
|
|
||||||
this.logger.error('Invalid value received', timestamp);
|
|
||||||
|
|
||||||
return timestamp;
|
|
||||||
}
|
|
||||||
timestamp = numberTimestamp;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (timestamp < 0) {
|
|
||||||
// Date not valid.
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
if (timestamp < 100000000000) {
|
|
||||||
// Timestamp is in seconds, convert it to milliseconds.
|
|
||||||
timestamp = timestamp * 1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
return CoreTimeUtils.userDate(timestamp, 'core.strftimedatetimeshort');
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -677,7 +677,7 @@ export class CoreAppProvider {
|
||||||
/**
|
/**
|
||||||
* Reset StatusBar color if any was set.
|
* Reset StatusBar color if any was set.
|
||||||
*
|
*
|
||||||
* @deprecated Use setStatusBarColor passing the color of the new statusbar color loaded on remote theme or no color to reset.
|
* @deprecated since 3.9.5. Use setStatusBarColor passing the color of the new statusbar color, or no color to reset.
|
||||||
*/
|
*/
|
||||||
resetStatusBarColor(): void {
|
resetStatusBarColor(): void {
|
||||||
this.setStatusBarColor();
|
this.setStatusBarColor();
|
||||||
|
|
|
@ -39,6 +39,8 @@ import { CoreFormFields, CoreForms } from '../../singletons/form';
|
||||||
import { CoreModalLateralTransitionEnter, CoreModalLateralTransitionLeave } from '@classes/modal-lateral-transition';
|
import { CoreModalLateralTransitionEnter, CoreModalLateralTransitionLeave } from '@classes/modal-lateral-transition';
|
||||||
import { CoreZoomLevel } from '@features/settings/services/settings-helper';
|
import { CoreZoomLevel } from '@features/settings/services/settings-helper';
|
||||||
import { CoreErrorWithTitle } from '@classes/errors/errorwithtitle';
|
import { CoreErrorWithTitle } from '@classes/errors/errorwithtitle';
|
||||||
|
import { AddonFilterMultilangHandler } from '@addons/filter/multilang/services/handlers/multilang';
|
||||||
|
import { CoreSites } from '@services/sites';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "Utils" service with helper functions for UI, DOM elements and HTML code.
|
* "Utils" service with helper functions for UI, DOM elements and HTML code.
|
||||||
|
@ -275,58 +277,6 @@ export class CoreDomUtilsProvider {
|
||||||
return newChanges;
|
return newChanges;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Extract the downloadable URLs from an HTML code.
|
|
||||||
*
|
|
||||||
* @param html HTML code.
|
|
||||||
* @return List of file urls.
|
|
||||||
* @deprecated since 3.8. Use CoreFilepoolProvider.extractDownloadableFilesFromHtml instead.
|
|
||||||
*/
|
|
||||||
extractDownloadableFilesFromHtml(html: string): string[] {
|
|
||||||
this.logger.error('The function extractDownloadableFilesFromHtml has been moved to CoreFilepoolProvider.' +
|
|
||||||
' Please use that function instead of this one.');
|
|
||||||
|
|
||||||
const urls: string[] = [];
|
|
||||||
|
|
||||||
const element = this.convertToElement(html);
|
|
||||||
const elements: AnchorOrMediaElement[] = Array.from(element.querySelectorAll('a, img, audio, video, source, track'));
|
|
||||||
|
|
||||||
for (let i = 0; i < elements.length; i++) {
|
|
||||||
const element = elements[i];
|
|
||||||
let url = 'href' in element ? element.href : element.src;
|
|
||||||
|
|
||||||
if (url && CoreUrlUtils.isDownloadableUrl(url) && urls.indexOf(url) == -1) {
|
|
||||||
urls.push(url);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Treat video poster.
|
|
||||||
if (element.tagName == 'VIDEO' && element.getAttribute('poster')) {
|
|
||||||
url = element.getAttribute('poster') || '';
|
|
||||||
if (url && CoreUrlUtils.isDownloadableUrl(url) && urls.indexOf(url) == -1) {
|
|
||||||
urls.push(url);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return urls;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extract the downloadable URLs from an HTML code and returns them in fake file objects.
|
|
||||||
*
|
|
||||||
* @param html HTML code.
|
|
||||||
* @return List of fake file objects with file URLs.
|
|
||||||
* @deprecated since 3.8. Use CoreFilepoolProvider.extractDownloadableFilesFromHtmlAsFakeFileObjects instead.
|
|
||||||
*/
|
|
||||||
extractDownloadableFilesFromHtmlAsFakeFileObjects(html: string): {fileurl: string}[] {
|
|
||||||
const urls = this.extractDownloadableFilesFromHtml(html);
|
|
||||||
|
|
||||||
// Convert them to fake file objects.
|
|
||||||
return urls.map((url) => ({
|
|
||||||
fileurl: url,
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Search all the URLs in a CSS file content.
|
* Search all the URLs in a CSS file content.
|
||||||
*
|
*
|
||||||
|
@ -1196,9 +1146,9 @@ export class CoreDomUtilsProvider {
|
||||||
async showAlertWithOptions(options: AlertOptions = {}, autocloseTime?: number): Promise<HTMLIonAlertElement> {
|
async showAlertWithOptions(options: AlertOptions = {}, autocloseTime?: number): Promise<HTMLIonAlertElement> {
|
||||||
const hasHTMLTags = CoreTextUtils.hasHTMLTags(<string> options.message || '');
|
const hasHTMLTags = CoreTextUtils.hasHTMLTags(<string> options.message || '');
|
||||||
|
|
||||||
if (hasHTMLTags) {
|
if (hasHTMLTags && !CoreSites.getCurrentSite()?.isVersionGreaterEqualThan('3.7')) {
|
||||||
// Format the text.
|
// Treat multilang.
|
||||||
options.message = await CoreTextUtils.formatText(<string> options.message);
|
options.message = await AddonFilterMultilangHandler.filter(<string> options.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
const alertId = <string> Md5.hashAsciiStr((options.header || '') + '#' + (options.message || ''));
|
const alertId = <string> Md5.hashAsciiStr((options.header || '') + '#' + (options.message || ''));
|
||||||
|
@ -2046,9 +1996,6 @@ function fixMDPopoverPosition(baseEl: HTMLElement, ev?: Event): void {
|
||||||
|
|
||||||
export const CoreDomUtils = makeSingleton(CoreDomUtilsProvider);
|
export const CoreDomUtils = makeSingleton(CoreDomUtilsProvider);
|
||||||
|
|
||||||
type AnchorOrMediaElement =
|
|
||||||
HTMLAnchorElement | HTMLImageElement | HTMLAudioElement | HTMLVideoElement | HTMLSourceElement | HTMLTrackElement;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Options for the openPopover function.
|
* Options for the openPopover function.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -17,7 +17,6 @@ import { SafeUrl } from '@angular/platform-browser';
|
||||||
import { ModalOptions } from '@ionic/core';
|
import { ModalOptions } from '@ionic/core';
|
||||||
|
|
||||||
import { CoreApp } from '@services/app';
|
import { CoreApp } from '@services/app';
|
||||||
import { CoreLang } from '@services/lang';
|
|
||||||
import { CoreAnyError, CoreError } from '@classes/errors/error';
|
import { CoreAnyError, CoreError } from '@classes/errors/error';
|
||||||
import { DomSanitizer, makeSingleton, Translate } from '@singletons';
|
import { DomSanitizer, makeSingleton, Translate } from '@singletons';
|
||||||
import { CoreWSFile } from '@services/ws';
|
import { CoreWSFile } from '@services/ws';
|
||||||
|
@ -507,33 +506,6 @@ export class CoreTextUtilsProvider {
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Formats a text, treating multilang tags and cleaning HTML if needed.
|
|
||||||
*
|
|
||||||
* @param text Text to format.
|
|
||||||
* @param clean Whether HTML tags should be removed.
|
|
||||||
* @param singleLine Whether new lines should be removed. Only valid if clean is true.
|
|
||||||
* @param shortenLength Number of characters to shorten the text.
|
|
||||||
* @param highlight Text to highlight.
|
|
||||||
* @return Promise resolved with the formatted text.
|
|
||||||
* @deprecated since 3.8.0. Please use CoreFilterProvider.formatText instead.
|
|
||||||
*/
|
|
||||||
formatText(text: string, clean?: boolean, singleLine?: boolean, shortenLength?: number, highlight?: string): Promise<string> {
|
|
||||||
return this.treatMultilangTags(text).then((formatted) => {
|
|
||||||
if (clean) {
|
|
||||||
formatted = this.cleanTags(formatted, singleLine);
|
|
||||||
}
|
|
||||||
if (shortenLength && shortenLength > 0) {
|
|
||||||
formatted = this.shortenText(formatted, shortenLength);
|
|
||||||
}
|
|
||||||
if (highlight) {
|
|
||||||
formatted = this.highlightText(formatted, highlight);
|
|
||||||
}
|
|
||||||
|
|
||||||
return formatted;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the error message from an error object.
|
* Get the error message from an error object.
|
||||||
*
|
*
|
||||||
|
@ -709,7 +681,7 @@ export class CoreTextUtilsProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated Use CoreText instead.
|
* @deprecated since 3.9.5. Use CoreText instead.
|
||||||
*/
|
*/
|
||||||
removeEndingSlash(text?: string): string {
|
removeEndingSlash(text?: string): string {
|
||||||
return CoreText.removeEndingSlash(text);
|
return CoreText.removeEndingSlash(text);
|
||||||
|
@ -997,43 +969,6 @@ export class CoreTextUtilsProvider {
|
||||||
return features;
|
return features;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Treat the multilang tags from a HTML code, leaving only the current language.
|
|
||||||
*
|
|
||||||
* @param text The text to be treated.
|
|
||||||
* @return Promise resolved with the formatted text.
|
|
||||||
* @deprecated since 3.8.0. Now this is handled by AddonFilterMultilangHandler.
|
|
||||||
*/
|
|
||||||
treatMultilangTags(text: string): Promise<string> {
|
|
||||||
if (!text || typeof text != 'string') {
|
|
||||||
return Promise.resolve('');
|
|
||||||
}
|
|
||||||
|
|
||||||
return CoreLang.getCurrentLanguage().then((language) => {
|
|
||||||
// Match the current language.
|
|
||||||
const anyLangRegEx = /<(?:lang|span)[^>]+lang="[a-zA-Z0-9_-]+"[^>]*>(.*?)<\/(?:lang|span)>/g;
|
|
||||||
let currentLangRegEx = new RegExp('<(?:lang|span)[^>]+lang="' + language + '"[^>]*>(.*?)</(?:lang|span)>', 'g');
|
|
||||||
|
|
||||||
if (!text.match(currentLangRegEx)) {
|
|
||||||
// Current lang not found. Try to find the first language.
|
|
||||||
const matches = text.match(anyLangRegEx);
|
|
||||||
if (matches && matches[0]) {
|
|
||||||
language = matches[0].match(/lang="([a-zA-Z0-9_-]+)"/)![1];
|
|
||||||
currentLangRegEx = new RegExp('<(?:lang|span)[^>]+lang="' + language + '"[^>]*>(.*?)</(?:lang|span)>', 'g');
|
|
||||||
} else {
|
|
||||||
// No multi-lang tag found, stop.
|
|
||||||
return text;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Extract contents of current language.
|
|
||||||
text = text.replace(currentLangRegEx, '$1');
|
|
||||||
// Delete the rest of languages
|
|
||||||
text = text.replace(anyLangRegEx, '');
|
|
||||||
|
|
||||||
return text;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove all ocurrences of a certain character from the start and end of a string.
|
* Remove all ocurrences of a certain character from the start and end of a string.
|
||||||
*
|
*
|
||||||
|
|
|
@ -21,14 +21,13 @@ import { CoreApp } from '@services/app';
|
||||||
import { CoreEvents } from '@singletons/events';
|
import { CoreEvents } from '@singletons/events';
|
||||||
import { CoreFile } from '@services/file';
|
import { CoreFile } from '@services/file';
|
||||||
import { CoreLang } from '@services/lang';
|
import { CoreLang } from '@services/lang';
|
||||||
import { CoreWS, CoreWSFile } from '@services/ws';
|
import { CoreWS } from '@services/ws';
|
||||||
import { CoreDomUtils } from '@services/utils/dom';
|
import { CoreDomUtils } from '@services/utils/dom';
|
||||||
import { CoreMimetypeUtils } from '@services/utils/mimetype';
|
import { CoreMimetypeUtils } from '@services/utils/mimetype';
|
||||||
import { CoreTextUtils } from '@services/utils/text';
|
import { CoreTextUtils } from '@services/utils/text';
|
||||||
import { CoreWSError } from '@classes/errors/wserror';
|
import { CoreWSError } from '@classes/errors/wserror';
|
||||||
import { makeSingleton, Clipboard, InAppBrowser, FileOpener, WebIntent, QRScanner, Translate, NgZone } from '@singletons';
|
import { makeSingleton, Clipboard, InAppBrowser, FileOpener, WebIntent, QRScanner, Translate, NgZone } from '@singletons';
|
||||||
import { CoreLogger } from '@singletons/logger';
|
import { CoreLogger } from '@singletons/logger';
|
||||||
import { CoreFileSizeSum } from '@services/plugin-file-delegate';
|
|
||||||
import { CoreViewerQRScannerComponent } from '@features/viewer/components/qr-scanner/qr-scanner';
|
import { CoreViewerQRScannerComponent } from '@features/viewer/components/qr-scanner/qr-scanner';
|
||||||
import { CoreCanceledError } from '@classes/errors/cancelederror';
|
import { CoreCanceledError } from '@classes/errors/cancelederror';
|
||||||
import { CoreFileEntry } from '@services/file-helper';
|
import { CoreFileEntry } from '@services/file-helper';
|
||||||
|
@ -1379,31 +1378,6 @@ export class CoreUtilsProvider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sum the filesizes from a list of files checking if the size will be partial or totally calculated.
|
|
||||||
*
|
|
||||||
* @param files List of files to sum its filesize.
|
|
||||||
* @return File size and a boolean to indicate if it is the total size or only partial.
|
|
||||||
* @deprecated since 3.8.0. Use CorePluginFileDelegate.getFilesSize instead.
|
|
||||||
*/
|
|
||||||
sumFileSizes(files: CoreWSFile[]): CoreFileSizeSum {
|
|
||||||
const result = {
|
|
||||||
size: 0,
|
|
||||||
total: true,
|
|
||||||
};
|
|
||||||
|
|
||||||
files.forEach((file) => {
|
|
||||||
if (typeof file.filesize == 'undefined') {
|
|
||||||
// We don't have the file size, cannot calculate its total size.
|
|
||||||
result.total = false;
|
|
||||||
} else {
|
|
||||||
result.size += file.filesize;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set a timeout to a Promise. If the time passes before the Promise is resolved or rejected, it will be automatically
|
* Set a timeout to a Promise. If the time passes before the Promise is resolved or rejected, it will be automatically
|
||||||
* rejected.
|
* rejected.
|
||||||
|
|
Loading…
Reference in New Issue