mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-26 03:36:08 -05:00 
			
		
		
		
	settings and localization
This commit is contained in:
		| @@ -2,6 +2,48 @@ | ||||
| <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> | ||||
|   <file source-language="en-US" datatype="plaintext" original="ng2.template"> | ||||
|     <body> | ||||
|       <trans-unit id="9103526311244275943" datatype="html"> | ||||
|         <source>Document added</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/app.component.ts</context> | ||||
|           <context context-type="linenumber">51</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="9204248378636247318" datatype="html"> | ||||
|         <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/app.component.ts</context> | ||||
|           <context context-type="linenumber">51</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="1931214133925051574" datatype="html"> | ||||
|         <source>Open document</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/app.component.ts</context> | ||||
|           <context context-type="linenumber">51</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="8582620835547864448" datatype="html"> | ||||
|         <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/app.component.ts</context> | ||||
|           <context context-type="linenumber">59</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="1710712016675379662" datatype="html"> | ||||
|         <source>New document detected</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/app.component.ts</context> | ||||
|           <context context-type="linenumber">65</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="587031278561344416" datatype="html"> | ||||
|         <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/app.component.ts</context> | ||||
|           <context context-type="linenumber">65</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="4733307402565258070" datatype="html"> | ||||
|         <source>Documents</source> | ||||
|         <context-group purpose="location"> | ||||
| @@ -482,35 +524,35 @@ | ||||
|         <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> | ||||
|           <context context-type="linenumber">63</context> | ||||
|           <context context-type="linenumber">67</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="5647210819299459618" datatype="html"> | ||||
|         <source>Settings saved successfully.</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> | ||||
|           <context context-type="linenumber">79</context> | ||||
|           <context context-type="linenumber">87</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="6839066544204061364" datatype="html"> | ||||
|         <source>Use system language</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> | ||||
|           <context context-type="linenumber">83</context> | ||||
|           <context context-type="linenumber">91</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="7729897675462249787" datatype="html"> | ||||
|         <source>Use date format of display language</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> | ||||
|           <context context-type="linenumber">87</context> | ||||
|           <context context-type="linenumber">95</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="8488620293789898901" datatype="html"> | ||||
|         <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> | ||||
|           <context context-type="linenumber">103</context> | ||||
|           <context context-type="linenumber">111</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> | ||||
| @@ -531,7 +573,7 @@ | ||||
|         <source>Saved views</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> | ||||
|           <context context-type="linenumber">114</context> | ||||
|           <context context-type="linenumber">128</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> | ||||
| @@ -639,60 +681,109 @@ | ||||
|           <context context-type="linenumber">98</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> | ||||
|         <source>Notifications</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> | ||||
|           <context context-type="linenumber">102</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="69c5a98f8aa92e4db060f10dcd37781c8f40a48f" datatype="html"> | ||||
|         <source>Consumer status</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> | ||||
|           <context context-type="linenumber">106</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> | ||||
|         <source>Show notifications when new documents are detected</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> | ||||
|           <context context-type="linenumber">109</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="f2361d3f65b6c77ef0a15fad8af8e858b043ace3" datatype="html"> | ||||
|         <source>Show notifications when document consumption completes successfully</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> | ||||
|           <context context-type="linenumber">110</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="2bcbcbe99e207803e21183580b98d90410dd8718" datatype="html"> | ||||
|         <source>Show notifications when document consumption fails</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> | ||||
|           <context context-type="linenumber">111</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> | ||||
|         <source>Suppress notifications on dashboard</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> | ||||
|           <context context-type="linenumber">112</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="59fe5c9233a2aaab3079a2300e4dfa439ddb1890" datatype="html"> | ||||
|         <source>This will suppress all consumer related status messages on the dashboard.</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> | ||||
|           <context context-type="linenumber">112</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> | ||||
|         <source>Bulk editing</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> | ||||
|           <context context-type="linenumber">102</context> | ||||
|           <context context-type="linenumber">116</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> | ||||
|         <source>Show confirmation dialogs</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> | ||||
|           <context context-type="linenumber">106</context> | ||||
|           <context context-type="linenumber">120</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> | ||||
|         <source>Deleting documents will always ask for confirmation.</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> | ||||
|           <context context-type="linenumber">106</context> | ||||
|           <context context-type="linenumber">120</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> | ||||
|         <source>Apply on close</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> | ||||
|           <context context-type="linenumber">107</context> | ||||
|           <context context-type="linenumber">121</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> | ||||
|         <source>Appears on</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> | ||||
|           <context context-type="linenumber">126</context> | ||||
|           <context context-type="linenumber">140</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> | ||||
|         <source>Show on dashboard</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> | ||||
|           <context context-type="linenumber">129</context> | ||||
|           <context context-type="linenumber">143</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> | ||||
|         <source>Show in sidebar</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> | ||||
|           <context context-type="linenumber">133</context> | ||||
|           <context context-type="linenumber">147</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> | ||||
|         <source>No saved views defined.</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> | ||||
|           <context context-type="linenumber">143</context> | ||||
|           <context context-type="linenumber">157</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> | ||||
| @@ -1323,25 +1414,25 @@ | ||||
|           <context context-type="linenumber">4</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="8705589528094706681" datatype="html"> | ||||
|         <source>The document has been uploaded and will be processed by the consumer shortly.</source> | ||||
|       <trans-unit id="3852289441366561594" datatype="html"> | ||||
|         <source>Connecting...</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> | ||||
|           <context context-type="linenumber">63</context> | ||||
|           <context context-type="linenumber">90</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="4956689020592747108" datatype="html"> | ||||
|         <source>There was an error while uploading the document: <x id="PH" equiv-text="error.error.document"/></source> | ||||
|       <trans-unit id="1245343823699368872" datatype="html"> | ||||
|         <source>Uploading...</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> | ||||
|           <context context-type="linenumber">71</context> | ||||
|           <context context-type="linenumber">95</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="7554858521017940575" datatype="html"> | ||||
|         <source>An error has occurred while uploading the document. Sorry!</source> | ||||
|       <trans-unit id="3994065460580948013" datatype="html"> | ||||
|         <source>Waiting for consumer...</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> | ||||
|           <context context-type="linenumber">75</context> | ||||
|           <context context-type="linenumber">98</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> | ||||
| @@ -1351,25 +1442,32 @@ | ||||
|           <context context-type="linenumber">1</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> | ||||
|         <source>Dismiss completed</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> | ||||
|           <context context-type="linenumber">4</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> | ||||
|         <source>Drop documents here or</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> | ||||
|           <context context-type="linenumber">5</context> | ||||
|           <context context-type="linenumber">13</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> | ||||
|         <source>Browse files</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> | ||||
|           <context context-type="linenumber">5</context> | ||||
|           <context context-type="linenumber">13</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="33c76d75ce25ce3b05ab22877f1b6b09dcf603ae" datatype="html"> | ||||
|         <source>{VAR_PLURAL, plural, =1 {Uploading file...} =other {Uploading <x id="INTERPOLATION"/> files...}}</source> | ||||
|       <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> | ||||
|         <source>Open document</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> | ||||
|           <context context-type="linenumber">13</context> | ||||
|           <context context-type="linenumber">40</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> | ||||
| @@ -1467,42 +1565,42 @@ | ||||
|         <source>English (US)</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/services/settings.service.ts</context> | ||||
|           <context context-type="linenumber">74</context> | ||||
|           <context context-type="linenumber">82</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="1858110241312746425" datatype="html"> | ||||
|         <source>German</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/services/settings.service.ts</context> | ||||
|           <context context-type="linenumber">75</context> | ||||
|           <context context-type="linenumber">83</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="3071065188816255493" datatype="html"> | ||||
|         <source>Dutch</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/services/settings.service.ts</context> | ||||
|           <context context-type="linenumber">76</context> | ||||
|           <context context-type="linenumber">84</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="7633754075223722162" datatype="html"> | ||||
|         <source>French</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/services/settings.service.ts</context> | ||||
|           <context context-type="linenumber">77</context> | ||||
|           <context context-type="linenumber">85</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="1519954996184640001" datatype="html"> | ||||
|         <source>Error</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/services/toast.service.ts</context> | ||||
|           <context context-type="linenumber">31</context> | ||||
|           <context context-type="linenumber">35</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="5037437391296624618" datatype="html"> | ||||
|         <source>Information</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/services/toast.service.ts</context> | ||||
|           <context context-type="linenumber">35</context> | ||||
|           <context context-type="linenumber">39</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="7517688192215738656" datatype="html"> | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| import { SettingsService } from './services/settings.service'; | ||||
| import { SettingsService, SETTINGS_KEYS } from './services/settings.service'; | ||||
| import { Component, OnDestroy, OnInit } from '@angular/core'; | ||||
| import { Router } from '@angular/router'; | ||||
| import { Subscription } from 'rxjs'; | ||||
| import { ConsumerStatusService } from './services/consumer-status.service'; | ||||
| import { Toast, ToastService } from './services/toast.service'; | ||||
| import { ToastService } from './services/toast.service'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-root', | ||||
| @@ -12,6 +12,7 @@ import { Toast, ToastService } from './services/toast.service'; | ||||
| }) | ||||
| export class AppComponent implements OnInit, OnDestroy { | ||||
|  | ||||
|   newDocumentSubscription: Subscription; | ||||
|   successSubscription: Subscription; | ||||
|   failedSubscription: Subscription; | ||||
|  | ||||
| @@ -23,23 +24,47 @@ export class AppComponent implements OnInit, OnDestroy { | ||||
|  | ||||
|   ngOnDestroy(): void { | ||||
|     this.consumerStatusService.disconnect() | ||||
|     this.successSubscription.unsubscribe() | ||||
|     this.failedSubscription.unsubscribe() | ||||
|     if (this.successSubscription) { | ||||
|       this.successSubscription.unsubscribe() | ||||
|     } | ||||
|     if (this.failedSubscription) { | ||||
|       this.failedSubscription.unsubscribe() | ||||
|     } | ||||
|     if (this.newDocumentSubscription) { | ||||
|       this.newDocumentSubscription.unsubscribe() | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   private showNotification(key) { | ||||
|     if (this.router.url == '/dashboard' && this.settings.get(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUPPRESS_ON_DASHBOARD)) { | ||||
|       return false | ||||
|     } | ||||
|     return this.settings.get(key) | ||||
|   } | ||||
|  | ||||
|   ngOnInit(): void { | ||||
|     this.consumerStatusService.connect() | ||||
|  | ||||
|      | ||||
|     this.successSubscription = this.consumerStatusService.onDocumentConsumptionFinished().subscribe(status => { | ||||
|       this.toastService.show({title: "Document added", delay: 10000, content: `Document ${status.filename} was added to paperless.`, actionName: "Open document", action: () => { | ||||
|         this.router.navigate(['documents', status.documentId]) | ||||
|       }}) | ||||
|       if (this.showNotification(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUCCESS)) { | ||||
|         this.toastService.show({title: $localize`Document added`, delay: 10000, content: $localize`Document ${status.filename} was added to paperless.`, actionName: $localize`Open document`, action: () => { | ||||
|           this.router.navigate(['documents', status.documentId]) | ||||
|         }}) | ||||
|       } | ||||
|     }) | ||||
|  | ||||
|     this.failedSubscription = this.consumerStatusService.onDocumentConsumptionFailed().subscribe(status => { | ||||
|       this.toastService.showError(`Could not consume ${status.filename}: ${status.message}`) | ||||
|       if (this.showNotification(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_FAILED)) { | ||||
|         this.toastService.showError($localize`Could not add ${status.filename}\: ${status.message}`) | ||||
|       } | ||||
|     }) | ||||
|  | ||||
|     this.newDocumentSubscription = this.consumerStatusService.onDocumentDetected().subscribe(status => { | ||||
|       if (this.showNotification(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT)) { | ||||
|         this.toastService.show({title: $localize`New document detected`, delay: 5000, content: $localize`Document ${status.filename} is being processed by paperless.`}) | ||||
|       } | ||||
|     }) | ||||
|   } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| <app-widget-frame title="Upload new documents" i18n-title [class.has-multiple-status]="(getStatus().length + getStatusesHidden().length)> 1"> | ||||
|   <div header-buttons> | ||||
|     <button type="button" class="btn btn-link dismiss-all" [disabled]="!getStatus().length" (click)="dismissAll()"> | ||||
|       <small class="mr-1">Hide all</small> | ||||
|       <small class="mr-1" i18n>Dismiss completed</small> | ||||
|       <svg xmlns="http://www.w3.org/2000/svg" width="1rem" height="1rem" fill="currentColor" class="bi bi-check2-all" viewBox="0 0 16 16"> | ||||
|         <path d="M12.354 4.354a.5.5 0 0 0-.708-.708L5 10.293 1.854 7.146a.5.5 0 1 0-.708.708l3.5 3.5a.5.5 0 0 0 .708 0l7-7zm-4.208 7l-.896-.897.707-.707.543.543 6.646-6.647a.5.5 0 0 1 .708.708l-7 7a.5.5 0 0 1-.708 0z"/> | ||||
|         <path d="M5.354 7.146l.896.897-.707.707-.897-.896a.5.5 0 1 1 .708-.708z"/> | ||||
| @@ -37,7 +37,7 @@ | ||||
|     <ngb-progressbar [value]="status.getProgress()" [max]="1" [type]="getStatusColor(status)"></ngb-progressbar> | ||||
|     <div *ngIf="isFinished(status)"> | ||||
|       <button *ngIf="status.documentId" class="btn btn-sm btn-outline-primary btn-open" routerLink="/documents/{{status.documentId}}" (click)="dismiss(status)"> | ||||
|         <small>Open document</small> | ||||
|         <small i18n>Open document</small> | ||||
|         <svg xmlns="http://www.w3.org/2000/svg" width="1rem" height="1rem" fill="currentColor" class="bi bi-arrow-right-short" viewBox="0 0 16 16"> | ||||
|           <path fill-rule="evenodd" d="M4 8a.5.5 0 0 1 .5-.5h5.793L8.146 5.354a.5.5 0 1 1 .708-.708l3 3a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708-.708L10.293 8.5H4.5A.5.5 0 0 1 4 8z"/> | ||||
|         </svg> | ||||
|   | ||||
| @@ -99,6 +99,20 @@ | ||||
|           </div> | ||||
|         </div> | ||||
|  | ||||
|         <h4 class="mt-4" i18n>Notifications</h4> | ||||
|  | ||||
|         <div class="form-row form-group"> | ||||
|           <div class="col-md-3 col-form-label"> | ||||
|             <span i18n>Consumer status</span> | ||||
|           </div> | ||||
|           <div class="col"> | ||||
|             <app-input-check i18n-title title="Show notifications when new documents are detected" formControlName="notificationsConsumerNewDocument"></app-input-check> | ||||
|             <app-input-check i18n-title title="Show notifications when document consumption completes successfully" formControlName="notificationsConsumerSuccess"></app-input-check> | ||||
|             <app-input-check i18n-title title="Show notifications when document consumption fails" formControlName="notificationsConsumerFailed"></app-input-check> | ||||
|             <app-input-check i18n-title title="Suppress notifications on dashboard" formControlName="notificationsConsumerSuppressOnDashboard" i18n-hint hint="This will suppress all consumer related status messages on the dashboard."></app-input-check> | ||||
|           </div> | ||||
|         </div> | ||||
|  | ||||
|         <h4 class="mt-4" i18n>Bulk editing</h4> | ||||
|  | ||||
|         <div class="form-row form-group"> | ||||
|   | ||||
| @@ -26,6 +26,10 @@ export class SettingsComponent implements OnInit { | ||||
|     'displayLanguage': new FormControl(this.settings.getLanguage()), | ||||
|     'dateLocale': new FormControl(this.settings.get(SETTINGS_KEYS.DATE_LOCALE)), | ||||
|     'dateFormat': new FormControl(this.settings.get(SETTINGS_KEYS.DATE_FORMAT)), | ||||
|     'notificationsConsumerNewDocument': new FormControl(this.settings.get(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT)), | ||||
|     'notificationsConsumerSuccess': new FormControl(this.settings.get(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUCCESS)), | ||||
|     'notificationsConsumerFailed': new FormControl(this.settings.get(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_FAILED)), | ||||
|     'notificationsConsumerSuppressOnDashboard': new FormControl(this.settings.get(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUPPRESS_ON_DASHBOARD)), | ||||
|   }) | ||||
|  | ||||
|   savedViews: PaperlessSavedView[] | ||||
| @@ -73,6 +77,10 @@ export class SettingsComponent implements OnInit { | ||||
|     this.settings.set(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER, this.settingsForm.value.useNativePdfViewer) | ||||
|     this.settings.set(SETTINGS_KEYS.DATE_LOCALE, this.settingsForm.value.dateLocale) | ||||
|     this.settings.set(SETTINGS_KEYS.DATE_FORMAT, this.settingsForm.value.dateFormat) | ||||
|     this.settings.set(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT, this.settingsForm.value.notificationsConsumerNewDocument) | ||||
|     this.settings.set(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUCCESS, this.settingsForm.value.notificationsConsumerSuccess) | ||||
|     this.settings.set(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_FAILED, this.settingsForm.value.notificationsConsumerFailed) | ||||
|     this.settings.set(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUPPRESS_ON_DASHBOARD, this.settingsForm.value.notificationsConsumerSuppressOnDashboard) | ||||
|     this.settings.setLanguage(this.settingsForm.value.displayLanguage) | ||||
|     this.documentListViewService.updatePageSize() | ||||
|     this.settings.updateDarkModeSettings() | ||||
|   | ||||
| @@ -65,19 +65,21 @@ export class ConsumerStatusService { | ||||
|  | ||||
|   private consumerStatus: FileStatus[] = [] | ||||
|  | ||||
|  | ||||
|   private documentDetectedSubject = new Subject<FileStatus>() | ||||
|   private documentConsumptionFinishedSubject = new Subject<FileStatus>() | ||||
|   private documentConsumptionFailedSubject = new Subject<FileStatus>() | ||||
|  | ||||
|   private get(taskId: string, filename?: string) { | ||||
|     let status = this.consumerStatus.find(e => e.taskId == taskId) || this.consumerStatus.find(e => e.filename == filename && e.taskId == null) | ||||
|     let created = false | ||||
|     if (!status) { | ||||
|       status = new FileStatus() | ||||
|       this.consumerStatus.push(status) | ||||
|       created = true | ||||
|     } | ||||
|     status.taskId = taskId | ||||
|     status.filename = filename | ||||
|     return status | ||||
|     return {'status': status, 'created': created} | ||||
|   } | ||||
|  | ||||
|   newFileUpload(filename: string): FileStatus { | ||||
| @@ -101,11 +103,17 @@ export class ConsumerStatusService { | ||||
|     this.statusWebSocked.onmessage = (ev) => { | ||||
|       let statusMessage: WebsocketConsumerStatusMessage = JSON.parse(ev['data']) | ||||
|  | ||||
|       let status = this.get(statusMessage.task_id, statusMessage.filename) | ||||
|       let statusMessageGet = this.get(statusMessage.task_id, statusMessage.filename) | ||||
|       let status = statusMessageGet.status | ||||
|       let created = statusMessageGet.created | ||||
|  | ||||
|       status.updateProgress(FileStatusPhase.PROCESSING, statusMessage.current_progress, statusMessage.max_progress) | ||||
|       status.message = statusMessage.message | ||||
|       status.documentId = statusMessage.document_id | ||||
|  | ||||
|       if (created && statusMessage.status == 'STARTING') { | ||||
|         this.documentDetectedSubject.next(status) | ||||
|       } | ||||
|       if (statusMessage.status == "SUCCESS") { | ||||
|         status.phase = FileStatusPhase.SUCCESS | ||||
|         this.documentConsumptionFinishedSubject.next(status) | ||||
| @@ -150,4 +158,8 @@ export class ConsumerStatusService { | ||||
|     return this.documentConsumptionFailedSubject | ||||
|   } | ||||
|  | ||||
|   onDocumentDetected() { | ||||
|     return this.documentDetectedSubject | ||||
|   } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -23,7 +23,11 @@ export const SETTINGS_KEYS = { | ||||
|   DARK_MODE_ENABLED: 'general-settings:dark-mode:enabled', | ||||
|   USE_NATIVE_PDF_VIEWER: 'general-settings:document-details:native-pdf-viewer', | ||||
|   DATE_LOCALE: 'general-settings:date-display:date-locale', | ||||
|   DATE_FORMAT: 'general-settings:date-display:date-format' | ||||
|   DATE_FORMAT: 'general-settings:date-display:date-format', | ||||
|   NOTIFICATIONS_CONSUMER_NEW_DOCUMENT: 'general-settings:notifications:consumer-new-documents', | ||||
|   NOTIFICATIONS_CONSUMER_SUCCESS: 'general-settings:notifications:consumer-success', | ||||
|   NOTIFICATIONS_CONSUMER_FAILED: 'general-settings:notifications:consumer-failed', | ||||
|   NOTIFICATIONS_CONSUMER_SUPPRESS_ON_DASHBOARD: 'general-settings:notifications:consumer-suppress-on-dashboard', | ||||
| } | ||||
|  | ||||
| const SETTINGS: PaperlessSettings[] = [ | ||||
| @@ -34,7 +38,11 @@ const SETTINGS: PaperlessSettings[] = [ | ||||
|   {key: SETTINGS_KEYS.DARK_MODE_ENABLED, type: "boolean", default: false}, | ||||
|   {key: SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER, type: "boolean", default: false}, | ||||
|   {key: SETTINGS_KEYS.DATE_LOCALE, type: "string", default: ""}, | ||||
|   {key: SETTINGS_KEYS.DATE_FORMAT, type: "string", default: "mediumDate"} | ||||
|   {key: SETTINGS_KEYS.DATE_FORMAT, type: "string", default: "mediumDate"}, | ||||
|   {key: SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT, type: "boolean", default: true}, | ||||
|   {key: SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUCCESS, type: "boolean", default: true}, | ||||
|   {key: SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_FAILED, type: "boolean", default: true}, | ||||
|   {key: SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUPPRESS_ON_DASHBOARD, type: "boolean", default: true}, | ||||
| ] | ||||
|  | ||||
| @Injectable({ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 jonaswinkler
					jonaswinkler