From 8d02538b2d75ba75b9c5a7f9f278b534413acc05 Mon Sep 17 00:00:00 2001 From: Paul Friederichsen Date: Fri, 14 Oct 2022 07:31:25 -0500 Subject: [PATCH 1/3] Start adding mr bones --- src/app/about/about.component.html | 3 + src/app/about/about.component.ts | 9 ++- src/app/app.module.ts | 8 ++- src/app/hydrus-api.service.ts | 5 ++ src/app/hydrus-mr-bones.ts | 13 ++++ .../mr-bones-dialog.component.html | 19 ++++++ .../mr-bones-dialog.component.scss | 4 ++ .../mr-bones-dialog.component.spec.ts | 23 +++++++ .../mr-bones-dialog.component.ts | 61 ++++++++++++++++++ src/assets/boned.jpg | Bin 0 -> 52952 bytes 10 files changed, 142 insertions(+), 3 deletions(-) create mode 100644 src/app/hydrus-mr-bones.ts create mode 100644 src/app/mr-bones-dialog/mr-bones-dialog.component.html create mode 100644 src/app/mr-bones-dialog/mr-bones-dialog.component.scss create mode 100644 src/app/mr-bones-dialog/mr-bones-dialog.component.spec.ts create mode 100644 src/app/mr-bones-dialog/mr-bones-dialog.component.ts create mode 100644 src/assets/boned.jpg diff --git a/src/app/about/about.component.html b/src/app/about/about.component.html index 0ee02c0..ce1617f 100644 --- a/src/app/about/about.component.html +++ b/src/app/about/about.component.html @@ -17,6 +17,9 @@

About

Check for updates
+ +
How boned am I?
+
Debug
diff --git a/src/app/about/about.component.ts b/src/app/about/about.component.ts index cc956cb..b6febac 100644 --- a/src/app/about/about.component.ts +++ b/src/app/about/about.component.ts @@ -3,6 +3,8 @@ import { Component, OnInit } from '@angular/core'; import { SwUpdate } from '@angular/service-worker'; import { HydrusFilesService } from '../hydrus-files.service'; import { Platform } from '@angular/cdk/platform'; +import { MatDialog } from '@angular/material/dialog'; +import { MrBonesDialogComponent } from '../mr-bones-dialog/mr-bones-dialog.component'; @Component({ selector: 'app-about', @@ -14,7 +16,8 @@ export class AboutComponent implements OnInit { constructor( public updates: SwUpdate, public filesService: HydrusFilesService, - public platform: Platform) { } + public platform: Platform, + private dialog: MatDialog) { } public doc = document; @@ -34,4 +37,8 @@ export class AboutComponent implements OnInit { } } + boned() { + this.dialog.open(MrBonesDialogComponent); + } + } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index cb4285b..029ca7c 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -41,6 +41,7 @@ import {MatDatepickerModule} from '@angular/material/datepicker'; import {MatButtonToggleModule} from '@angular/material/button-toggle'; import {MatSelectModule} from '@angular/material/select'; import {MatTooltipModule} from '@angular/material/tooltip'; +import {MatTableModule} from '@angular/material/table'; import {PortalModule} from '@angular/cdk/portal'; import {ScrollingModule} from '@angular/cdk/scrolling'; @@ -68,6 +69,7 @@ import { TagNamespaceClassPipe } from './utils/tag-utils'; import { SystemPredicateDialogComponent } from './system-predicate-dialog/system-predicate-dialog.component'; import { MatNativeDateModule } from '@angular/material/core'; import { SortInputComponent } from './sort-input/sort-input.component'; +import { MrBonesDialogComponent } from './mr-bones-dialog/mr-bones-dialog.component'; const MAT_MODULES = [ @@ -96,7 +98,8 @@ const MAT_MODULES = [ MatDatepickerModule, MatButtonToggleModule, MatSelectModule, - MatTooltipModule + MatTooltipModule, + MatTableModule ]; @@ -119,7 +122,8 @@ const MAT_MODULES = [ TagInputDialogComponent, TagNamespaceClassPipe, SystemPredicateDialogComponent, - SortInputComponent + SortInputComponent, + MrBonesDialogComponent ], imports: [ BrowserModule, diff --git a/src/app/hydrus-api.service.ts b/src/app/hydrus-api.service.ts index f2b05cb..1f11f01 100644 --- a/src/app/hydrus-api.service.ts +++ b/src/app/hydrus-api.service.ts @@ -6,6 +6,7 @@ import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http'; import { HydrusSortType } from './hydrus-sort'; import { HydrusBasicFileFromAPI, HydrusFileFromAPI } from './hydrus-file'; import { HydrusSearchTags, TagDisplayType } from './hydrus-tags'; +import { HydrusBonedStats } from './hydrus-mr-bones'; export interface HydrusKeyVerificationData { basic_permissions: number[]; @@ -333,4 +334,8 @@ export class HydrusApiService { }) { return this.apiPost('add_files/unarchive_files', data); } + + public mrBones() { + return this.apiGet<{boned_stats: HydrusBonedStats}>('manage_database/mr_bones'); + } } diff --git a/src/app/hydrus-mr-bones.ts b/src/app/hydrus-mr-bones.ts new file mode 100644 index 0000000..8d42db9 --- /dev/null +++ b/src/app/hydrus-mr-bones.ts @@ -0,0 +1,13 @@ +export interface HydrusBonedStats { + num_inbox: number; + num_archive: number; + num_deleted: number; + size_inbox: number; + size_archive: number; + size_deleted: number; + earliest_import_time: number; + total_viewtime: number[]; + total_alternate_files: number; + total_duplicate_files: number; + total_potential_pairs: number; +} diff --git a/src/app/mr-bones-dialog/mr-bones-dialog.component.html b/src/app/mr-bones-dialog/mr-bones-dialog.component.html new file mode 100644 index 0000000..bc21760 --- /dev/null +++ b/src/app/mr-bones-dialog/mr-bones-dialog.component.html @@ -0,0 +1,19 @@ +

Review your fate

+
+
+
+
+ +
+ +

CONGRATULATIONS. YOU APPEAR TO BE UNBONED, BUT REMAIN EVER VIGILANT

+
+
+ +

You have yet to board the ride.

+
+
+ + + +
diff --git a/src/app/mr-bones-dialog/mr-bones-dialog.component.scss b/src/app/mr-bones-dialog/mr-bones-dialog.component.scss new file mode 100644 index 0000000..ca07209 --- /dev/null +++ b/src/app/mr-bones-dialog/mr-bones-dialog.component.scss @@ -0,0 +1,4 @@ +.mat-spinner { + margin-left: auto; + margin-right: auto; +} diff --git a/src/app/mr-bones-dialog/mr-bones-dialog.component.spec.ts b/src/app/mr-bones-dialog/mr-bones-dialog.component.spec.ts new file mode 100644 index 0000000..9e097b0 --- /dev/null +++ b/src/app/mr-bones-dialog/mr-bones-dialog.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MrBonesDialogComponent } from './mr-bones-dialog.component'; + +describe('MrBonesDialogComponent', () => { + let component: MrBonesDialogComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ MrBonesDialogComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(MrBonesDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/mr-bones-dialog/mr-bones-dialog.component.ts b/src/app/mr-bones-dialog/mr-bones-dialog.component.ts new file mode 100644 index 0000000..762a6bf --- /dev/null +++ b/src/app/mr-bones-dialog/mr-bones-dialog.component.ts @@ -0,0 +1,61 @@ +import { Component, OnInit } from '@angular/core'; +import { map, tap } from 'rxjs'; +import { HydrusApiService } from '../hydrus-api.service'; + +@Component({ + selector: 'app-mr-bones-dialog', + templateUrl: './mr-bones-dialog.component.html', + styleUrls: ['./mr-bones-dialog.component.scss'] +}) +export class MrBonesDialogComponent implements OnInit { + + constructor(private apiService: HydrusApiService) { } + + ngOnInit(): void { + } + + bones$ = this.apiService.mrBones().pipe( + map(bones => bones.boned_stats), + map(stats => { + const {num_inbox, num_archive, num_deleted, size_inbox, size_archive, size_deleted} = stats; + const num_total = num_archive + num_inbox; + if(num_total === 0) { + return { + stats: null + } + } + const size_total = size_archive + size_inbox; + const num_supertotal = num_total + num_deleted + const size_supertotal = size_total + size_deleted + const boned = num_inbox > num_archive / 100 + const supertotal_average_filesize = Math.floor(size_supertotal / num_supertotal) + + return { + stats: { + ...stats, + num_total, + size_total, + num_supertotal, + size_supertotal, + boned, + supertotal_average_filesize, + current_num_percent : num_total / num_supertotal, + current_size_percent : size_total / size_supertotal, + current_average_filesize : Math.floor(size_total / num_total), + inbox_num_percent : num_inbox / num_total, + inbox_size_percent : size_inbox / size_total, + inbox_average_filesize : num_inbox > 0 ? Math.floor(size_inbox / num_inbox) : 0, + archive_num_percent : num_archive / num_total, + archive_size_percent : size_archive / size_total, + archive_average_filesize : num_archive > 0 ? Math.floor(size_archive / num_archive) : 0, + deleted_num_percent : num_deleted / num_supertotal, + deleted_size_percent : size_deleted / size_supertotal, + deleted_average_filesize : num_deleted > 0 ? Math.floor(size_deleted / num_deleted) : 0 + } + } + + }), + tap(console.log) + ) + +} diff --git a/src/assets/boned.jpg b/src/assets/boned.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d3036dae0283e9758aae617ea9bb5e667aca535c GIT binary patch literal 52952 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%0AX4Bj%3-zk^GCOtm%>@hfqs-#qA5) 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 Date: Wed, 19 Oct 2022 14:33:12 -0500 Subject: [PATCH 2/3] Finish adding Mr Bones dialog --- package-lock.json | 25 +++++++ package.json | 2 + src/app/app.module.ts | 4 +- src/app/byte-size.pipe.spec.ts | 8 +++ src/app/byte-size.pipe.ts | 13 ++++ .../mr-bones-dialog.component.html | 43 +++++++++++- .../mr-bones-dialog.component.scss | 37 ++++++++++ .../mr-bones-dialog.component.ts | 69 +++++++++++++++---- 8 files changed, 186 insertions(+), 15 deletions(-) create mode 100644 src/app/byte-size.pipe.spec.ts create mode 100644 src/app/byte-size.pipe.ts diff --git a/package-lock.json b/package-lock.json index b30482f..6cc3c85 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,9 @@ "@material/image-list": "^3.1.0", "@ngneat/until-destroy": "^9.0.0", "@s-libs/ng-core": "^14.1.0", + "@types/byte-size": "^8.1.0", "array-flat-polyfill": "^1.0.1", + "byte-size": "^8.1.0", "file-saver": "^2.0.5", "git-rev-sync": "^3.0.1", "material-design-icons-iconfont": "^5.0.1", @@ -3757,6 +3759,11 @@ "@types/node": "*" } }, + "node_modules/@types/byte-size": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/byte-size/-/byte-size-8.1.0.tgz", + "integrity": "sha512-LCIlZh8vyx+I2fgRycE1D34c33QDppYY6quBYYoaOpQ1nGhJ/avSP2VlrAefVotjJxgSk6WkKo0rTcCJwGG7vA==" + }, "node_modules/@types/component-emitter": { "version": "1.2.11", "dev": true, @@ -5337,6 +5344,14 @@ "node": ">=10" } }, + "node_modules/byte-size": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-8.1.0.tgz", + "integrity": "sha512-FkgMTAg44I0JtEaUAvuZTtU2a2YDmBRbQxdsQNSMtLCjhG0hMcF5b1IMN9UjSCJaU4nvlj/GER7B9sI4nKdCgA==", + "engines": { + "node": ">=12.17" + } + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -18664,6 +18679,11 @@ "@types/node": "*" } }, + "@types/byte-size": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/byte-size/-/byte-size-8.1.0.tgz", + "integrity": "sha512-LCIlZh8vyx+I2fgRycE1D34c33QDppYY6quBYYoaOpQ1nGhJ/avSP2VlrAefVotjJxgSk6WkKo0rTcCJwGG7vA==" + }, "@types/component-emitter": { "version": "1.2.11", "dev": true @@ -19791,6 +19811,11 @@ } } }, + "byte-size": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-8.1.0.tgz", + "integrity": "sha512-FkgMTAg44I0JtEaUAvuZTtU2a2YDmBRbQxdsQNSMtLCjhG0hMcF5b1IMN9UjSCJaU4nvlj/GER7B9sI4nKdCgA==" + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", diff --git a/package.json b/package.json index 5c5baee..fba7df3 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,9 @@ "@material/image-list": "^3.1.0", "@ngneat/until-destroy": "^9.0.0", "@s-libs/ng-core": "^14.1.0", + "@types/byte-size": "^8.1.0", "array-flat-polyfill": "^1.0.1", + "byte-size": "^8.1.0", "file-saver": "^2.0.5", "git-rev-sync": "^3.0.1", "material-design-icons-iconfont": "^5.0.1", diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 029ca7c..55c7bc3 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -70,6 +70,7 @@ import { SystemPredicateDialogComponent } from './system-predicate-dialog/system import { MatNativeDateModule } from '@angular/material/core'; import { SortInputComponent } from './sort-input/sort-input.component'; import { MrBonesDialogComponent } from './mr-bones-dialog/mr-bones-dialog.component'; +import { ByteSizePipe } from './byte-size.pipe'; const MAT_MODULES = [ @@ -123,7 +124,8 @@ const MAT_MODULES = [ TagNamespaceClassPipe, SystemPredicateDialogComponent, SortInputComponent, - MrBonesDialogComponent + MrBonesDialogComponent, + ByteSizePipe ], imports: [ BrowserModule, diff --git a/src/app/byte-size.pipe.spec.ts b/src/app/byte-size.pipe.spec.ts new file mode 100644 index 0000000..876fb3c --- /dev/null +++ b/src/app/byte-size.pipe.spec.ts @@ -0,0 +1,8 @@ +import { ByteSizePipe } from './byte-size.pipe'; + +describe('ByteSizePipe', () => { + it('create an instance', () => { + const pipe = new ByteSizePipe(); + expect(pipe).toBeTruthy(); + }); +}); diff --git a/src/app/byte-size.pipe.ts b/src/app/byte-size.pipe.ts new file mode 100644 index 0000000..3eeceac --- /dev/null +++ b/src/app/byte-size.pipe.ts @@ -0,0 +1,13 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import byteSize, { ByteSizeOptions } from 'byte-size' + +@Pipe({ + name: 'byteSize' +}) +export class ByteSizePipe implements PipeTransform { + + transform(value: number, options: ByteSizeOptions = {}): unknown { + return byteSize(value, options); + } + +} diff --git a/src/app/mr-bones-dialog/mr-bones-dialog.component.html b/src/app/mr-bones-dialog/mr-bones-dialog.component.html index bc21760..53e24f9 100644 --- a/src/app/mr-bones-dialog/mr-bones-dialog.component.html +++ b/src/app/mr-bones-dialog/mr-bones-dialog.component.html @@ -3,11 +3,50 @@

Review your fate

- +
-

CONGRATULATIONS. YOU APPEAR TO BE UNBONED, BUT REMAIN EVER VIGILANT

+

CONGRATULATIONS. YOU APPEAR TO BE UNBONED, BUT REMAIN EVER VIGILANT

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{{element.label}}:Files{{element.num | number}}%{{element.numPercent | percent:'1.0-2'}}Size{{element.size | byteSize: {units: 'iec', precision: 2} }}%{{element.sizePercent | percent:'1.0-2'}}Average{{element.averageFilesize | byteSize: {units: 'iec', precision: 2} }}
+
+

Earliest file import: {{stats.earliestImport | date:'yyyy-MM-dd HH:mm:ss'}} ({{stats.earliestImport | timeAgo}})

You have yet to board the ride.

diff --git a/src/app/mr-bones-dialog/mr-bones-dialog.component.scss b/src/app/mr-bones-dialog/mr-bones-dialog.component.scss index ca07209..82253fb 100644 --- a/src/app/mr-bones-dialog/mr-bones-dialog.component.scss +++ b/src/app/mr-bones-dialog/mr-bones-dialog.component.scss @@ -2,3 +2,40 @@ margin-left: auto; margin-right: auto; } + +table { + width: 100%; +} + +.mat-column-num.mat-cell, +.mat-column-numPercent.mat-cell, +.mat-column-size.mat-cell, +.mat-column-sizePercent.mat-cell, +.mat-column-averageFilesize.mat-cell { + text-align: end; +} + +img { + max-width: 100%; + height: auto; + margin-left: auto; + margin-right: auto; + display: block; +} + +.mat-cell, .mat-header-cell { + padding-left: 8px; + padding-right: 8px; +} + +.mat-header-cell { + text-align: center; +} + +.table-container { + overflow-x: auto; +} + +.centered-text { + text-align: center; +} diff --git a/src/app/mr-bones-dialog/mr-bones-dialog.component.ts b/src/app/mr-bones-dialog/mr-bones-dialog.component.ts index 762a6bf..a025c00 100644 --- a/src/app/mr-bones-dialog/mr-bones-dialog.component.ts +++ b/src/app/mr-bones-dialog/mr-bones-dialog.component.ts @@ -2,6 +2,16 @@ import { Component, OnInit } from '@angular/core'; import { map, tap } from 'rxjs'; import { HydrusApiService } from '../hydrus-api.service'; +interface BonesTableElement { + label: string, + num: number, + numPercent: number, + size: number, + sizePercent: number, + averageFilesize: number, +} + + @Component({ selector: 'app-mr-bones-dialog', templateUrl: './mr-bones-dialog.component.html', @@ -14,6 +24,8 @@ export class MrBonesDialogComponent implements OnInit { ngOnInit(): void { } + displayedColumns: (keyof BonesTableElement)[] = ['label', 'num', 'numPercent', 'size', 'sizePercent', 'averageFilesize'] + bones$ = this.apiService.mrBones().pipe( map(bones => bones.boned_stats), map(stats => { @@ -30,6 +42,49 @@ export class MrBonesDialogComponent implements OnInit { const boned = num_inbox > num_archive / 100 const supertotal_average_filesize = Math.floor(size_supertotal / num_supertotal) + const table: BonesTableElement[] = [ + { + label: 'Total Ever Imported', + num: num_supertotal, + numPercent: null, + size: size_supertotal, + sizePercent: null, + averageFilesize: supertotal_average_filesize + }, + { + label: 'All My Files', + num: num_total, + numPercent: num_total / num_supertotal, + size: size_total, + sizePercent: size_total / size_supertotal, + averageFilesize: Math.floor(size_total / num_total) + }, + { + label: 'Inbox', + num: num_inbox, + numPercent: num_inbox / num_total, + size: size_inbox , + sizePercent: size_inbox / size_total, + averageFilesize: num_inbox > 0 ? Math.floor(size_inbox / num_inbox) : 0 + }, + { + label: 'Archive', + num: num_archive, + numPercent: num_archive / num_total, + size: size_archive , + sizePercent: size_archive / size_total, + averageFilesize: num_archive > 0 ? Math.floor(size_archive / num_archive) : 0 + }, + { + label: 'Trash', + num: num_deleted, + numPercent: num_deleted / num_supertotal, + size: size_deleted , + sizePercent: size_deleted / size_supertotal, + averageFilesize: num_deleted > 0 ? Math.floor(size_deleted / num_deleted) : 0 + } + ] + return { stats: { ...stats, @@ -39,18 +94,8 @@ export class MrBonesDialogComponent implements OnInit { size_supertotal, boned, supertotal_average_filesize, - current_num_percent : num_total / num_supertotal, - current_size_percent : size_total / size_supertotal, - current_average_filesize : Math.floor(size_total / num_total), - inbox_num_percent : num_inbox / num_total, - inbox_size_percent : size_inbox / size_total, - inbox_average_filesize : num_inbox > 0 ? Math.floor(size_inbox / num_inbox) : 0, - archive_num_percent : num_archive / num_total, - archive_size_percent : size_archive / size_total, - archive_average_filesize : num_archive > 0 ? Math.floor(size_archive / num_archive) : 0, - deleted_num_percent : num_deleted / num_supertotal, - deleted_size_percent : size_deleted / size_supertotal, - deleted_average_filesize : num_deleted > 0 ? Math.floor(size_deleted / num_deleted) : 0 + table, + earliestImport: new Date(stats.earliest_import_time * 1000) } } From 4c0badc11c147266f11be5174cf6fbf802cc8345 Mon Sep 17 00:00:00 2001 From: Paul Friederichsen Date: Wed, 19 Oct 2022 14:34:12 -0500 Subject: [PATCH 3/3] Switch to better bytes conversion pipe for file info sheet --- src/app/file-info-sheet/file-info-sheet.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/file-info-sheet/file-info-sheet.component.html b/src/app/file-info-sheet/file-info-sheet.component.html index b46cee3..d5666df 100644 --- a/src/app/file-info-sheet/file-info-sheet.component.html +++ b/src/app/file-info-sheet/file-info-sheet.component.html @@ -38,7 +38,7 @@

File Info

{{file.fileIcon}}
{{file.file_id}}
- +
{{file.is_trashed ? "delete" : file.is_inbox ? "inbox" : "archive"}}