diff --git a/src/addons/filter/activitynames/activitynames.module.ts b/src/addons/filter/activitynames/activitynames.module.ts index 7971ef7bd..aad852015 100644 --- a/src/addons/filter/activitynames/activitynames.module.ts +++ b/src/addons/filter/activitynames/activitynames.module.ts @@ -26,8 +26,8 @@ import { AddonFilterActivityNamesHandler } from './services/handlers/activitynam { provide: APP_INITIALIZER, multi: true, - deps: [AddonFilterActivityNamesHandler], - useFactory: (handler: AddonFilterActivityNamesHandler) => () => CoreFilterDelegate.instance.registerHandler(handler), + deps: [], + useFactory: () => () => CoreFilterDelegate.instance.registerHandler(AddonFilterActivityNamesHandler.instance), }, ], }) diff --git a/src/addons/filter/activitynames/services/handlers/activitynames.ts b/src/addons/filter/activitynames/services/handlers/activitynames.ts index 4fbcbeea4..b6f27260b 100644 --- a/src/addons/filter/activitynames/services/handlers/activitynames.ts +++ b/src/addons/filter/activitynames/services/handlers/activitynames.ts @@ -17,12 +17,13 @@ import { Injectable } from '@angular/core'; import { CoreFilterDefaultHandler } from '@features/filter/services/handlers/default-filter'; import { CoreFilterFormatTextOptions } from '@features/filter/services/filter'; import { CoreSite } from '@classes/site'; +import { makeSingleton } from '@singletons'; /** * Handler to support the Activity names filter. */ @Injectable({ providedIn: 'root' }) -export class AddonFilterActivityNamesHandler extends CoreFilterDefaultHandler { +export class AddonFilterActivityNamesHandlerService extends CoreFilterDefaultHandler { name = 'AddonFilterActivityNamesHandler'; filterName = 'activitynames'; @@ -41,3 +42,5 @@ export class AddonFilterActivityNamesHandler extends CoreFilterDefaultHandler { } } + +export class AddonFilterActivityNamesHandler extends makeSingleton(AddonFilterActivityNamesHandlerService) {} diff --git a/src/addons/filter/algebra/algebra.module.ts b/src/addons/filter/algebra/algebra.module.ts index b2b231fba..1e6b6287c 100644 --- a/src/addons/filter/algebra/algebra.module.ts +++ b/src/addons/filter/algebra/algebra.module.ts @@ -26,8 +26,8 @@ import { AddonFilterAlgebraHandler } from './services/handlers/algebra'; { provide: APP_INITIALIZER, multi: true, - deps: [AddonFilterAlgebraHandler], - useFactory: (handler: AddonFilterAlgebraHandler) => () => CoreFilterDelegate.instance.registerHandler(handler), + deps: [], + useFactory: () => () => CoreFilterDelegate.instance.registerHandler(AddonFilterAlgebraHandler.instance), }, ], }) diff --git a/src/addons/filter/algebra/services/handlers/algebra.ts b/src/addons/filter/algebra/services/handlers/algebra.ts index 656737d3f..378e2833e 100644 --- a/src/addons/filter/algebra/services/handlers/algebra.ts +++ b/src/addons/filter/algebra/services/handlers/algebra.ts @@ -17,12 +17,13 @@ import { Injectable } from '@angular/core'; import { CoreFilterDefaultHandler } from '@features/filter/services/handlers/default-filter'; import { CoreFilterFormatTextOptions } from '@features/filter/services/filter'; import { CoreSite } from '@classes/site'; +import { makeSingleton } from '@singletons'; /** * Handler to support the Algebra notation filter. */ @Injectable({ providedIn: 'root' }) -export class AddonFilterAlgebraHandler extends CoreFilterDefaultHandler { +export class AddonFilterAlgebraHandlerService extends CoreFilterDefaultHandler { name = 'AddonFilterAlgebraHandler'; filterName = 'algebra'; @@ -41,3 +42,5 @@ export class AddonFilterAlgebraHandler extends CoreFilterDefaultHandler { } } + +export class AddonFilterAlgebraHandler extends makeSingleton(AddonFilterAlgebraHandlerService) {} diff --git a/src/addons/filter/censor/censor.module.ts b/src/addons/filter/censor/censor.module.ts index fb07088a8..28b749619 100644 --- a/src/addons/filter/censor/censor.module.ts +++ b/src/addons/filter/censor/censor.module.ts @@ -26,8 +26,8 @@ import { AddonFilterCensorHandler } from './services/handlers/censor'; { provide: APP_INITIALIZER, multi: true, - deps: [AddonFilterCensorHandler], - useFactory: (handler: AddonFilterCensorHandler) => () => CoreFilterDelegate.instance.registerHandler(handler), + deps: [], + useFactory: () => () => CoreFilterDelegate.instance.registerHandler(AddonFilterCensorHandler.instance), }, ], }) diff --git a/src/addons/filter/censor/services/handlers/censor.ts b/src/addons/filter/censor/services/handlers/censor.ts index 1e8225047..074c76dd9 100644 --- a/src/addons/filter/censor/services/handlers/censor.ts +++ b/src/addons/filter/censor/services/handlers/censor.ts @@ -17,12 +17,13 @@ import { Injectable } from '@angular/core'; import { CoreFilterDefaultHandler } from '@features/filter/services/handlers/default-filter'; import { CoreFilterFormatTextOptions } from '@features/filter/services/filter'; import { CoreSite } from '@classes/site'; +import { makeSingleton } from '@singletons'; /** * Handler to support the Word censorship filter. */ @Injectable({ providedIn: 'root' }) -export class AddonFilterCensorHandler extends CoreFilterDefaultHandler { +export class AddonFilterCensorHandlerService extends CoreFilterDefaultHandler { name = 'AddonFilterCensorHandler'; filterName = 'censor'; @@ -41,3 +42,5 @@ export class AddonFilterCensorHandler extends CoreFilterDefaultHandler { } } + +export class AddonFilterCensorHandler extends makeSingleton(AddonFilterCensorHandlerService) {} diff --git a/src/addons/filter/data/data.module.ts b/src/addons/filter/data/data.module.ts index 716948cb5..1e2488629 100644 --- a/src/addons/filter/data/data.module.ts +++ b/src/addons/filter/data/data.module.ts @@ -26,8 +26,8 @@ import { AddonFilterDataHandler } from './services/handlers/data'; { provide: APP_INITIALIZER, multi: true, - deps: [AddonFilterDataHandler], - useFactory: (handler: AddonFilterDataHandler) => () => CoreFilterDelegate.instance.registerHandler(handler), + deps: [], + useFactory: () => () => CoreFilterDelegate.instance.registerHandler(AddonFilterDataHandler.instance), }, ], }) diff --git a/src/addons/filter/data/services/handlers/data.ts b/src/addons/filter/data/services/handlers/data.ts index fc4b24c0f..92006a5b2 100644 --- a/src/addons/filter/data/services/handlers/data.ts +++ b/src/addons/filter/data/services/handlers/data.ts @@ -17,12 +17,13 @@ import { Injectable } from '@angular/core'; import { CoreFilterDefaultHandler } from '@features/filter/services/handlers/default-filter'; import { CoreFilterFormatTextOptions } from '@features/filter/services/filter'; import { CoreSite } from '@classes/site'; +import { makeSingleton } from '@singletons'; /** * Handler to support the Database auto-link filter. */ @Injectable({ providedIn: 'root' }) -export class AddonFilterDataHandler extends CoreFilterDefaultHandler { +export class AddonFilterDataHandlerService extends CoreFilterDefaultHandler { name = 'AddonFilterDataHandler'; filterName = 'data'; @@ -41,3 +42,5 @@ export class AddonFilterDataHandler extends CoreFilterDefaultHandler { } } + +export class AddonFilterDataHandler extends makeSingleton(AddonFilterDataHandlerService) {} diff --git a/src/addons/filter/displayh5p/displayh5p.module.ts b/src/addons/filter/displayh5p/displayh5p.module.ts index 1145b1362..9aaa97ea2 100644 --- a/src/addons/filter/displayh5p/displayh5p.module.ts +++ b/src/addons/filter/displayh5p/displayh5p.module.ts @@ -26,8 +26,8 @@ import { AddonFilterDisplayH5PHandler } from './services/handlers/displayh5p'; { provide: APP_INITIALIZER, multi: true, - deps: [AddonFilterDisplayH5PHandler], - useFactory: (handler: AddonFilterDisplayH5PHandler) => () => CoreFilterDelegate.instance.registerHandler(handler), + deps: [], + useFactory: () => () => CoreFilterDelegate.instance.registerHandler(AddonFilterDisplayH5PHandler.instance), }, ], }) diff --git a/src/addons/filter/displayh5p/services/handlers/displayh5p.ts b/src/addons/filter/displayh5p/services/handlers/displayh5p.ts index da70664d8..67a07b92c 100644 --- a/src/addons/filter/displayh5p/services/handlers/displayh5p.ts +++ b/src/addons/filter/displayh5p/services/handlers/displayh5p.ts @@ -16,13 +16,14 @@ import { Injectable, ViewContainerRef, ComponentFactoryResolver } from '@angular import { CoreFilterDefaultHandler } from '@features/filter/services/handlers/default-filter'; import { CoreFilterFilter, CoreFilterFormatTextOptions } from '@features/filter/services/filter'; +import { makeSingleton } from '@singletons'; // @todo import { CoreH5PPlayerComponent } from '@core/h5p/components/h5p-player/h5p-player'; /** * Handler to support the Display H5P filter. */ @Injectable({ providedIn: 'root' }) -export class AddonFilterDisplayH5PHandler extends CoreFilterDefaultHandler { +export class AddonFilterDisplayH5PHandlerService extends CoreFilterDefaultHandler { name = 'AddonFilterDisplayH5PHandler'; filterName = 'displayh5p'; @@ -108,3 +109,5 @@ export class AddonFilterDisplayH5PHandler extends CoreFilterDefaultHandler { } } + +export class AddonFilterDisplayH5PHandler extends makeSingleton(AddonFilterDisplayH5PHandlerService) {} diff --git a/src/addons/filter/emailprotect/emailprotect.module.ts b/src/addons/filter/emailprotect/emailprotect.module.ts index 8e1fa7981..f035274e6 100644 --- a/src/addons/filter/emailprotect/emailprotect.module.ts +++ b/src/addons/filter/emailprotect/emailprotect.module.ts @@ -26,8 +26,8 @@ import { AddonFilterEmailProtectHandler } from './services/handlers/emailprotect { provide: APP_INITIALIZER, multi: true, - deps: [AddonFilterEmailProtectHandler], - useFactory: (handler: AddonFilterEmailProtectHandler) => () => CoreFilterDelegate.instance.registerHandler(handler), + deps: [], + useFactory: () => () => CoreFilterDelegate.instance.registerHandler(AddonFilterEmailProtectHandler.instance), }, ], }) diff --git a/src/addons/filter/emailprotect/services/handlers/emailprotect.ts b/src/addons/filter/emailprotect/services/handlers/emailprotect.ts index 301e2d335..972356e66 100644 --- a/src/addons/filter/emailprotect/services/handlers/emailprotect.ts +++ b/src/addons/filter/emailprotect/services/handlers/emailprotect.ts @@ -17,12 +17,13 @@ import { Injectable } from '@angular/core'; import { CoreFilterDefaultHandler } from '@features/filter/services/handlers/default-filter'; import { CoreFilterFormatTextOptions } from '@features/filter/services/filter'; import { CoreSite } from '@classes/site'; +import { makeSingleton } from '@singletons'; /** * Handler to support the Email protection filter. */ @Injectable({ providedIn: 'root' }) -export class AddonFilterEmailProtectHandler extends CoreFilterDefaultHandler { +export class AddonFilterEmailProtectHandlerService extends CoreFilterDefaultHandler { name = 'AddonFilterEmailProtectHandler'; filterName = 'emailprotect'; @@ -41,3 +42,5 @@ export class AddonFilterEmailProtectHandler extends CoreFilterDefaultHandler { } } + +export class AddonFilterEmailProtectHandler extends makeSingleton(AddonFilterEmailProtectHandlerService) {} diff --git a/src/addons/filter/emoticon/emoticon.module.ts b/src/addons/filter/emoticon/emoticon.module.ts index 821b56a49..ada8d0aac 100644 --- a/src/addons/filter/emoticon/emoticon.module.ts +++ b/src/addons/filter/emoticon/emoticon.module.ts @@ -26,8 +26,8 @@ import { AddonFilterEmoticonHandler } from './services/handlers/emoticon'; { provide: APP_INITIALIZER, multi: true, - deps: [AddonFilterEmoticonHandler], - useFactory: (handler: AddonFilterEmoticonHandler) => () => CoreFilterDelegate.instance.registerHandler(handler), + deps: [], + useFactory: () => () => CoreFilterDelegate.instance.registerHandler(AddonFilterEmoticonHandler.instance), }, ], }) diff --git a/src/addons/filter/emoticon/services/handlers/emoticon.ts b/src/addons/filter/emoticon/services/handlers/emoticon.ts index 128502222..0033e21fa 100644 --- a/src/addons/filter/emoticon/services/handlers/emoticon.ts +++ b/src/addons/filter/emoticon/services/handlers/emoticon.ts @@ -17,12 +17,13 @@ import { Injectable } from '@angular/core'; import { CoreFilterDefaultHandler } from '@features/filter/services/handlers/default-filter'; import { CoreFilterFormatTextOptions } from '@features/filter/services/filter'; import { CoreSite } from '@classes/site'; +import { makeSingleton } from '@singletons'; /** * Handler to support the Emoticon filter. */ @Injectable({ providedIn: 'root' }) -export class AddonFilterEmoticonHandler extends CoreFilterDefaultHandler { +export class AddonFilterEmoticonHandlerService extends CoreFilterDefaultHandler { name = 'AddonFilterEmoticonHandler'; filterName = 'emoticon'; @@ -41,3 +42,5 @@ export class AddonFilterEmoticonHandler extends CoreFilterDefaultHandler { } } + +export class AddonFilterEmoticonHandler extends makeSingleton(AddonFilterEmoticonHandlerService) {} diff --git a/src/addons/filter/glossary/glossary.module.ts b/src/addons/filter/glossary/glossary.module.ts index 225403e35..d38234843 100644 --- a/src/addons/filter/glossary/glossary.module.ts +++ b/src/addons/filter/glossary/glossary.module.ts @@ -26,8 +26,8 @@ import { AddonFilterGlossaryHandler } from './services/handlers/glossary'; { provide: APP_INITIALIZER, multi: true, - deps: [AddonFilterGlossaryHandler], - useFactory: (handler: AddonFilterGlossaryHandler) => () => CoreFilterDelegate.instance.registerHandler(handler), + deps: [], + useFactory: () => () => CoreFilterDelegate.instance.registerHandler(AddonFilterGlossaryHandler.instance), }, ], }) diff --git a/src/addons/filter/glossary/services/handlers/glossary.ts b/src/addons/filter/glossary/services/handlers/glossary.ts index 6b6abd4ee..412434058 100644 --- a/src/addons/filter/glossary/services/handlers/glossary.ts +++ b/src/addons/filter/glossary/services/handlers/glossary.ts @@ -17,12 +17,13 @@ import { Injectable } from '@angular/core'; import { CoreFilterDefaultHandler } from '@features/filter/services/handlers/default-filter'; import { CoreFilterFormatTextOptions } from '@features/filter/services/filter'; import { CoreSite } from '@classes/site'; +import { makeSingleton } from '@singletons'; /** * Handler to support the Glossary auto-link filter. */ @Injectable({ providedIn: 'root' }) -export class AddonFilterGlossaryHandler extends CoreFilterDefaultHandler { +export class AddonFilterGlossaryHandlerService extends CoreFilterDefaultHandler { name = 'AddonFilterGlossaryHandler'; filterName = 'glossary'; @@ -41,3 +42,5 @@ export class AddonFilterGlossaryHandler extends CoreFilterDefaultHandler { } } + +export class AddonFilterGlossaryHandler extends makeSingleton(AddonFilterGlossaryHandlerService) {} diff --git a/src/addons/filter/mathjaxloader/mathjaxloader.module.ts b/src/addons/filter/mathjaxloader/mathjaxloader.module.ts index bb5ded4e5..3caa6efb9 100644 --- a/src/addons/filter/mathjaxloader/mathjaxloader.module.ts +++ b/src/addons/filter/mathjaxloader/mathjaxloader.module.ts @@ -26,11 +26,11 @@ import { AddonFilterMathJaxLoaderHandler } from './services/handlers/mathjaxload { provide: APP_INITIALIZER, multi: true, - deps: [AddonFilterMathJaxLoaderHandler], - useFactory: (handler: AddonFilterMathJaxLoaderHandler) => async () => { - CoreFilterDelegate.instance.registerHandler(handler); + deps: [], + useFactory: () => async () => { + CoreFilterDelegate.instance.registerHandler(AddonFilterMathJaxLoaderHandler.instance); - await handler.initialize(); + await AddonFilterMathJaxLoaderHandler.instance.initialize(); }, }, ], diff --git a/src/addons/filter/mathjaxloader/services/handlers/mathjaxloader.ts b/src/addons/filter/mathjaxloader/services/handlers/mathjaxloader.ts index 94e58f341..5056dc1c5 100644 --- a/src/addons/filter/mathjaxloader/services/handlers/mathjaxloader.ts +++ b/src/addons/filter/mathjaxloader/services/handlers/mathjaxloader.ts @@ -22,12 +22,13 @@ import { CoreTextUtils } from '@services/utils/text'; import { CoreUtils } from '@services/utils/utils'; import { CoreEvents } from '@singletons/events'; import { CoreSite } from '@classes/site'; +import { makeSingleton } from '@singletons'; /** * Handler to support the MathJax filter. */ @Injectable({ providedIn: 'root' }) -export class AddonFilterMathJaxLoaderHandler extends CoreFilterDefaultHandler { +export class AddonFilterMathJaxLoaderHandlerService extends CoreFilterDefaultHandler { name = 'AddonFilterMathJaxLoaderHandler'; filterName = 'mathjaxloader'; @@ -395,6 +396,8 @@ export class AddonFilterMathJaxLoaderHandler extends CoreFilterDefaultHandler { } +export class AddonFilterMathJaxLoaderHandler extends makeSingleton(AddonFilterMathJaxLoaderHandlerService) {} + type MathJaxWindow = Window & { MathJax?: any; // eslint-disable-line @typescript-eslint/naming-convention, @typescript-eslint/no-explicit-any M?: { // eslint-disable-line @typescript-eslint/naming-convention diff --git a/src/addons/filter/mediaplugin/mediaplugin.module.ts b/src/addons/filter/mediaplugin/mediaplugin.module.ts index 31c76ada5..f1099474f 100644 --- a/src/addons/filter/mediaplugin/mediaplugin.module.ts +++ b/src/addons/filter/mediaplugin/mediaplugin.module.ts @@ -26,8 +26,8 @@ import { AddonFilterMediaPluginHandler } from './services/handlers/mediaplugin'; { provide: APP_INITIALIZER, multi: true, - deps: [AddonFilterMediaPluginHandler], - useFactory: (handler: AddonFilterMediaPluginHandler) => () => CoreFilterDelegate.instance.registerHandler(handler), + deps: [], + useFactory: () => () => CoreFilterDelegate.instance.registerHandler(AddonFilterMediaPluginHandler.instance), }, ], }) diff --git a/src/addons/filter/mediaplugin/services/handlers/mediaplugin.ts b/src/addons/filter/mediaplugin/services/handlers/mediaplugin.ts index e5e57a91b..552df81e3 100644 --- a/src/addons/filter/mediaplugin/services/handlers/mediaplugin.ts +++ b/src/addons/filter/mediaplugin/services/handlers/mediaplugin.ts @@ -18,12 +18,13 @@ import { CoreFilterDefaultHandler } from '@features/filter/services/handlers/def import { CoreFilterFilter, CoreFilterFormatTextOptions } from '@features/filter/services/filter'; import { CoreTextUtils } from '@services/utils/text'; import { CoreUrlUtils } from '@services/utils/url'; +import { makeSingleton } from '@singletons'; /** * Handler to support the Multimedia filter. */ @Injectable({ providedIn: 'root' }) -export class AddonFilterMediaPluginHandler extends CoreFilterDefaultHandler { +export class AddonFilterMediaPluginHandlerService extends CoreFilterDefaultHandler { name = 'AddonFilterMediaPluginHandler'; filterName = 'mediaplugin'; @@ -90,6 +91,8 @@ export class AddonFilterMediaPluginHandler extends CoreFilterDefaultHandler { } +export class AddonFilterMediaPluginHandler extends makeSingleton(AddonFilterMediaPluginHandlerService) {} + type VideoDataSetup = { techOrder?: string[]; sources?: { diff --git a/src/addons/filter/multilang/multilang.module.ts b/src/addons/filter/multilang/multilang.module.ts index eecc197a9..58fb590e3 100644 --- a/src/addons/filter/multilang/multilang.module.ts +++ b/src/addons/filter/multilang/multilang.module.ts @@ -26,8 +26,8 @@ import { AddonFilterMultilangHandler } from './services/handlers/multilang'; { provide: APP_INITIALIZER, multi: true, - deps: [AddonFilterMultilangHandler], - useFactory: (handler: AddonFilterMultilangHandler) => () => CoreFilterDelegate.instance.registerHandler(handler), + deps: [], + useFactory: () => () => CoreFilterDelegate.instance.registerHandler(AddonFilterMultilangHandler.instance), }, ], }) diff --git a/src/addons/filter/multilang/services/handlers/multilang.ts b/src/addons/filter/multilang/services/handlers/multilang.ts index 04434a557..a0b4b3eca 100644 --- a/src/addons/filter/multilang/services/handlers/multilang.ts +++ b/src/addons/filter/multilang/services/handlers/multilang.ts @@ -18,12 +18,13 @@ import { CoreLang } from '@services/lang'; import { CoreFilterDefaultHandler } from '@features/filter/services/handlers/default-filter'; import { CoreFilterFilter, CoreFilterFormatTextOptions } from '@features/filter/services/filter'; import { CoreSite } from '@classes/site'; +import { makeSingleton } from '@singletons'; /** * Handler to support the Multilang filter. */ @Injectable({ providedIn: 'root' }) -export class AddonFilterMultilangHandler extends CoreFilterDefaultHandler { +export class AddonFilterMultilangHandlerService extends CoreFilterDefaultHandler { name = 'AddonFilterMultilangHandler'; filterName = 'multilang'; @@ -82,3 +83,5 @@ export class AddonFilterMultilangHandler extends CoreFilterDefaultHandler { } } + +export class AddonFilterMultilangHandler extends makeSingleton(AddonFilterMultilangHandlerService) {} diff --git a/src/addons/filter/tex/services/handlers/tex.ts b/src/addons/filter/tex/services/handlers/tex.ts index d871764b2..c1412fbe3 100644 --- a/src/addons/filter/tex/services/handlers/tex.ts +++ b/src/addons/filter/tex/services/handlers/tex.ts @@ -17,12 +17,13 @@ import { Injectable } from '@angular/core'; import { CoreFilterDefaultHandler } from '@features/filter/services/handlers/default-filter'; import { CoreFilterFormatTextOptions } from '@features/filter/services/filter'; import { CoreSite } from '@classes/site'; +import { makeSingleton } from '@singletons'; /** * Handler to support the TeX notation filter. */ @Injectable({ providedIn: 'root' }) -export class AddonFilterTexHandler extends CoreFilterDefaultHandler { +export class AddonFilterTexHandlerService extends CoreFilterDefaultHandler { name = 'AddonFilterTexHandler'; filterName = 'tex'; @@ -41,3 +42,5 @@ export class AddonFilterTexHandler extends CoreFilterDefaultHandler { } } + +export class AddonFilterTexHandler extends makeSingleton(AddonFilterTexHandlerService) {} diff --git a/src/addons/filter/tex/tex.module.ts b/src/addons/filter/tex/tex.module.ts index 75242bd21..124f0b793 100644 --- a/src/addons/filter/tex/tex.module.ts +++ b/src/addons/filter/tex/tex.module.ts @@ -26,8 +26,8 @@ import { AddonFilterTexHandler } from './services/handlers/tex'; { provide: APP_INITIALIZER, multi: true, - deps: [AddonFilterTexHandler], - useFactory: (handler: AddonFilterTexHandler) => () => CoreFilterDelegate.instance.registerHandler(handler), + deps: [], + useFactory: () => () => CoreFilterDelegate.instance.registerHandler(AddonFilterTexHandler.instance), }, ], }) diff --git a/src/addons/filter/tidy/services/handlers/tidy.ts b/src/addons/filter/tidy/services/handlers/tidy.ts index 059428325..62ab7ede8 100644 --- a/src/addons/filter/tidy/services/handlers/tidy.ts +++ b/src/addons/filter/tidy/services/handlers/tidy.ts @@ -17,12 +17,13 @@ import { Injectable } from '@angular/core'; import { CoreFilterDefaultHandler } from '@features/filter/services/handlers/default-filter'; import { CoreFilterFormatTextOptions } from '@features/filter/services/filter'; import { CoreSite } from '@classes/site'; +import { makeSingleton } from '@singletons'; /** * Handler to support the HTML tidy filter. */ @Injectable({ providedIn: 'root' }) -export class AddonFilterTidyHandler extends CoreFilterDefaultHandler { +export class AddonFilterTidyHandlerService extends CoreFilterDefaultHandler { name = 'AddonFilterTidyHandler'; filterName = 'tidy'; @@ -41,3 +42,5 @@ export class AddonFilterTidyHandler extends CoreFilterDefaultHandler { } } + +export class AddonFilterTidyHandler extends makeSingleton(AddonFilterTidyHandlerService) {} diff --git a/src/addons/filter/tidy/tidy.module.ts b/src/addons/filter/tidy/tidy.module.ts index 8fcca0242..fc8f3989c 100644 --- a/src/addons/filter/tidy/tidy.module.ts +++ b/src/addons/filter/tidy/tidy.module.ts @@ -26,8 +26,8 @@ import { AddonFilterTidyHandler } from './services/handlers/tidy'; { provide: APP_INITIALIZER, multi: true, - deps: [AddonFilterTidyHandler], - useFactory: (handler: AddonFilterTidyHandler) => () => CoreFilterDelegate.instance.registerHandler(handler), + deps: [], + useFactory: () => () => CoreFilterDelegate.instance.registerHandler(AddonFilterTidyHandler.instance), }, ], }) diff --git a/src/addons/filter/urltolink/services/handlers/urltolink.ts b/src/addons/filter/urltolink/services/handlers/urltolink.ts index af2e740ad..cff0dd5d8 100644 --- a/src/addons/filter/urltolink/services/handlers/urltolink.ts +++ b/src/addons/filter/urltolink/services/handlers/urltolink.ts @@ -17,12 +17,13 @@ import { Injectable } from '@angular/core'; import { CoreFilterDefaultHandler } from '@features/filter/services/handlers/default-filter'; import { CoreFilterFormatTextOptions } from '@features/filter/services/filter'; import { CoreSite } from '@classes/site'; +import { makeSingleton } from '@singletons'; /** * Handler to support the URL to link and images filter. */ @Injectable({ providedIn: 'root' }) -export class AddonFilterUrlToLinkHandler extends CoreFilterDefaultHandler { +export class AddonFilterUrlToLinkHandlerService extends CoreFilterDefaultHandler { name = 'AddonFilterUrlToLinkHandler'; filterName = 'urltolink'; @@ -41,3 +42,5 @@ export class AddonFilterUrlToLinkHandler extends CoreFilterDefaultHandler { } } + +export class AddonFilterUrlToLinkHandler extends makeSingleton(AddonFilterUrlToLinkHandlerService) {} diff --git a/src/addons/filter/urltolink/urltolink.module.ts b/src/addons/filter/urltolink/urltolink.module.ts index e6d5e6dd6..8e4ee1591 100644 --- a/src/addons/filter/urltolink/urltolink.module.ts +++ b/src/addons/filter/urltolink/urltolink.module.ts @@ -26,8 +26,8 @@ import { AddonFilterUrlToLinkHandler } from './services/handlers/urltolink'; { provide: APP_INITIALIZER, multi: true, - deps: [AddonFilterUrlToLinkHandler], - useFactory: (handler: AddonFilterUrlToLinkHandler) => () => CoreFilterDelegate.instance.registerHandler(handler), + deps: [], + useFactory: () => () => CoreFilterDelegate.instance.registerHandler(AddonFilterUrlToLinkHandler.instance), }, ], }) diff --git a/src/addons/privatefiles/privatefiles.module.ts b/src/addons/privatefiles/privatefiles.module.ts index 59af1bcbf..26e7073ab 100644 --- a/src/addons/privatefiles/privatefiles.module.ts +++ b/src/addons/privatefiles/privatefiles.module.ts @@ -12,16 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { NgModule } from '@angular/core'; +import { APP_INITIALIZER, NgModule } from '@angular/core'; import { Routes } from '@angular/router'; import { CoreMainMenuDelegate } from '@features/mainmenu/services/mainmenu-delegate'; import { CoreMainMenuRoutingModule } from '@features/mainmenu/mainmenu-routing.module'; -import { AddonPrivateFilesMainMenuHandler } from './services/handlers/mainmenu'; +import { AddonPrivateFilesMainMenuHandler, AddonPrivateFilesMainMenuHandlerService } from './services/handlers/mainmenu'; const routes: Routes = [ { - path: AddonPrivateFilesMainMenuHandler.PAGE_NAME, + path: AddonPrivateFilesMainMenuHandlerService.PAGE_NAME, loadChildren: () => import('@/addons/privatefiles/privatefiles-lazy.module').then(m => m.AddonPrivateFilesLazyModule), }, ]; @@ -30,16 +30,14 @@ const routes: Routes = [ imports: [CoreMainMenuRoutingModule.forChild({ children: routes })], exports: [CoreMainMenuRoutingModule], providers: [ - AddonPrivateFilesMainMenuHandler, + { + provide: APP_INITIALIZER, + multi: true, + deps: [], + useFactory: () => () => { + CoreMainMenuDelegate.instance.registerHandler(AddonPrivateFilesMainMenuHandler.instance); + }, + }, ], }) -export class AddonPrivateFilesModule { - - constructor( - mainMenuDelegate: CoreMainMenuDelegate, - mainMenuHandler: AddonPrivateFilesMainMenuHandler, - ) { - mainMenuDelegate.registerHandler(mainMenuHandler); - } - -} +export class AddonPrivateFilesModule {} diff --git a/src/addons/privatefiles/services/handlers/mainmenu.ts b/src/addons/privatefiles/services/handlers/mainmenu.ts index 6e2e8ae2f..2adfe081c 100644 --- a/src/addons/privatefiles/services/handlers/mainmenu.ts +++ b/src/addons/privatefiles/services/handlers/mainmenu.ts @@ -16,12 +16,13 @@ import { Injectable } from '@angular/core'; import { CoreMainMenuHandler, CoreMainMenuHandlerData } from '@features/mainmenu/services/mainmenu-delegate'; import { AddonPrivateFiles } from '@/addons/privatefiles/services/privatefiles'; +import { makeSingleton } from '@singletons'; /** * Handler to inject an option into main menu. */ -@Injectable() -export class AddonPrivateFilesMainMenuHandler implements CoreMainMenuHandler { +@Injectable({ providedIn: 'root' }) +export class AddonPrivateFilesMainMenuHandlerService implements CoreMainMenuHandler { static readonly PAGE_NAME = 'private'; @@ -46,10 +47,12 @@ export class AddonPrivateFilesMainMenuHandler implements CoreMainMenuHandler { return { icon: 'fas-folder', title: 'addon.privatefiles.files', - page: AddonPrivateFilesMainMenuHandler.PAGE_NAME, + page: AddonPrivateFilesMainMenuHandlerService.PAGE_NAME, subPage: 'root', class: 'addon-privatefiles-handler', }; } } + +export class AddonPrivateFilesMainMenuHandler extends makeSingleton(AddonPrivateFilesMainMenuHandlerService) {} diff --git a/src/core/components/file/file.ts b/src/core/components/file/file.ts index 4ef0645b6..60ad14966 100644 --- a/src/core/components/file/file.ts +++ b/src/core/components/file/file.ts @@ -60,9 +60,7 @@ export class CoreFileComponent implements OnInit, OnDestroy { protected fileSize?: number; protected observer?: CoreEventObserver; - constructor( - protected pluginFileDelegate: CorePluginFileDelegate, - ) { + constructor() { this.onDelete = new EventEmitter(); } @@ -195,7 +193,7 @@ export class CoreFileComponent implements OnInit, OnDestroy { } else { try { // File doesn't need to be opened (it's a prefetch). Show confirm modal if file size is defined and it's big. - const size = await this.pluginFileDelegate.getFileSize(this.file, this.siteId); + const size = await CorePluginFileDelegate.instance.getFileSize(this.file, this.siteId); if (size) { await CoreDomUtils.instance.confirmDownloadSize({ size: size, total: true }); diff --git a/src/core/features/contentlinks/services/contentlinks-delegate.ts b/src/core/features/contentlinks/services/contentlinks-delegate.ts index 3ed6d250a..7328626f0 100644 --- a/src/core/features/contentlinks/services/contentlinks-delegate.ts +++ b/src/core/features/contentlinks/services/contentlinks-delegate.ts @@ -18,6 +18,7 @@ import { CoreSites } from '@services/sites'; import { CoreUrlUtils } from '@services/utils/url'; import { CoreUtils } from '@services/utils/utils'; import { Params } from '@angular/router'; +import { makeSingleton } from '@singletons'; /** * Interface that all handlers must implement. @@ -132,10 +133,8 @@ export interface CoreContentLinksHandlerActions { /** * Delegate to register handlers to handle links. */ -@Injectable({ - providedIn: 'root', -}) -export class CoreContentLinksDelegate { +@Injectable({ providedIn: 'root' }) +export class CoreContentLinksDelegateService { protected logger: CoreLogger; protected handlers: { [s: string]: CoreContentLinksHandler } = {}; // All registered handlers. @@ -307,3 +306,5 @@ export class CoreContentLinksDelegate { } } + +export class CoreContentLinksDelegate extends makeSingleton(CoreContentLinksDelegateService) {} diff --git a/src/core/features/contentlinks/services/contentlinks-helper.ts b/src/core/features/contentlinks/services/contentlinks-helper.ts index af777f183..6ee01013a 100644 --- a/src/core/features/contentlinks/services/contentlinks-helper.ts +++ b/src/core/features/contentlinks/services/contentlinks-helper.ts @@ -33,7 +33,6 @@ import { Params } from '@angular/router'; export class CoreContentLinksHelperProvider { constructor( - protected contentLinksDelegate: CoreContentLinksDelegate, protected navCtrl: NavController, ) { } @@ -80,7 +79,7 @@ export class CoreContentLinksHelperProvider { username?: string, data?: unknown, ): Promise { - const actions = await this.contentLinksDelegate.getActionsFor(url, courseId, username, data); + const actions = await CoreContentLinksDelegate.instance.getActionsFor(url, courseId, username, data); if (!actions) { return; } diff --git a/src/core/features/courses/courses.module.ts b/src/core/features/courses/courses.module.ts index a51f0b3b7..3f5014a11 100644 --- a/src/core/features/courses/courses.module.ts +++ b/src/core/features/courses/courses.module.ts @@ -12,27 +12,27 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { NgModule } from '@angular/core'; +import { APP_INITIALIZER, NgModule } from '@angular/core'; import { Routes } from '@angular/router'; import { CoreMainMenuHomeRoutingModule } from '@features/mainmenu/pages/home/home-routing.module'; import { CoreMainMenuHomeDelegate } from '@features/mainmenu/services/home-delegate'; -import { CoreDashboardHomeHandler } from './services/handlers/dashboard-home'; -import { CoreCoursesMyCoursesHomeHandler } from './services/handlers/my-courses.home'; +import { CoreDashboardHomeHandler, CoreDashboardHomeHandlerService } from './services/handlers/dashboard-home'; +import { CoreCoursesMyCoursesHomeHandler, CoreCoursesMyCoursesHomeHandlerService } from './services/handlers/my-courses.home'; const mainMenuHomeChildrenRoutes: Routes = [ { path: '', pathMatch: 'full', - redirectTo: CoreDashboardHomeHandler.PAGE_NAME, + redirectTo: CoreDashboardHomeHandlerService.PAGE_NAME, }, { - path: CoreDashboardHomeHandler.PAGE_NAME, + path: CoreDashboardHomeHandlerService.PAGE_NAME, loadChildren: () => import('./pages/dashboard/dashboard.module').then(m => m.CoreCoursesDashboardPageModule), }, { - path: CoreCoursesMyCoursesHomeHandler.PAGE_NAME, + path: CoreCoursesMyCoursesHomeHandlerService.PAGE_NAME, loadChildren: () => import('./pages/my-courses/my-courses.module').then(m => m.CoreCoursesMyCoursesPageModule), }, ]; @@ -52,19 +52,15 @@ const mainMenuHomeSiblingRoutes: Routes = [ }), ], providers: [ - CoreDashboardHomeHandler, - CoreCoursesMyCoursesHomeHandler, + { + provide: APP_INITIALIZER, + multi: true, + deps: [], + useFactory: () => () => { + CoreMainMenuHomeDelegate.instance.registerHandler(CoreDashboardHomeHandler.instance); + CoreMainMenuHomeDelegate.instance.registerHandler(CoreCoursesMyCoursesHomeHandler.instance); + }, + }, ], }) -export class CoreCoursesModule { - - constructor( - homeDelegate: CoreMainMenuHomeDelegate, - coursesDashboardHandler: CoreDashboardHomeHandler, - coursesMyCoursesHandler: CoreCoursesMyCoursesHomeHandler, - ) { - homeDelegate.registerHandler(coursesDashboardHandler); - homeDelegate.registerHandler(coursesMyCoursesHandler); - } - -} +export class CoreCoursesModule {} diff --git a/src/core/features/courses/services/handlers/dashboard-home.ts b/src/core/features/courses/services/handlers/dashboard-home.ts index f98e53457..0f2ce7e4e 100644 --- a/src/core/features/courses/services/handlers/dashboard-home.ts +++ b/src/core/features/courses/services/handlers/dashboard-home.ts @@ -14,12 +14,13 @@ import { Injectable } from '@angular/core'; import { CoreMainMenuHomeHandler, CoreMainMenuHomeHandlerToDisplay } from '@features/mainmenu/services/home-delegate'; +import { makeSingleton } from '@singletons'; /** * Handler to add dashboard into home page. */ -Injectable(); -export class CoreDashboardHomeHandler implements CoreMainMenuHomeHandler { +@Injectable({ providedIn: 'root' }) +export class CoreDashboardHomeHandlerService implements CoreMainMenuHomeHandler { static readonly PAGE_NAME = 'dashboard'; @@ -55,7 +56,7 @@ export class CoreDashboardHomeHandler implements CoreMainMenuHomeHandler { getDisplayData(): CoreMainMenuHomeHandlerToDisplay { return { title: 'core.courses.mymoodle', - page: CoreDashboardHomeHandler.PAGE_NAME, + page: CoreDashboardHomeHandlerService.PAGE_NAME, class: 'core-courses-dashboard-handler', icon: 'fas-tachometer-alt', selectPriority: 1000, @@ -63,3 +64,5 @@ export class CoreDashboardHomeHandler implements CoreMainMenuHomeHandler { } } + +export class CoreDashboardHomeHandler extends makeSingleton(CoreDashboardHomeHandlerService) {} diff --git a/src/core/features/courses/services/handlers/my-courses.home.ts b/src/core/features/courses/services/handlers/my-courses.home.ts index 440bff94d..49477e125 100644 --- a/src/core/features/courses/services/handlers/my-courses.home.ts +++ b/src/core/features/courses/services/handlers/my-courses.home.ts @@ -14,12 +14,13 @@ import { Injectable } from '@angular/core'; import { CoreMainMenuHomeHandler, CoreMainMenuHomeHandlerToDisplay } from '@features/mainmenu/services/home-delegate'; +import { makeSingleton } from '@singletons'; /** * Handler to add my courses into home page. */ -Injectable(); -export class CoreCoursesMyCoursesHomeHandler implements CoreMainMenuHomeHandler { +@Injectable({ providedIn: 'root' }) +export class CoreCoursesMyCoursesHomeHandlerService implements CoreMainMenuHomeHandler { static readonly PAGE_NAME = 'courses'; @@ -55,7 +56,7 @@ export class CoreCoursesMyCoursesHomeHandler implements CoreMainMenuHomeHandler getDisplayData(): CoreMainMenuHomeHandlerToDisplay { return { title: 'core.courses.mycourses', - page: CoreCoursesMyCoursesHomeHandler.PAGE_NAME, + page: CoreCoursesMyCoursesHomeHandlerService.PAGE_NAME, class: 'core-courses-my-courses-handler', icon: 'fas-graduation-cap', selectPriority: 900, @@ -63,3 +64,5 @@ export class CoreCoursesMyCoursesHomeHandler implements CoreMainMenuHomeHandler } } + +export class CoreCoursesMyCoursesHomeHandler extends makeSingleton(CoreCoursesMyCoursesHomeHandlerService) {} diff --git a/src/core/features/fileuploader/fileuploader.module.ts b/src/core/features/fileuploader/fileuploader.module.ts index 819b0a747..24ff3c977 100644 --- a/src/core/features/fileuploader/fileuploader.module.ts +++ b/src/core/features/fileuploader/fileuploader.module.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { NgModule } from '@angular/core'; +import { APP_INITIALIZER, NgModule } from '@angular/core'; import { CoreFileUploaderDelegate } from './services/fileuploader-delegate'; import { CoreFileUploaderAlbumHandler } from './services/handlers/album'; @@ -26,28 +26,18 @@ import { CoreFileUploaderVideoHandler } from './services/handlers/video'; imports: [], declarations: [], providers: [ - CoreFileUploaderAlbumHandler, - CoreFileUploaderAudioHandler, - CoreFileUploaderCameraHandler, - CoreFileUploaderFileHandler, - CoreFileUploaderVideoHandler, + { + provide: APP_INITIALIZER, + multi: true, + deps: [], + useFactory: () => () => { + CoreFileUploaderDelegate.instance.registerHandler(CoreFileUploaderAlbumHandler.instance); + CoreFileUploaderDelegate.instance.registerHandler(CoreFileUploaderAudioHandler.instance); + CoreFileUploaderDelegate.instance.registerHandler(CoreFileUploaderCameraHandler.instance); + CoreFileUploaderDelegate.instance.registerHandler(CoreFileUploaderVideoHandler.instance); + CoreFileUploaderDelegate.instance.registerHandler(CoreFileUploaderFileHandler.instance); + }, + }, ], }) -export class CoreFileUploaderModule { - - constructor( - delegate: CoreFileUploaderDelegate, - albumHandler: CoreFileUploaderAlbumHandler, - audioHandler: CoreFileUploaderAudioHandler, - cameraHandler: CoreFileUploaderCameraHandler, - videoHandler: CoreFileUploaderVideoHandler, - fileHandler: CoreFileUploaderFileHandler, - ) { - delegate.registerHandler(albumHandler); - delegate.registerHandler(audioHandler); - delegate.registerHandler(cameraHandler); - delegate.registerHandler(videoHandler); - delegate.registerHandler(fileHandler); - } - -} +export class CoreFileUploaderModule {} diff --git a/src/core/features/fileuploader/services/fileuploader-delegate.ts b/src/core/features/fileuploader/services/fileuploader-delegate.ts index 8fbb9852d..ec00018ab 100644 --- a/src/core/features/fileuploader/services/fileuploader-delegate.ts +++ b/src/core/features/fileuploader/services/fileuploader-delegate.ts @@ -18,6 +18,7 @@ import { FileEntry } from '@ionic-native/file'; import { CoreDelegate, CoreDelegateHandler } from '@classes/delegate'; import { CoreEvents } from '@singletons/events'; import { CoreWSUploadFileResult } from '@services/ws'; +import { makeSingleton } from '@singletons'; /** * Interface that all handlers must implement. @@ -141,7 +142,7 @@ export interface CoreFileUploaderHandlerDataToReturn extends CoreFileUploaderHan @Injectable({ providedIn: 'root', }) -export class CoreFileUploaderDelegate extends CoreDelegate { +export class CoreFileUploaderDelegateService extends CoreDelegate { constructor() { super('CoreFileUploaderDelegate', true); @@ -196,3 +197,5 @@ export class CoreFileUploaderDelegate extends CoreDelegate; protected actionSheet?: HTMLIonActionSheetElement; - constructor(protected uploaderDelegate: CoreFileUploaderDelegate) { + constructor() { this.logger = CoreLogger.getInstance('CoreFileUploaderHelperProvider'); } @@ -351,7 +351,7 @@ export class CoreFileUploaderHelperProvider { this.filePickerClosed(); }, }]; - const handlers = this.uploaderDelegate.getHandlers(mimetypes); + const handlers = CoreFileUploaderDelegate.instance.getHandlers(mimetypes); this.filePickerDeferred = CoreUtils.instance.promiseDefer(); diff --git a/src/core/features/fileuploader/services/handlers/album.ts b/src/core/features/fileuploader/services/handlers/album.ts index 36b7e2ed4..e926580bf 100644 --- a/src/core/features/fileuploader/services/handlers/album.ts +++ b/src/core/features/fileuploader/services/handlers/album.ts @@ -16,14 +16,15 @@ import { Injectable } from '@angular/core'; import { CoreApp } from '@services/app'; import { CoreUtils } from '@services/utils/utils'; +import { makeSingleton } from '@singletons'; import { CoreFileUploaderHandler, CoreFileUploaderHandlerData, CoreFileUploaderHandlerResult } from '../fileuploader-delegate'; import { CoreFileUploaderHelper } from '../fileuploader-helper'; /** * Handler to upload files from the album. */ -@Injectable() -export class CoreFileUploaderAlbumHandler implements CoreFileUploaderHandler { +@Injectable({ providedIn: 'root' }) +export class CoreFileUploaderAlbumHandlerService implements CoreFileUploaderHandler { name = 'CoreFileUploaderAlbum'; priority = 2000; @@ -75,3 +76,5 @@ export class CoreFileUploaderAlbumHandler implements CoreFileUploaderHandler { } } + +export class CoreFileUploaderAlbumHandler extends makeSingleton(CoreFileUploaderAlbumHandlerService) {} diff --git a/src/core/features/fileuploader/services/handlers/audio.ts b/src/core/features/fileuploader/services/handlers/audio.ts index ef4ccfaa4..a57cb3b8d 100644 --- a/src/core/features/fileuploader/services/handlers/audio.ts +++ b/src/core/features/fileuploader/services/handlers/audio.ts @@ -16,13 +16,14 @@ import { Injectable } from '@angular/core'; import { CoreApp } from '@services/app'; import { CoreUtils } from '@services/utils/utils'; +import { makeSingleton } from '@singletons'; import { CoreFileUploaderHandler, CoreFileUploaderHandlerData, CoreFileUploaderHandlerResult } from '../fileuploader-delegate'; import { CoreFileUploaderHelper } from '../fileuploader-helper'; /** * Handler to record an audio to upload it. */ -@Injectable() -export class CoreFileUploaderAudioHandler implements CoreFileUploaderHandler { +@Injectable({ providedIn: 'root' }) +export class CoreFileUploaderAudioHandlerService implements CoreFileUploaderHandler { name = 'CoreFileUploaderAudio'; priority = 1600; @@ -90,3 +91,5 @@ export class CoreFileUploaderAudioHandler implements CoreFileUploaderHandler { } } + +export class CoreFileUploaderAudioHandler extends makeSingleton(CoreFileUploaderAudioHandlerService) {} \ No newline at end of file diff --git a/src/core/features/fileuploader/services/handlers/camera.ts b/src/core/features/fileuploader/services/handlers/camera.ts index 682b0cfeb..d1aa80036 100644 --- a/src/core/features/fileuploader/services/handlers/camera.ts +++ b/src/core/features/fileuploader/services/handlers/camera.ts @@ -16,14 +16,15 @@ import { Injectable } from '@angular/core'; import { CoreApp } from '@services/app'; import { CoreUtils } from '@services/utils/utils'; +import { makeSingleton } from '@singletons'; import { CoreFileUploaderHandler, CoreFileUploaderHandlerData, CoreFileUploaderHandlerResult } from '../fileuploader-delegate'; import { CoreFileUploaderHelper } from '../fileuploader-helper'; /** * Handler to take a picture to upload it. */ -@Injectable() -export class CoreFileUploaderCameraHandler implements CoreFileUploaderHandler { +@Injectable({ providedIn: 'root' }) +export class CoreFileUploaderCameraHandlerService implements CoreFileUploaderHandler { name = 'CoreFileUploaderCamera'; priority = 1800; @@ -75,3 +76,5 @@ export class CoreFileUploaderCameraHandler implements CoreFileUploaderHandler { } } + +export class CoreFileUploaderCameraHandler extends makeSingleton(CoreFileUploaderCameraHandlerService) {} diff --git a/src/core/features/fileuploader/services/handlers/file.ts b/src/core/features/fileuploader/services/handlers/file.ts index 995669b34..11e1caff0 100644 --- a/src/core/features/fileuploader/services/handlers/file.ts +++ b/src/core/features/fileuploader/services/handlers/file.ts @@ -19,13 +19,13 @@ import { CoreDomUtils } from '@services/utils/dom'; import { CoreFileUploaderHandler, CoreFileUploaderHandlerData, CoreFileUploaderHandlerResult } from '../fileuploader-delegate'; import { CoreFileUploaderHelper } from '../fileuploader-helper'; import { CoreFileUploader } from '../fileuploader'; -import { Translate } from '@singletons'; +import { makeSingleton, Translate } from '@singletons'; /** * Handler to upload any type of file. */ -@Injectable() -export class CoreFileUploaderFileHandler implements CoreFileUploaderHandler { +@Injectable({ providedIn: 'root' }) +export class CoreFileUploaderFileHandlerService implements CoreFileUploaderHandler { name = 'CoreFileUploaderFile'; priority = 1200; @@ -156,3 +156,5 @@ export class CoreFileUploaderFileHandler implements CoreFileUploaderHandler { } } + +export class CoreFileUploaderFileHandler extends makeSingleton(CoreFileUploaderFileHandlerService) {} diff --git a/src/core/features/fileuploader/services/handlers/video.ts b/src/core/features/fileuploader/services/handlers/video.ts index 71212b06a..9feb2c7b5 100644 --- a/src/core/features/fileuploader/services/handlers/video.ts +++ b/src/core/features/fileuploader/services/handlers/video.ts @@ -16,13 +16,14 @@ import { Injectable } from '@angular/core'; import { CoreApp } from '@services/app'; import { CoreUtils } from '@services/utils/utils'; +import { makeSingleton } from '@singletons'; import { CoreFileUploaderHandler, CoreFileUploaderHandlerData, CoreFileUploaderHandlerResult } from '../fileuploader-delegate'; import { CoreFileUploaderHelper } from '../fileuploader-helper'; /** * Handler to record a video to upload it. */ -@Injectable() -export class CoreFileUploaderVideoHandler implements CoreFileUploaderHandler { +@Injectable({ providedIn: 'root' }) +export class CoreFileUploaderVideoHandlerService implements CoreFileUploaderHandler { name = 'CoreFileUploaderVideo'; priority = 1400; @@ -90,3 +91,5 @@ export class CoreFileUploaderVideoHandler implements CoreFileUploaderHandler { } } + +export class CoreFileUploaderVideoHandler extends makeSingleton(CoreFileUploaderVideoHandlerService) {} diff --git a/src/core/features/mainmenu/mainmenu-lazy.module.ts b/src/core/features/mainmenu/mainmenu-lazy.module.ts index 7fb36e1c0..0ba61adb2 100644 --- a/src/core/features/mainmenu/mainmenu-lazy.module.ts +++ b/src/core/features/mainmenu/mainmenu-lazy.module.ts @@ -25,7 +25,7 @@ import { resolveModuleRoutes } from '@/app/app-routing.module'; import { MAIN_MENU_ROUTES } from './mainmenu-routing.module'; import { CoreMainMenuPage } from './pages/menu/menu'; -import { CoreMainMenuHomeHandler } from './services/handlers/mainmenu'; +import { CoreMainMenuHomeHandlerService } from './services/handlers/mainmenu'; function buildRoutes(injector: Injector): Routes { const routes = resolveModuleRoutes(injector, MAIN_MENU_ROUTES); @@ -38,10 +38,10 @@ function buildRoutes(injector: Injector): Routes { { path: '', pathMatch: 'full', - redirectTo: CoreMainMenuHomeHandler.PAGE_NAME, + redirectTo: CoreMainMenuHomeHandlerService.PAGE_NAME, }, { - path: CoreMainMenuHomeHandler.PAGE_NAME, + path: CoreMainMenuHomeHandlerService.PAGE_NAME, loadChildren: () => import('./pages/home/home.module').then(m => m.CoreMainMenuHomePageModule), }, { @@ -68,7 +68,6 @@ function buildRoutes(injector: Injector): Routes { CoreMainMenuPage, ], providers: [ - CoreMainMenuHomeHandler, { provide: ROUTES, multi: true, useFactory: buildRoutes, deps: [Injector] }, ], }) diff --git a/src/core/features/mainmenu/mainmenu.module.ts b/src/core/features/mainmenu/mainmenu.module.ts index 384ecdd2a..80842b4ed 100644 --- a/src/core/features/mainmenu/mainmenu.module.ts +++ b/src/core/features/mainmenu/mainmenu.module.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { NgModule } from '@angular/core'; +import { APP_INITIALIZER, NgModule } from '@angular/core'; import { Routes } from '@angular/router'; import { AuthGuard } from '@guards/auth'; @@ -37,14 +37,15 @@ const appRoutes: Routes = [ @NgModule({ imports: [AppRoutingModule.forChild(appRoutes)], + providers: [ + { + provide: APP_INITIALIZER, + multi: true, + deps: [], + useFactory: () => () => { + CoreMainMenuDelegate.instance.registerHandler(CoreMainMenuHomeHandler.instance); + }, + }, + ], }) -export class CoreMainMenuModule { - - constructor( - mainMenuDelegate: CoreMainMenuDelegate, - homeMainMenuHandler: CoreMainMenuHomeHandler, - ) { - mainMenuDelegate.registerHandler(homeMainMenuHandler); - } - -} +export class CoreMainMenuModule {} diff --git a/src/core/features/mainmenu/pages/home/home.ts b/src/core/features/mainmenu/pages/home/home.ts index 7d505d6dc..ab24ce8aa 100644 --- a/src/core/features/mainmenu/pages/home/home.ts +++ b/src/core/features/mainmenu/pages/home/home.ts @@ -40,15 +40,13 @@ export class CoreMainMenuHomePage implements OnInit { protected subscription?: Subscription; protected updateSiteObserver?: CoreEventObserver; - constructor(protected homeDelegate: CoreMainMenuHomeDelegate) {} - /** * Initialize the component. */ ngOnInit(): void { this.loadSiteName(); - this.subscription = this.homeDelegate.getHandlersObservable().subscribe((handlers) => { + this.subscription = CoreMainMenuHomeDelegate.instance.getHandlersObservable().subscribe((handlers) => { handlers && this.initHandlers(handlers); }); @@ -90,7 +88,7 @@ export class CoreMainMenuHomePage implements OnInit { this.tabs = newTabs; - this.loaded = this.homeDelegate.areHandlersLoaded(); + this.loaded = CoreMainMenuHomeDelegate.instance.areHandlersLoaded(); } /** diff --git a/src/core/features/mainmenu/pages/menu/menu.ts b/src/core/features/mainmenu/pages/menu/menu.ts index 4d921683d..5d58bd6d6 100644 --- a/src/core/features/mainmenu/pages/menu/menu.ts +++ b/src/core/features/mainmenu/pages/menu/menu.ts @@ -57,7 +57,6 @@ export class CoreMainMenuPage implements OnInit, OnDestroy { constructor( protected route: ActivatedRoute, protected navCtrl: NavController, - protected menuDelegate: CoreMainMenuDelegate, protected changeDetector: ChangeDetectorRef, protected router: Router, ) { @@ -98,7 +97,7 @@ export class CoreMainMenuPage implements OnInit, OnDestroy { } }); - this.subscription = this.menuDelegate.getHandlersObservable().subscribe((handlers) => { + this.subscription = CoreMainMenuDelegate.instance.getHandlersObservable().subscribe((handlers) => { // Remove the handlers that should only appear in the More menu. this.allHandlers = handlers.filter((handler) => !handler.onlyInMore); @@ -164,7 +163,7 @@ export class CoreMainMenuPage implements OnInit, OnDestroy { // Sort them by priority so new handlers are in the right position. this.tabs.sort((a, b) => (b.priority || 0) - (a.priority || 0)); - this.loaded = this.menuDelegate.areHandlersLoaded(); + this.loaded = CoreMainMenuDelegate.instance.areHandlersLoaded(); if (this.loaded && this.mainTabs && !this.mainTabs.getSelected()) { // Select the first tab. diff --git a/src/core/features/mainmenu/pages/more/more.ts b/src/core/features/mainmenu/pages/more/more.ts index 48b466d84..8db63b6ec 100644 --- a/src/core/features/mainmenu/pages/more/more.ts +++ b/src/core/features/mainmenu/pages/more/more.ts @@ -49,9 +49,7 @@ export class CoreMainMenuMorePage implements OnInit, OnDestroy { protected langObserver: CoreEventObserver; protected updateSiteObserver: CoreEventObserver; - constructor( - protected menuDelegate: CoreMainMenuDelegate, - ) { + constructor() { this.langObserver = CoreEvents.on(CoreEvents.LANGUAGE_CHANGED, this.loadSiteInfo.bind(this)); this.updateSiteObserver = CoreEvents.on( @@ -69,7 +67,7 @@ export class CoreMainMenuMorePage implements OnInit, OnDestroy { */ ngOnInit(): void { // Load the handlers. - this.subscription = this.menuDelegate.getHandlersObservable().subscribe((handlers) => { + this.subscription = CoreMainMenuDelegate.instance.getHandlersObservable().subscribe((handlers) => { this.allHandlers = handlers; this.initHandlers(); @@ -104,7 +102,7 @@ export class CoreMainMenuMorePage implements OnInit, OnDestroy { // Get only the handlers that don't appear in the main view. this.handlers = this.allHandlers.filter((handler) => mainHandlers.indexOf(handler) == -1); - this.handlersLoaded = this.menuDelegate.areHandlersLoaded(); + this.handlersLoaded = CoreMainMenuDelegate.instance.areHandlersLoaded(); } /** diff --git a/src/core/features/mainmenu/services/handlers/mainmenu.ts b/src/core/features/mainmenu/services/handlers/mainmenu.ts index 06c4a8046..a530dafa0 100644 --- a/src/core/features/mainmenu/services/handlers/mainmenu.ts +++ b/src/core/features/mainmenu/services/handlers/mainmenu.ts @@ -13,13 +13,14 @@ // limitations under the License. import { Injectable } from '@angular/core'; +import { makeSingleton } from '@singletons'; import { CoreMainMenuHandler, CoreMainMenuHandlerData } from '../mainmenu-delegate'; /** * Handler to add Home into main menu. */ @Injectable({ providedIn: 'root' }) -export class CoreMainMenuHomeHandler implements CoreMainMenuHandler { +export class CoreMainMenuHomeHandlerService implements CoreMainMenuHandler { static readonly PAGE_NAME = 'home'; @@ -56,10 +57,12 @@ export class CoreMainMenuHomeHandler implements CoreMainMenuHandler { return { icon: 'fa-home', title: 'core.mainmenu.home', - page: CoreMainMenuHomeHandler.PAGE_NAME, + page: CoreMainMenuHomeHandlerService.PAGE_NAME, // @todo: subPage? The page can change due to core-tabs. class: 'core-home-handler', }; } } + +export class CoreMainMenuHomeHandler extends makeSingleton(CoreMainMenuHomeHandlerService) {} diff --git a/src/core/features/mainmenu/services/home-delegate.ts b/src/core/features/mainmenu/services/home-delegate.ts index 67eca45e5..2f553f9b1 100644 --- a/src/core/features/mainmenu/services/home-delegate.ts +++ b/src/core/features/mainmenu/services/home-delegate.ts @@ -17,6 +17,7 @@ import { Params } from '@angular/router'; import { CoreDelegateDisplayHandler, CoreDelegateToDisplay } from '@classes/delegate'; import { CoreSortedDelegate } from '@classes/delegate-sorted'; +import { makeSingleton } from '@singletons'; /** * Interface that all home handlers must implement. @@ -85,7 +86,7 @@ export interface CoreMainMenuHomeHandlerToDisplay extends CoreDelegateToDisplay, @Injectable({ providedIn: 'root', }) -export class CoreMainMenuHomeDelegate extends CoreSortedDelegate { +export class CoreMainMenuHomeDelegateService extends CoreSortedDelegate { protected featurePrefix = 'CoreMainMenuHomeDelegate_'; @@ -94,3 +95,5 @@ export class CoreMainMenuHomeDelegate extends CoreSortedDelegate { +export class CoreMainMenuDelegateService extends CoreSortedDelegate { protected featurePrefix = 'CoreMainMenuDelegate_'; @@ -106,3 +107,5 @@ export class CoreMainMenuDelegate extends CoreSortedDelegate= 576 && window.innerHeight >= 576); } @@ -47,7 +47,7 @@ export class CoreMainMenuProvider { getCurrentMainMenuHandlers(): Promise { const deferred = CoreUtils.instance.promiseDefer(); - const subscription = this.menuDelegate.getHandlersObservable().subscribe((handlers) => { + const subscription = CoreMainMenuDelegate.instance.getHandlersObservable().subscribe((handlers) => { subscription?.unsubscribe(); // Remove the handlers that should only appear in the More menu. diff --git a/src/core/features/settings/pages/site/site.ts b/src/core/features/settings/pages/site/site.ts index bd8acb841..e3f1ad2bb 100644 --- a/src/core/features/settings/pages/site/site.ts +++ b/src/core/features/settings/pages/site/site.ts @@ -57,7 +57,6 @@ export class CoreSitePreferencesPage implements OnInit, OnDestroy { protected isDestroyed = false; constructor( - protected settingsDelegate: CoreSettingsDelegate, protected route: ActivatedRoute, protected router: Router, // Will be removed when splitview is implemented ) { @@ -97,7 +96,7 @@ export class CoreSitePreferencesPage implements OnInit, OnDestroy { * Fetch Data. */ protected async fetchData(): Promise { - this.handlers = this.settingsDelegate.getHandlers(); + this.handlers = CoreSettingsDelegate.instance.getHandlers(); const currentSite = CoreSites.instance.getCurrentSite(); this.siteInfo = currentSite!.getInfo(); diff --git a/src/core/features/settings/services/settings-delegate.ts b/src/core/features/settings/services/settings-delegate.ts index 68f3deec1..e9872e02c 100644 --- a/src/core/features/settings/services/settings-delegate.ts +++ b/src/core/features/settings/services/settings-delegate.ts @@ -17,6 +17,7 @@ import { Params } from '@angular/router'; import { CoreDelegateDisplayHandler, CoreDelegateToDisplay } from '@classes/delegate'; import { CoreSortedDelegate } from '@classes/delegate-sorted'; +import { makeSingleton } from '@singletons'; /** * Interface that all settings handlers must implement. @@ -65,10 +66,12 @@ export type CoreSettingsHandlerToDisplay = CoreDelegateToDisplay & CoreSettingsH @Injectable({ providedIn: 'root', }) -export class CoreSettingsDelegate extends CoreSortedDelegate { +export class CoreSettingsDelegateService extends CoreSortedDelegate { constructor() { super('CoreSettingsDelegate'); } } + +export class CoreSettingsDelegate extends makeSingleton(CoreSettingsDelegateService) {} diff --git a/src/core/features/settings/services/settings-helper.ts b/src/core/features/settings/services/settings-helper.ts index 43b04d2c3..cc462ba2c 100644 --- a/src/core/features/settings/services/settings-helper.ts +++ b/src/core/features/settings/services/settings-helper.ts @@ -14,7 +14,7 @@ import { Injectable } from '@angular/core'; import { CoreApp } from '@services/app'; -import { CoreCron } from '@services/cron'; +import { CoreCronDelegate } from '@services/cron'; import { CoreEvents } from '@singletons/events'; import { CoreFilepool } from '@services/filepool'; import { CoreSite } from '@classes/site'; @@ -277,7 +277,7 @@ export class CoreSettingsHelperProvider { } const site = await CoreSites.instance.getSite(siteId); - const hasSyncHandlers = CoreCron.instance.hasManualSyncHandlers(); + const hasSyncHandlers = CoreCronDelegate.instance.hasManualSyncHandlers(); if (site.isLoggedOut()) { // Cannot sync logged out sites. @@ -296,7 +296,7 @@ export class CoreSettingsHelperProvider { site.invalidateWsCache(), this.checkSiteLocalMobile(site), CoreSites.instance.updateSiteInfo(site.getId()), - CoreCron.instance.forceSyncExecution(site.getId()), + CoreCronDelegate.instance.forceSyncExecution(site.getId()), // eslint-disable-next-line arrow-body-style ]).then(() => { return; diff --git a/src/core/features/sitehome/services/handlers/index-link.ts b/src/core/features/sitehome/services/handlers/index-link.ts index c3dc6fcbc..7faa9d8ee 100644 --- a/src/core/features/sitehome/services/handlers/index-link.ts +++ b/src/core/features/sitehome/services/handlers/index-link.ts @@ -19,12 +19,13 @@ import { CoreContentLinksHandlerBase } from '@features/contentlinks/classes/base import { CoreContentLinksHelper } from '@features/contentlinks/services/contentlinks-helper'; import { CoreContentLinksAction } from '@features/contentlinks/services/contentlinks-delegate'; import { CoreSiteHome } from '../sitehome'; +import { makeSingleton } from '@singletons'; /** * Handler to treat links to site home index. */ -Injectable(); -export class CoreSiteHomeIndexLinkHandler extends CoreContentLinksHandlerBase { +@Injectable({ providedIn: 'root' }) +export class CoreSiteHomeIndexLinkHandlerService extends CoreContentLinksHandlerBase { name = 'CoreSiteHomeIndexLinkHandler'; featureName = 'CoreMainMenuDelegate_CoreSiteHome'; @@ -73,3 +74,5 @@ export class CoreSiteHomeIndexLinkHandler extends CoreContentLinksHandlerBase { } } + +export class CoreSiteHomeIndexLinkHandler extends makeSingleton(CoreSiteHomeIndexLinkHandlerService) {} diff --git a/src/core/features/sitehome/services/handlers/sitehome-home.ts b/src/core/features/sitehome/services/handlers/sitehome-home.ts index 491f1c498..96b64d941 100644 --- a/src/core/features/sitehome/services/handlers/sitehome-home.ts +++ b/src/core/features/sitehome/services/handlers/sitehome-home.ts @@ -16,12 +16,13 @@ import { Injectable } from '@angular/core'; import { CoreSites } from '@services/sites'; import { CoreMainMenuHomeHandler, CoreMainMenuHomeHandlerToDisplay } from '@features/mainmenu/services/home-delegate'; import { CoreSiteHome } from '../sitehome'; +import { makeSingleton } from '@singletons'; /** * Handler to add site home into home page. */ -Injectable(); -export class CoreSiteHomeHomeHandler implements CoreMainMenuHomeHandler { +@Injectable({ providedIn: 'root' }) +export class CoreSiteHomeHomeHandlerService implements CoreMainMenuHomeHandler { static readonly PAGE_NAME = 'site'; @@ -58,7 +59,7 @@ export class CoreSiteHomeHomeHandler implements CoreMainMenuHomeHandler { return { title: 'core.sitehome.sitehome', - page: CoreSiteHomeHomeHandler.PAGE_NAME, + page: CoreSiteHomeHomeHandlerService.PAGE_NAME, class: 'core-sitehome-dashboard-handler', icon: 'fas-home', selectPriority: displaySiteHome ? 1100 : 900, @@ -66,3 +67,5 @@ export class CoreSiteHomeHomeHandler implements CoreMainMenuHomeHandler { } } + +export class CoreSiteHomeHomeHandler extends makeSingleton(CoreSiteHomeHomeHandlerService) {} diff --git a/src/core/features/sitehome/sitehome.module.ts b/src/core/features/sitehome/sitehome.module.ts index dd611c476..b302ff2d8 100644 --- a/src/core/features/sitehome/sitehome.module.ts +++ b/src/core/features/sitehome/sitehome.module.ts @@ -12,18 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { NgModule } from '@angular/core'; +import { APP_INITIALIZER, NgModule } from '@angular/core'; import { Routes } from '@angular/router'; import { CoreSiteHomeIndexLinkHandler } from './services/handlers/index-link'; import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate'; -import { CoreSiteHomeHomeHandler } from './services/handlers/sitehome-home'; +import { CoreSiteHomeHomeHandler, CoreSiteHomeHomeHandlerService } from './services/handlers/sitehome-home'; import { CoreMainMenuHomeDelegate } from '@features/mainmenu/services/home-delegate'; import { CoreMainMenuHomeRoutingModule } from '@features/mainmenu/pages/home/home-routing.module'; const mainMenuHomeRoutes: Routes = [ { - path: CoreSiteHomeHomeHandler.PAGE_NAME, + path: CoreSiteHomeHomeHandlerService.PAGE_NAME, loadChildren: () => import('./pages/index/index.module').then(m => m.CoreSiteHomeIndexPageModule), }, ]; @@ -32,20 +32,15 @@ const mainMenuHomeRoutes: Routes = [ imports: [CoreMainMenuHomeRoutingModule.forChild({ children: mainMenuHomeRoutes })], exports: [CoreMainMenuHomeRoutingModule], providers: [ - CoreSiteHomeIndexLinkHandler, - CoreSiteHomeHomeHandler, + { + provide: APP_INITIALIZER, + multi: true, + deps: [], + useFactory: () => () => { + CoreContentLinksDelegate.instance.registerHandler(CoreSiteHomeIndexLinkHandler.instance); + CoreMainMenuHomeDelegate.instance.registerHandler(CoreSiteHomeHomeHandler.instance); + }, + }, ], }) -export class CoreSiteHomeModule { - - constructor( - contentLinksDelegate: CoreContentLinksDelegate, - homeDelegate: CoreMainMenuHomeDelegate, - siteHomeIndexLinkHandler: CoreSiteHomeIndexLinkHandler, - siteHomeDashboardHandler: CoreSiteHomeHomeHandler, - ) { - contentLinksDelegate.registerHandler(siteHomeIndexLinkHandler); - homeDelegate.registerHandler(siteHomeDashboardHandler); - } - -} +export class CoreSiteHomeModule {} diff --git a/src/core/initializers/initialize-databases.ts b/src/core/initializers/initialize-databases.ts index 462aeaeef..9772871af 100644 --- a/src/core/initializers/initialize-databases.ts +++ b/src/core/initializers/initialize-databases.ts @@ -14,7 +14,7 @@ import { CoreApp } from '@services/app'; import { CoreConfig } from '@services/config'; -import { CoreCron } from '@services/cron'; +import { CoreCronDelegate } from '@services/cron'; import { CoreFilepool } from '@services/filepool'; import { CoreLocalNotifications } from '@services/local-notifications'; import { CoreSites } from '@services/sites'; @@ -23,7 +23,7 @@ export default async function(): Promise { await Promise.all([ CoreApp.instance.initialiseDatabase(), CoreConfig.instance.initialiseDatabase(), - CoreCron.instance.initialiseDatabase(), + CoreCronDelegate.instance.initialiseDatabase(), CoreFilepool.instance.initialiseDatabase(), CoreLocalNotifications.instance.initialiseDatabase(), CoreSites.instance.initialiseDatabase(), diff --git a/src/core/initializers/prepare-automated-tests.ts b/src/core/initializers/prepare-automated-tests.ts index 68b3298f5..4440e96fa 100644 --- a/src/core/initializers/prepare-automated-tests.ts +++ b/src/core/initializers/prepare-automated-tests.ts @@ -14,19 +14,19 @@ import { ApplicationRef } from '@angular/core'; import { CoreApp, CoreAppProvider } from '@services/app'; -import { CoreCron, CoreCronDelegate } from '@services/cron'; +import { CoreCronDelegate, CoreCronDelegateService } from '@services/cron'; import { Application } from '@singletons'; type AutomatedTestsWindow = Window & { appRef?: ApplicationRef; appProvider?: CoreAppProvider; - cronProvider?: CoreCronDelegate; + cronProvider?: CoreCronDelegateService; }; function initializeAutomatedTestsWindow(window: AutomatedTestsWindow) { window.appRef = Application.instance; window.appProvider = CoreApp.instance; - window.cronProvider = CoreCron.instance; + window.cronProvider = CoreCronDelegate.instance; } export default function(): void { diff --git a/src/core/services/cron.ts b/src/core/services/cron.ts index bf799d90c..c30524cee 100644 --- a/src/core/services/cron.ts +++ b/src/core/services/cron.ts @@ -29,7 +29,7 @@ import { APP_SCHEMA, CRON_TABLE_NAME, CronDBEntry } from '@services/database/cro * Service to handle cron processes. The registered processes will be executed every certain time. */ @Injectable({ providedIn: 'root' }) -export class CoreCronDelegate { +export class CoreCronDelegateService { // Constants. static readonly DEFAULT_INTERVAL = 3600000; // Default interval is 1 hour. @@ -108,7 +108,7 @@ export class CoreCronDelegate { // Cannot execute in this network connection, retry soon. const message = `Cannot execute handler because device is using limited connection: ${name}`; this.logger.debug(message); - this.scheduleNextExecution(name, CoreCronDelegate.MIN_INTERVAL); + this.scheduleNextExecution(name, CoreCronDelegateService.MIN_INTERVAL); throw new CoreError(message); } @@ -130,7 +130,7 @@ export class CoreCronDelegate { // Handler call failed. Retry soon. const message = `Execution of handler '${name}' failed.`; this.logger.error(message, error); - this.scheduleNextExecution(name, CoreCronDelegate.MIN_INTERVAL); + this.scheduleNextExecution(name, CoreCronDelegateService.MIN_INTERVAL); throw new CoreError(message); } @@ -160,7 +160,7 @@ export class CoreCronDelegate { // The handler took too long. Resolve because we don't want to retry soon. this.logger.debug(`Resolving execution of handler '${name}' because it took too long.`); resolve(); - }, CoreCronDelegate.MAX_TIME_PROCESS); + }, CoreCronDelegateService.MAX_TIME_PROCESS); }); } @@ -215,15 +215,15 @@ export class CoreCronDelegate { protected getHandlerInterval(name: string): number { if (!this.handlers[name] || !this.handlers[name].getInterval) { // Invalid, return default. - return CoreCronDelegate.DEFAULT_INTERVAL; + return CoreCronDelegateService.DEFAULT_INTERVAL; } // Don't allow intervals lower than the minimum. - const minInterval = CoreCronDelegate.MIN_INTERVAL; + const minInterval = CoreCronDelegateService.MIN_INTERVAL; const handlerInterval = this.handlers[name].getInterval!(); if (!handlerInterval) { - return CoreCronDelegate.DEFAULT_INTERVAL; + return CoreCronDelegateService.DEFAULT_INTERVAL; } else { return Math.max(minInterval, handlerInterval); } @@ -476,7 +476,7 @@ export class CoreCronDelegate { } -export class CoreCron extends makeSingleton(CoreCronDelegate) {} +export class CoreCronDelegate extends makeSingleton(CoreCronDelegateService) {} /** @@ -499,7 +499,7 @@ export interface CoreCronHandler { timeout?: number; /** - * Returns handler's interval in milliseconds. Defaults to CoreCronDelegate.DEFAULT_INTERVAL. + * Returns handler's interval in milliseconds. Defaults to CoreCronDelegateService.DEFAULT_INTERVAL. * * @return Interval time (in milliseconds). */ diff --git a/src/core/services/filepool.ts b/src/core/services/filepool.ts index 092a3ed54..52b84b08a 100644 --- a/src/core/services/filepool.ts +++ b/src/core/services/filepool.ts @@ -18,7 +18,7 @@ import { Md5 } from 'ts-md5/dist/md5'; import { CoreApp } from '@services/app'; import { CoreEvents } from '@singletons/events'; import { CoreFile } from '@services/file'; -import { CorePluginFile } from '@services/plugin-file-delegate'; +import { CorePluginFileDelegate } from '@services/plugin-file-delegate'; import { CoreSites } from '@services/sites'; import { CoreWS, CoreWSExternalFile } from '@services/ws'; import { CoreDomUtils } from '@services/utils/dom'; @@ -697,7 +697,7 @@ export class CoreFilepoolProvider { const entry = await CoreWS.instance.downloadFile(fileUrl, path, addExtension, onProgress); const fileEntry = entry; - await CorePluginFile.instance.treatDownloadedFile(fileUrl, fileEntry, siteId, onProgress); + await CorePluginFileDelegate.instance.treatDownloadedFile(fileUrl, fileEntry, siteId, onProgress); await this.addFileToPool(siteId, fileId, { downloadTime: Date.now(), @@ -1062,7 +1062,7 @@ export class CoreFilepoolProvider { } // Now get other files from plugin file handlers. - urls = urls.concat(CorePluginFile.instance.getDownloadableFilesFromHTML(element)); + urls = urls.concat(CorePluginFileDelegate.instance.getDownloadableFilesFromHTML(element)); return urls; } @@ -1159,7 +1159,7 @@ export class CoreFilepoolProvider { * @return Promise resolved with the file data to use. */ protected async fixPluginfileURL(siteId: string, fileUrl: string, timemodified: number = 0): Promise { - const file = await CorePluginFile.instance.getDownloadableFile({ fileurl: fileUrl, timemodified }); + const file = await CorePluginFileDelegate.instance.getDownloadableFile({ fileurl: fileUrl, timemodified }); const site = await CoreSites.instance.getSite(siteId); file.fileurl = await site.checkAndFixPluginfileURL(file.fileurl); @@ -1918,7 +1918,7 @@ export class CoreFilepoolProvider { return 0; } - const revisionRegex = CorePluginFile.instance.getComponentRevisionRegExp(args); + const revisionRegex = CorePluginFileDelegate.instance.getComponentRevisionRegExp(args); if (!revisionRegex) { return 0; } @@ -2662,7 +2662,7 @@ export class CoreFilepoolProvider { this.notifyFileDeleted(siteId, fileId, links); if (fileUrl) { - await CoreUtils.instance.ignoreErrors(CorePluginFile.instance.fileDeleted(fileUrl, path, siteId)); + await CoreUtils.instance.ignoreErrors(CorePluginFileDelegate.instance.fileDeleted(fileUrl, path, siteId)); } } @@ -2710,7 +2710,7 @@ export class CoreFilepoolProvider { return url; } - return CorePluginFile.instance.removeRevisionFromUrl(url, args); + return CorePluginFileDelegate.instance.removeRevisionFromUrl(url, args); } /** diff --git a/src/core/services/handlers/site-info-cron.ts b/src/core/services/handlers/site-info-cron.ts index 85a86852e..1cb3063e3 100644 --- a/src/core/services/handlers/site-info-cron.ts +++ b/src/core/services/handlers/site-info-cron.ts @@ -42,7 +42,7 @@ export class CoreSiteInfoCronHandler implements CoreCronHandler { } /** - * Returns handler's interval in milliseconds. Defaults to CoreCronDelegate.DEFAULT_INTERVAL. + * Returns handler's interval in milliseconds. Defaults to CoreCronDelegateService.DEFAULT_INTERVAL. * * @return Interval time (in milliseconds). */ diff --git a/src/core/services/plugin-file-delegate.ts b/src/core/services/plugin-file-delegate.ts index f52904356..67c377e33 100644 --- a/src/core/services/plugin-file-delegate.ts +++ b/src/core/services/plugin-file-delegate.ts @@ -25,7 +25,7 @@ import { makeSingleton } from '@singletons'; * Delegate to register pluginfile information handlers. */ @Injectable({ providedIn: 'root' }) -export class CorePluginFileDelegate extends CoreDelegate { +export class CorePluginFileDelegateService extends CoreDelegate { protected handlerNameProperty = 'component'; @@ -288,7 +288,7 @@ export class CorePluginFileDelegate extends CoreDelegate } -export class CorePluginFile extends makeSingleton(CorePluginFileDelegate) {} +export class CorePluginFileDelegate extends makeSingleton(CorePluginFileDelegateService) {} /** * Interface that all plugin file handlers must implement.