88 +/
99module reloadedvibes.app ;
1010
11- import std.algorithm : each;
11+ import std.algorithm : each, map ;
1212import std.datetime : dur;
1313import std.file : exists, isDir;
1414import std.getopt ;
15- import std.path : absolutePath;
15+ import std.path : absolutePath, buildNormalizedPath ;
1616import std.stdio : stdout, stderr;
1717
1818import vibe.core.core : runTask, sleep;
@@ -91,14 +91,18 @@ int main(string[] args)
9191 Watcher watcher;
9292 Socket webserver;
9393 HTTPListener[] listeners;
94+ void delegate ()[] doInit;
9495
9596 // -- Watcher
9697 if (optWatchDirectories.length == 0 )
9798 {
9899 stderr.writeln(" No directory to watch specified, use --watch to pass one" );
99100 return 1 ;
100101 }
101- watcher = new Watcher(optWatchDirectories);
102+
103+ auto watchDirectories = optWatchDirectories.map! (x => x.absolutePath.buildNormalizedPath());
104+
105+ watcher = new Watcher(watchDirectories);
102106
103107 // -- Service
104108 if (! optDisableService)
@@ -109,7 +113,7 @@ int main(string[] args)
109113 return 1 ;
110114 }
111115
112- listeners ~= registerService(service, watcher);
116+ doInit ~= { listeners ~= registerService(service, watcher); } ;
113117 }
114118 else
115119 {
@@ -123,17 +127,19 @@ int main(string[] args)
123127 // Initial execution
124128 // Since the action is usually some preprocessor or something,
125129 // it should also get executed on application launch
126- awcl.notify();
130+ doInit ~= { awcl.notify(); } ;
127131
128132 if (optDisableService)
129133 {
130- runTask(delegate () @trusted {
131- while (true )
132- {
133- awcl.query();
134- sleep(dur! " msecs" (500 ));
135- }
136- });
134+ doInit ~= {
135+ runTask(delegate () @trusted {
136+ while (true )
137+ {
138+ awcl.query();
139+ sleep(dur! " msecs" (500 ));
140+ }
141+ });
142+ };
137143 }
138144 }
139145
@@ -158,21 +164,27 @@ int main(string[] args)
158164 return 1 ;
159165 }
160166
167+ optDocumentRootWebServer = optDocumentRootWebServer.absolutePath.buildNormalizedPath();
168+
161169 if (optNoInjectWebServer)
162170 {
163- listeners ~= registerStaticWebserver(webserver, optDocumentRootWebServer);
171+ doInit ~= {
172+ listeners ~= registerStaticWebserver(webserver, optDocumentRootWebServer);
173+ };
164174 }
165175 else
166176 {
167- listeners ~= registerStaticWebserver(webserver, optDocumentRootWebServer, service);
177+ doInit ~= {
178+ listeners ~= registerStaticWebserver(webserver, optDocumentRootWebServer, service);
179+ };
168180 }
169181 }
170182
171183 // -- Print info
172184
173185 stdout.writeln(appName, " \n " );
174186
175- optWatchDirectories .each! (dir => stdout.writeln(" Watching: " , dir));
187+ watchDirectories .each! (dir => stdout.writeln(" Watching: " , dir));
176188
177189 if (! optDisableService)
178190 {
@@ -185,7 +197,7 @@ int main(string[] args)
185197 // dfmt off
186198 stdout.writeln();
187199 stdout.writeln(" Built-in webserver: http://" , webserver.toString);
188- stdout.writeln(" Serving: " , optDocumentRootWebServer.absolutePath );
200+ stdout.writeln(" Serving: " , optDocumentRootWebServer);
189201 stdout.writeln(" Script injection: " , ((optNoInjectWebServer) ? " disabled" : " enabled" ));
190202 // dfmt on
191203 }
@@ -196,6 +208,7 @@ int main(string[] args)
196208 stdout.writeln();
197209
198210 // -- Run
211+ doInit.each! (x => x());
199212 run(listeners);
200213 return 0 ;
201214}
0 commit comments