Skip to content

Commit

Permalink
New recordings DB cache to deeply speed-up recordings list management
Browse files Browse the repository at this point in the history
  • Loading branch information
nicorac committed Aug 22, 2023
1 parent d485dd9 commit ea0979b
Show file tree
Hide file tree
Showing 8 changed files with 234 additions and 68 deletions.
14 changes: 10 additions & 4 deletions src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@ import { AboutPage } from './pages/about/about.page';
import { MainPage } from './pages/main/main.page';
import { SettingsPage } from './pages/settings/settings.page';
import { FilesizePipe } from './pipes/filesize.pipe';
import { RecordingsSortPipe } from './pipes/recordings-sort.pipe';
import { ToHmsPipe } from './pipes/to-hms.pipe';
import { RecordingsService } from './services/recordings.service';
import { SettingsService } from './services/settings.service';
import { RecordingsSortPipe } from './pipes/recordings-sort.pipe';

@NgModule({
declarations: [
Expand All @@ -37,7 +38,7 @@ import { RecordingsSortPipe } from './pipes/recordings-sort.pipe';
RouterModule,
],
providers: [
{ provide: APP_INITIALIZER, useFactory: appInitializer, deps: [ SettingsService ], multi: true },
{ provide: APP_INITIALIZER, useFactory: appInitializer, deps: [ RecordingsService, SettingsService ], multi: true },
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
{ provide: LOCALE_ID, useFactory: (settings: SettingsService) => settings.deviceCulture, deps: [ SettingsService ] },
],
Expand All @@ -50,10 +51,15 @@ export class AppModule {}
/**
* Load settings and set languages before app start
*/
function appInitializer(settings: SettingsService) {
function appInitializer(recordingsService: RecordingsService, settings: SettingsService) {
return async () => {

// initialize recordings service
await recordingsService.initialize();

// initialize settings
return await settings.initialize();
await settings.initialize();

}
}

11 changes: 7 additions & 4 deletions src/app/models/recording.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ export class Recording {
// Call direction
direction!: 'in' | 'out' | 'conference' | '';

// Recording date
date: Date = new Date();
// Recording date (JS timestamp)
date: number = 0;

// Recording duration (in seconds)
duration: number = 0;
Expand All @@ -40,6 +40,9 @@ export class Recording {
// Audio file MIME type
mimeType: string = '';

// record status
status?: 'new' | 'unchanged' | 'deleted' = 'new';

/**
* Use createInstance()...
*/
Expand All @@ -59,7 +62,7 @@ export class Recording {
// save Android file props
res.filesize = file.size;
res.mimeType = file.type;
res.date = new Date(file.lastModified);
res.date = file.lastModified;
res.opName = file.name;
res.opNumber = file.name;

Expand All @@ -85,7 +88,7 @@ export class Recording {
res.simSlot = metadata.sim_slot ?? 0;
res.duration = Math.ceil(metadata.output?.recording?.duration_secs_total ?? 0);
if (metadata.timestamp_unix_ms) {
res.date = new Date(metadata.timestamp_unix_ms);
res.date = metadata.timestamp_unix_ms;
}

// extract "other party" data
Expand Down
9 changes: 2 additions & 7 deletions src/app/pages/main/main.page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ import { MessageBoxService } from 'src/app/services/message-box.service';
import { RecordingsService } from 'src/app/services/recordings.service';
import { SettingsService } from 'src/app/services/settings.service';
import { bringIntoView } from 'src/app/utils/scroll';
import { Component, OnInit } from '@angular/core';
import { Component } from '@angular/core';
import version from '../../version';

@Component({
selector: 'app-main',
templateUrl: './main.page.html',
styleUrls: ['./main.page.scss'],
})
export class MainPage implements OnInit {
export class MainPage {

version = version;
selectedItem?: Recording;
Expand All @@ -23,10 +23,6 @@ export class MainPage implements OnInit {
protected settings: SettingsService,
) { }

ngOnInit(): void {
this.refreshList();
}

refreshList() {
this.recordingsService.refreshContent();
}
Expand Down Expand Up @@ -63,7 +59,6 @@ export class MainPage implements OnInit {
confirmText: 'Delete',
onConfirm: () => {
this.recordingsService.deleteRecording(item);
this.recordingsService.refreshContent();
}
});

Expand Down
7 changes: 6 additions & 1 deletion src/app/pages/settings/settings.page.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<ion-content id="main-content" class="ion-padding">

<ion-list class="config-items" lines="none">
<ion-list class="config-items" lines="full">

<ion-item-divider>
<h4>General</h4>
Expand All @@ -15,6 +15,11 @@ <h2>BCR recordings directory</h2>
</ion-label>
</ion-item>

<ion-item>
<ion-label>Cache</ion-label>
<ion-button [disabled]="recordingsService.refreshProgress | async" (click)="clearCache()">Clear</ion-button>
</ion-item>

<ion-item-divider>
<h4>Recordings</h4>
</ion-item-divider>
Expand Down
12 changes: 12 additions & 0 deletions src/app/pages/settings/settings.page.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { SortMode } from 'src/app/pipes/recordings-sort.pipe';
import { MessageBoxService } from 'src/app/services/message-box.service';
import { RecordingsService } from 'src/app/services/recordings.service';
import { Component } from '@angular/core';
import { SettingsService } from '../../services/settings.service';
Expand All @@ -13,6 +14,7 @@ export class SettingsPage {
SortMode = SortMode;

constructor(
private mbs: MessageBoxService,
protected settings: SettingsService,
protected recordingsService: RecordingsService,
) { }
Expand All @@ -25,4 +27,14 @@ export class SettingsPage {
this.recordingsService.selectRecordingsDirectory();
}

clearCache() {
this.mbs.showConfirm({
header: 'Clear cache',
message: 'Do you really want to clear the cache and reload all recordings?',
onConfirm: () => {
this.recordingsService.refreshContent(true);
}
});
}

}
4 changes: 2 additions & 2 deletions src/app/pipes/recordings-sort.pipe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,14 @@ export class RecordingsSortPipe implements PipeTransform {

switch (sortMode) {
// date
case SortMode.Date_ASC: return (a: Recording, b: Recording) => (a.date.getTime() - b.date.getTime());
case SortMode.Date_ASC: return (a: Recording, b: Recording) => (a.date - b.date);

// duration
case SortMode.Duration_ASC: return (a: Recording, b: Recording) => (a.duration - b.duration);
case SortMode.Duration_DESC: return (a: Recording, b: Recording) => (b.duration - a.duration);

// Date_DESC is the default mode
default: return (a: Recording, b: Recording) => (b.date.getTime() - a.date.getTime());
default: return (a: Recording, b: Recording) => (b.date - a.date);
}
}

Expand Down
Loading

0 comments on commit ea0979b

Please sign in to comment.