@@ -15,6 +15,19 @@ def bool_int(value):
15
15
value = 0
16
16
return int (bool (value ))
17
17
18
+ class path (str ):
19
+ """Internal 'marker' type for paths in config."""
20
+
21
+ @staticmethod
22
+ def __call__ (val ):
23
+ return path (val )
24
+
25
+ def __new__ (cls , * args , ** kw ):
26
+ hstr = str .__new__ (cls , * args , ** kw )
27
+ return hstr
28
+
29
+ def __repr__ (self ):
30
+ return 'headphones.config.path(%s)' % self
18
31
19
32
_CONFIG_DEFINITIONS = {
20
33
'ADD_ALBUM_ART' : (int , 'General' , 0 ),
@@ -31,11 +44,11 @@ def bool_int(value):
31
44
'AUTO_ADD_ARTISTS' : (int , 'General' , 1 ),
32
45
'BITRATE' : (int , 'General' , 192 ),
33
46
'BLACKHOLE' : (int , 'General' , 0 ),
34
- 'BLACKHOLE_DIR' : (str , 'General' , '' ),
47
+ 'BLACKHOLE_DIR' : (path , 'General' , '' ),
35
48
'BOXCAR_ENABLED' : (int , 'Boxcar' , 0 ),
36
49
'BOXCAR_ONSNATCH' : (int , 'Boxcar' , 0 ),
37
50
'BOXCAR_TOKEN' : (str , 'Boxcar' , '' ),
38
- 'CACHE_DIR' : (str , 'General' , '' ),
51
+ 'CACHE_DIR' : (path , 'General' , '' ),
39
52
'CACHE_SIZEMB' : (int , 'Advanced' , 32 ),
40
53
'CHECK_GITHUB' : (int , 'General' , 1 ),
41
54
'CHECK_GITHUB_INTERVAL' : (int , 'General' , 360 ),
@@ -44,21 +57,21 @@ def bool_int(value):
44
57
'CONFIG_VERSION' : (str , 'General' , '0' ),
45
58
'CORRECT_METADATA' : (int , 'General' , 0 ),
46
59
'CUE_SPLIT' : (int , 'General' , 1 ),
47
- 'CUE_SPLIT_FLAC_PATH' : (str , 'General' , '' ),
48
- 'CUE_SPLIT_SHNTOOL_PATH' : (str , 'General' , '' ),
60
+ 'CUE_SPLIT_FLAC_PATH' : (path , 'General' , '' ),
61
+ 'CUE_SPLIT_SHNTOOL_PATH' : (path , 'General' , '' ),
49
62
'CUSTOMAUTH' : (int , 'General' , 0 ),
50
63
'CUSTOMHOST' : (str , 'General' , 'localhost' ),
51
64
'CUSTOMPASS' : (str , 'General' , '' ),
52
65
'CUSTOMPORT' : (int , 'General' , 5000 ),
53
66
'CUSTOMSLEEP' : (int , 'General' , 1 ),
54
67
'CUSTOMUSER' : (str , 'General' , '' ),
55
68
'DELETE_LOSSLESS_FILES' : (int , 'General' , 1 ),
56
- 'DESTINATION_DIR' : (str , 'General' , '' ),
69
+ 'DESTINATION_DIR' : (path , 'General' , '' ),
57
70
'DETECT_BITRATE' : (int , 'General' , 0 ),
58
71
'DO_NOT_PROCESS_UNMATCHED' : (int , 'General' , 0 ),
59
- 'DOWNLOAD_DIR' : (str , 'General' , '' ),
72
+ 'DOWNLOAD_DIR' : (path , 'General' , '' ),
60
73
'DOWNLOAD_SCAN_INTERVAL' : (int , 'General' , 5 ),
61
- 'DOWNLOAD_TORRENT_DIR' : (str , 'General' , '' ),
74
+ 'DOWNLOAD_TORRENT_DIR' : (path , 'General' , '' ),
62
75
'DO_NOT_OVERRIDE_GIT_BRANCH' : (int , 'General' , 0 ),
63
76
'EMAIL_ENABLED' : (int , 'Email' , 0 ),
64
77
'EMAIL_FROM' : (str , 'Email' , '' ),
@@ -74,14 +87,14 @@ def bool_int(value):
74
87
'EMBED_LYRICS' : (int , 'General' , 0 ),
75
88
'ENABLE_HTTPS' : (int , 'General' , 0 ),
76
89
'ENCODER' : (str , 'General' , 'ffmpeg' ),
77
- 'ENCODERFOLDER' : (str , 'General' , '' ),
90
+ 'ENCODERFOLDER' : (path , 'General' , '' ),
78
91
'ENCODERLOSSLESS' : (int , 'General' , 1 ),
79
92
'ENCODEROUTPUTFORMAT' : (str , 'General' , 'mp3' ),
80
93
'ENCODERQUALITY' : (int , 'General' , 2 ),
81
94
'ENCODERVBRCBR' : (str , 'General' , 'cbr' ),
82
95
'ENCODER_MULTICORE' : (int , 'General' , 0 ),
83
96
'ENCODER_MULTICORE_COUNT' : (int , 'General' , 0 ),
84
- 'ENCODER_PATH' : (str , 'General' , '' ),
97
+ 'ENCODER_PATH' : (path , 'General' , '' ),
85
98
'EXTRAS' : (str , 'General' , '' ),
86
99
'EXTRA_NEWZNABS' : (list , 'Newznab' , '' ),
87
100
'EXTRA_TORZNABS' : (list , 'Torznab' , '' ),
@@ -94,7 +107,7 @@ def bool_int(value):
94
107
'FOLDER_PERMISSIONS' : (str , 'General' , '0755' ),
95
108
'FREEZE_DB' : (int , 'General' , 0 ),
96
109
'GIT_BRANCH' : (str , 'General' , 'master' ),
97
- 'GIT_PATH' : (str , 'General' , '' ),
110
+ 'GIT_PATH' : (path , 'General' , '' ),
98
111
'GIT_USER' : (str , 'General' , 'rembo10' ),
99
112
'GROWL_ENABLED' : (int , 'Growl' , 0 ),
100
113
'GROWL_HOST' : (str , 'Growl' , '' ),
@@ -103,8 +116,8 @@ def bool_int(value):
103
116
'HEADPHONES_INDEXER' : (bool_int , 'General' , False ),
104
117
'HPPASS' : (str , 'General' , '' ),
105
118
'HPUSER' : (str , 'General' , '' ),
106
- 'HTTPS_CERT' : (str , 'General' , '' ),
107
- 'HTTPS_KEY' : (str , 'General' , '' ),
119
+ 'HTTPS_CERT' : (path , 'General' , '' ),
120
+ 'HTTPS_KEY' : (path , 'General' , '' ),
108
121
'HTTP_HOST' : (str , 'General' , 'localhost' ),
109
122
'HTTP_PASSWORD' : (str , 'General' , '' ),
110
123
'HTTP_PORT' : (int , 'General' , 8181 ),
@@ -114,8 +127,8 @@ def bool_int(value):
114
127
'IDTAG' : (int , 'Beets' , 0 ),
115
128
'IGNORE_CLEAN_RELEASES' : (int , 'General' , 0 ),
116
129
'IGNORED_WORDS' : (str , 'General' , '' ),
117
- 'IGNORED_FOLDERS' : (list , 'Advanced' , []),
118
- 'IGNORED_FILES' : (list , 'Advanced' , []),
130
+ 'IGNORED_FOLDERS' : (list , 'Advanced' , []), # path
131
+ 'IGNORED_FILES' : (list , 'Advanced' , []), # path
119
132
'INCLUDE_EXTRAS' : (int , 'General' , 0 ),
120
133
'INTERFACE' : (str , 'General' , 'default' ),
121
134
'JOURNAL_MODE' : (str , 'Advanced' , 'wal' ),
@@ -130,17 +143,17 @@ def bool_int(value):
130
143
'LIBRARYSCAN_INTERVAL' : (int , 'General' , 300 ),
131
144
'LMS_ENABLED' : (int , 'LMS' , 0 ),
132
145
'LMS_HOST' : (str , 'LMS' , '' ),
133
- 'LOG_DIR' : (str , 'General' , '' ),
146
+ 'LOG_DIR' : (path , 'General' , '' ),
134
147
'LOSSLESS_BITRATE_FROM' : (int , 'General' , 0 ),
135
148
'LOSSLESS_BITRATE_TO' : (int , 'General' , 0 ),
136
- 'LOSSLESS_DESTINATION_DIR' : (str , 'General' , '' ),
149
+ 'LOSSLESS_DESTINATION_DIR' : (path , 'General' , '' ),
137
150
'MB_IGNORE_AGE' : (int , 'General' , 365 ),
138
151
'MININOVA' : (int , 'Mininova' , 0 ),
139
152
'MININOVA_RATIO' : (str , 'Mininova' , '' ),
140
153
'MIRROR' : (str , 'General' , 'musicbrainz.org' ),
141
154
'MOVE_FILES' : (int , 'General' , 0 ),
142
155
'MPC_ENABLED' : (bool_int , 'MPC' , False ),
143
- 'MUSIC_DIR' : (str , 'General' , '' ),
156
+ 'MUSIC_DIR' : (path , 'General' , '' ),
144
157
'MUSIC_ENCODER' : (int , 'General' , 0 ),
145
158
'NEWZNAB' : (int , 'Newznab' , 0 ),
146
159
'NEWZNAB_APIKEY' : (str , 'Newznab' , '' ),
@@ -223,6 +236,7 @@ def bool_int(value):
223
236
'SAB_USERNAME' : (str , 'SABnzbd' , '' ),
224
237
'SAMPLINGFREQUENCY' : (int , 'General' , 44100 ),
225
238
'SEARCH_INTERVAL' : (int , 'General' , 1440 ),
239
+ 'SOFT_CHROOT' : (path , 'General' , '' ),
226
240
'SONGKICK_APIKEY' : (str , 'Songkick' , 'nd1We7dFW2RqxPw8' ),
227
241
'SONGKICK_ENABLED' : (int , 'Songkick' , 1 ),
228
242
'SONGKICK_FILTER_ENABLED' : (int , 'Songkick' , 0 ),
@@ -234,7 +248,7 @@ def bool_int(value):
234
248
'SUBSONIC_PASSWORD' : (str , 'Subsonic' , '' ),
235
249
'SUBSONIC_USERNAME' : (str , 'Subsonic' , '' ),
236
250
'SYNOINDEX_ENABLED' : (int , 'Synoindex' , 0 ),
237
- 'TORRENTBLACKHOLE_DIR' : (str , 'General' , '' ),
251
+ 'TORRENTBLACKHOLE_DIR' : (path , 'General' , '' ),
238
252
'TORRENT_DOWNLOADER' : (int , 'General' , 0 ),
239
253
'TORRENT_REMOVAL_INTERVAL' : (int , 'General' , 720 ),
240
254
'TORZNAB' : (int , 'Torznab' , 0 ),
@@ -295,7 +309,7 @@ def _define(self, name):
295
309
definition = _CONFIG_DEFINITIONS [key ]
296
310
if len (definition ) == 3 :
297
311
definition_type , section , default = definition
298
- else :
312
+ elif len ( definition ) == 4 :
299
313
definition_type , section , _ , default = definition
300
314
return key , definition_type , section , ini_key , default
301
315
0 commit comments