@@ -2,12 +2,14 @@ import { App, Plugin, PluginSettingTab, Setting } from 'obsidian';
2
2
3
3
interface CustomFileExtensionsSettings {
4
4
additionalFileTypes : string ;
5
- previousAdditionalFileTypes : string ;
5
+ previousAdditionalFileTypes : object ;
6
+ currentValueIsInvalidJson : boolean ;
6
7
}
7
8
8
9
const DEFAULT_SETTINGS : CustomFileExtensionsSettings = {
9
- additionalFileTypes : '{markdown: ["", "txt", "html", "js", "css", "ts", "yaml"]}' ,
10
- previousAdditionalFileTypes : '{markdown: ["", "txt", "html", "js", "css", "ts", "yaml"]}'
10
+ additionalFileTypes : '{"markdown": ["", "txt", "html", "js", "css", "ts", "yaml"]}' ,
11
+ previousAdditionalFileTypes : { markdown : [ "" , "txt" , "html" , "js" , "css" , "ts" , "yaml" ] } ,
12
+ currentValueIsInvalidJson : false
11
13
}
12
14
13
15
export default class CustomFileExtensions extends Plugin {
@@ -17,7 +19,6 @@ export default class CustomFileExtensions extends Plugin {
17
19
super . onload ( ) ;
18
20
await this . loadSettings ( ) ;
19
21
this . addSettingTab ( new CustomFileExtensionsSettingTab ( this . app , this ) ) ;
20
-
21
22
this . apply ( ) ;
22
23
}
23
24
@@ -31,24 +32,32 @@ export default class CustomFileExtensions extends Plugin {
31
32
32
33
async saveSettings ( ) {
33
34
await this . saveData ( this . settings ) ;
35
+ this . revert ( ) ;
34
36
this . apply ( ) ;
35
37
}
36
38
37
39
apply ( ) {
38
- this . revert ( ) ;
39
-
40
40
// apply new types:
41
41
const views = JSON . parse ( this . settings . additionalFileTypes ) ;
42
42
for ( const view in views ) {
43
- this . registerExtensions ( [ views [ view ] ] , view ) ;
43
+ for ( const fileType of views [ view ] ) {
44
+ this . registerExtensions ( [ fileType ] , view ) ;
45
+ }
44
46
}
45
47
}
46
48
47
49
revert ( ) {
48
- for ( const view in Object . values ( this . plugin . settings . additionalFileTypes ) . flat ( ) ) {
49
- this . registerExtensions ( view , "" ) ;
50
+ for ( const view of Object . values ( this . settings . previousAdditionalFileTypes ) . flat ( ) ) {
51
+ try {
52
+ this . app . viewRegistry . unregisterExtensions ( [ view ] ) ;
53
+ } catch {
54
+ console . log ( "ERROR" ) ;
55
+ }
50
56
}
51
- this . registerExtensions ( [ ".md" ] , 'markdown' ) ;
57
+
58
+ try {
59
+ this . registerExtensions ( [ ".md" ] , 'markdown' ) ;
60
+ } catch { }
52
61
}
53
62
}
54
63
@@ -72,11 +81,19 @@ class CustomFileExtensionsSettingTab extends PluginSettingTab {
72
81
. setDesc ( "Valid entry is a JSON object with properties named after the desired view, containing the file types to assign to that view. EX: " + DEFAULT_SETTINGS . additionalFileTypes )
73
82
. addText ( text => text
74
83
. setPlaceholder ( DEFAULT_SETTINGS . additionalFileTypes )
75
- . setValue ( this . plugin . settings . additionalFileTypes )
84
+ . setValue ( this . plugin . settings . additionalFileTypes )
76
85
. onChange ( async ( value ) => {
86
+ try {
87
+ JSON . parse ( value ) ;
88
+ this . plugin . settings . currentValueIsInvalidJson = false ;
89
+ } catch {
90
+ this . plugin . settings . currentValueIsInvalidJson = true ;
91
+ return ;
92
+ }
93
+
77
94
this . plugin . settings . previousAdditionalFileTypes = JSON . parse ( this . plugin . settings . additionalFileTypes ) ;
78
95
this . plugin . settings . additionalFileTypes = value ;
79
96
await this . plugin . saveSettings ( ) ;
80
- } ) ) ;
97
+ } ) ) ;
81
98
}
82
99
}
0 commit comments