mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-09 01:16:15 -08:00
91 lines
3.2 KiB
TypeScript
91 lines
3.2 KiB
TypeScript
import { HttpClient, HttpClientModule } from '@angular/common/http';
|
|
import { NgModule } from '@angular/core';
|
|
import { BrowserModule } from '@angular/platform-browser';
|
|
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
|
import { ServiceWorkerModule } from '@angular/service-worker';
|
|
// NG Translate
|
|
import { EffectsModule } from '@ngrx/effects';
|
|
import { StoreModule } from '@ngrx/store';
|
|
import { StoreDevtoolsModule } from '@ngrx/store-devtools';
|
|
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
|
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
|
|
import { NgxIndexedDBModule, NgxIndexedDBService } from 'ngx-indexed-db';
|
|
import 'reflect-metadata';
|
|
import { AppConfig } from '../environments/environment';
|
|
import '../polyfills';
|
|
import { AppRoutingModule } from './app-routing.module';
|
|
import { AppComponent } from './app.component';
|
|
import { dbConfig } from './indexed-db.config';
|
|
import { DataService } from './services/data.service';
|
|
import { ElectronService } from './services/electron.service';
|
|
import { PwaService } from './services/pwa.service';
|
|
import { SharedModule } from './shared/shared.module';
|
|
import { PlaylistEffects } from './state/effects';
|
|
import { playlistReducer } from './state/reducers';
|
|
|
|
// AoT requires an exported function for factories
|
|
export function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {
|
|
return new TranslateHttpLoader(http, './assets/i18n/', '.json');
|
|
}
|
|
|
|
/**
|
|
* Returns true if the application runs in the electron based environment.
|
|
*/
|
|
function isElectron() {
|
|
return !!(window && window.process && (window.process as any).type);
|
|
}
|
|
|
|
/**
|
|
* Conditionally imports the necessary service based on the current environment
|
|
* @param dbService indexed db service
|
|
* @returns
|
|
*/
|
|
export function DataFactory(dbService: NgxIndexedDBService, http: HttpClient) {
|
|
if (isElectron()) {
|
|
return new ElectronService();
|
|
}
|
|
return new PwaService(dbService, http);
|
|
}
|
|
|
|
@NgModule({
|
|
declarations: [AppComponent],
|
|
imports: [
|
|
AppRoutingModule,
|
|
BrowserAnimationsModule,
|
|
BrowserModule,
|
|
HttpClientModule,
|
|
SharedModule,
|
|
AppConfig.environment === 'WEB'
|
|
? NgxIndexedDBModule.forRoot(dbConfig)
|
|
: [],
|
|
NgxIndexedDBModule.forRoot(dbConfig),
|
|
TranslateModule.forRoot({
|
|
loader: {
|
|
provide: TranslateLoader,
|
|
useFactory: HttpLoaderFactory,
|
|
deps: [HttpClient],
|
|
},
|
|
}),
|
|
ServiceWorkerModule.register('ngsw-worker.js', {
|
|
enabled: AppConfig.production && !isElectron(),
|
|
registrationStrategy: 'registerWhenStable:30000',
|
|
}),
|
|
StoreModule.forRoot({}),
|
|
StoreModule.forFeature('playlistState', playlistReducer),
|
|
EffectsModule.forRoot([PlaylistEffects]),
|
|
StoreDevtoolsModule.instrument({
|
|
maxAge: 25,
|
|
logOnly: AppConfig.production,
|
|
}),
|
|
],
|
|
providers: [
|
|
{
|
|
provide: DataService,
|
|
useFactory: DataFactory,
|
|
deps: [NgxIndexedDBService, HttpClient],
|
|
},
|
|
],
|
|
bootstrap: [AppComponent],
|
|
})
|
|
export class AppModule {}
|