1
0
mirror of https://github.com/xuthus83/pigallery2.git synced 2024-11-03 21:04:03 +08:00
pigallery2/frontend/app/settings/indexing/indexing.settings.component.ts

162 lines
4.6 KiB
TypeScript
Raw Normal View History

2018-05-04 06:23:48 +08:00
import {Component, OnDestroy, OnInit} from '@angular/core';
2018-03-31 03:30:30 +08:00
import {IndexingSettingsService} from './indexing.settings.service';
import {AuthenticationService} from '../../model/network/authentication.service';
import {NavigationService} from '../../model/navigation.service';
import {NotificationService} from '../../model/notification.service';
import {ErrorDTO} from '../../../../common/entities/Error';
2018-05-23 08:27:07 +08:00
import {Observable, interval} from 'rxjs';
2018-03-31 03:30:30 +08:00
import {IndexingConfig, ReIndexingSensitivity} from '../../../../common/config/private/IPrivateConfig';
import {SettingsComponent} from '../_abstract/abstract.settings.component';
import {Utils} from '../../../../common/Utils';
import {I18n} from '@ngx-translate/i18n-polyfill';
2017-07-26 03:09:37 +08:00
@Component({
2018-05-04 07:17:08 +08:00
selector: 'app-settings-indexing',
2017-07-26 03:09:37 +08:00
templateUrl: './indexing.settings.component.html',
styleUrls: ['./indexing.settings.component.css',
'./../_abstract/abstract.settings.component.css'],
providers: [IndexingSettingsService],
})
2018-05-04 06:23:48 +08:00
export class IndexingSettingsComponent extends SettingsComponent<IndexingConfig, IndexingSettingsService>
implements OnInit, OnDestroy {
2017-07-28 05:10:16 +08:00
2018-05-28 23:51:52 +08:00
types: { key: number; value: string }[] = [];
2017-07-28 05:10:16 +08:00
private subscription: { timer: any, settings: any } = {
timer: null,
settings: null
};
private $counter: Observable<number> = null;
2017-07-26 03:09:37 +08:00
updateProgress = async () => {
try {
2017-07-28 05:10:16 +08:00
await (<IndexingSettingsService>this._settingsService).getProgress();
2017-07-26 03:09:37 +08:00
} catch (err) {
if (this.subscription.timer != null) {
this.subscription.timer.unsubscribe();
this.subscription.timer = null;
}
}
2017-07-28 05:10:16 +08:00
if ((<IndexingSettingsService>this._settingsService).progress.value != null && this.subscription.timer == null) {
2017-07-26 03:09:37 +08:00
if (!this.$counter) {
2018-05-04 06:23:48 +08:00
this.$counter = interval(5000);
2017-07-26 03:09:37 +08:00
}
this.subscription.timer = this.$counter.subscribe((x) => this.updateProgress());
}
2017-07-28 05:10:16 +08:00
if ((<IndexingSettingsService>this._settingsService).progress.value == null && this.subscription.timer != null) {
2017-07-26 03:09:37 +08:00
this.subscription.timer.unsubscribe();
this.subscription.timer = null;
}
};
2017-07-28 05:10:16 +08:00
constructor(_authService: AuthenticationService,
_navigation: NavigationService,
_settingsService: IndexingSettingsService,
2018-03-30 08:30:23 +08:00
notification: NotificationService,
i18n: I18n) {
2017-07-28 05:10:16 +08:00
2018-05-04 06:23:48 +08:00
super(i18n('Indexing'),
_authService,
_navigation,
<any>_settingsService,
notification,
i18n,
s => s.Server.indexing);
2017-07-28 05:10:16 +08:00
2017-07-26 03:09:37 +08:00
}
async ngOnInit() {
2017-07-28 05:10:16 +08:00
super.ngOnInit();
this.types = Utils
.enumToArray(ReIndexingSensitivity);
2018-05-28 23:51:52 +08:00
this.types.forEach(v => {
switch (v.value) {
case 'low':
v.value = this.i18n('low');
break;
case 'medium':
v.value = this.i18n('medium');
break;
case 'high':
v.value = this.i18n('high');
break;
}
});
2017-07-26 03:09:37 +08:00
this.updateProgress();
}
ngOnDestroy() {
2017-07-28 05:10:16 +08:00
super.ngOnDestroy();
2017-07-26 03:09:37 +08:00
if (this.subscription.timer != null) {
this.subscription.timer.unsubscribe();
this.subscription.timer = null;
}
if (this.subscription.settings != null) {
this.subscription.settings.unsubscribe();
this.subscription.settings = null;
}
}
2018-11-24 20:08:34 +08:00
async index(createThumbnails: boolean) {
2017-07-26 03:09:37 +08:00
this.inProgress = true;
2018-03-31 03:30:30 +08:00
this.error = '';
2017-07-26 03:09:37 +08:00
try {
2018-11-24 20:08:34 +08:00
await this._settingsService.index(createThumbnails);
2017-07-26 03:09:37 +08:00
this.updateProgress();
2018-03-31 03:30:30 +08:00
this.notification.success(this.i18n('Folder indexed'), this.i18n('Success'));
2017-07-26 03:09:37 +08:00
this.inProgress = false;
return true;
} catch (err) {
console.log(err);
if (err.message) {
this.error = (<ErrorDTO>err).message;
}
}
this.inProgress = false;
return false;
}
2017-07-28 05:10:16 +08:00
async cancelIndexing() {
2017-07-26 03:09:37 +08:00
this.inProgress = true;
2018-03-31 03:30:30 +08:00
this.error = '';
2017-07-26 03:09:37 +08:00
try {
2017-07-28 05:10:16 +08:00
await (<IndexingSettingsService>this._settingsService).cancel();
2018-03-31 03:30:30 +08:00
this.notification.success(this.i18n('Folder indexed'), this.i18n('Success'));
2017-07-26 03:09:37 +08:00
this.inProgress = false;
return true;
} catch (err) {
console.log(err);
if (err.message) {
this.error = (<ErrorDTO>err).message;
}
}
this.inProgress = false;
return false;
}
2017-07-28 05:10:16 +08:00
async resetDatabase() {
2017-07-26 03:09:37 +08:00
this.inProgress = true;
2018-03-31 03:30:30 +08:00
this.error = '';
2017-07-26 03:09:37 +08:00
try {
2017-07-28 05:10:16 +08:00
await (<IndexingSettingsService>this._settingsService).reset();
2018-03-31 03:30:30 +08:00
this.notification.success(this.i18n('Database reset'), this.i18n('Success'));
2017-07-26 03:09:37 +08:00
this.inProgress = false;
return true;
} catch (err) {
console.log(err);
if (err.message) {
this.error = (<ErrorDTO>err).message;
}
}
this.inProgress = false;
return false;
}
}