diff options
| author | Julian Hurst <ark@mansus.space> | 2023-08-23 22:58:15 +0200 |
|---|---|---|
| committer | Julian Hurst <ark@mansus.space> | 2023-08-23 22:58:15 +0200 |
| commit | c93ad069288cdfffce1e7cc9fd42745f3020880a (patch) | |
| tree | c7b31097ef711370062a2c307f07177692e63732 | |
| parent | f0391bbbafeb21782bb07612cbd8906fb798f0d2 (diff) | |
| download | mediasync-c93ad069288cdfffce1e7cc9fd42745f3020880a.tar.gz | |
Store positions in a data subfolder and remove strconv
| -rw-r--r-- | sync.ha | 40 |
1 files changed, 16 insertions, 24 deletions
@@ -12,21 +12,28 @@ use unix::signal; use encoding::utf8; use strings; use regex; -use strconv; use fs; use os; use strings; +use path; type nofreefd = !void; type invalidquery = !str; type quit = void; -type saveposerr = !(fs::error | io::error); -type error = !(invalidquery | shlex::syntaxerr | utf8::invalid | strconv::overflow | strconv::invalid | saveposerr); +type saveposerr = !(fs::error | io::error | path::error); +type error = !(invalidquery | shlex::syntaxerr | utf8::invalid | saveposerr); + +const datafolder = "data"; fn savepos(filename: str, position: str) (void | saveposerr) = { - let f = os::open(filename, fs::flag::WRONLY, fs::flag::CREATE, fs::flag::TRUNC)?; + if (!os::exists(datafolder)) { + os::mkdir(datafolder, fs::mode::USER_RWX | fs::mode::GROUP_RX | fs::mode::OTHER_RX)?; + }; + let pbuf = path::init(datafolder, filename)?; + const name = path::string(&pbuf); + let f = os::open(name, fs::flag::WRONLY, fs::flag::CREATE, fs::flag::TRUNC)?; defer io::close(f)!; - os::chmod(filename, fs::mode::USER_RW | fs::mode::GROUP_R | fs::mode::OTHER_R)?; + os::chmod(name, fs::mode::USER_RW | fs::mode::GROUP_R | fs::mode::OTHER_R)?; fmt::fprint(f, position)?; }; @@ -43,28 +50,13 @@ fn handlequery(query: const []u8) (void | []u8 | quit | error) = { if (len(spl) != 3) { return "save takes 2 arguments (filename, position)": invalidquery; }; - //let re = regex::compile("[0-9]{2}:[0-9]{2}:[0-9]{2}")?; - //defer regex::finish(&re); - //const res = regex::replace(&re, spl[2], "")?; - //if (res != "") { - // return "save position format: hh:mm:ss": invalidquery; - //}; - //let re2 = regex::compile("[0-9]{2}")?; - //defer regex::finish(&re2); - //const result = regex::findall(&re2, spl[2]); - //if (len(result) != 3) { - // return "save position format: hh:mm:ss": invalidquery; - //}; - //if (strconv::stou(result[1][0].content)? >= 60 || strconv::stou(result[2][0].content)? >= 60) { - // return "save position format: hh:mm:ss (mm < 60 && ss < 60)": invalidquery; - //}; - //log::printfln("Saving {} with position {}", spl[1], spl[2]); savepos(spl[1], spl[2])?; case "get" => if (len(spl) != 2) { return "get takes 1 argument (filename)": invalidquery; }; - let f = os::open(spl[1])?; + let pbuf = path::init(datafolder, spl[1])?; + let f = os::open(path::string(&pbuf))?; let buf = io::drain(f)?; log::printfln("sending buf: {}", strings::fromutf8_unsafe(buf)); return buf; @@ -85,12 +77,12 @@ fn logerror(err: (void | error)) void = { log::println("Syntax error"); case utf8::invalid => log::println("Invalid utf8"); - case let e: strconv::error => - log::println(strconv::strerror(e)); case let e: fs::error => log::println(fs::strerror(e)); case let e: io::error => log::println(io::strerror(e)); + case let e: path::error => + log::println(path::strerror(e)); }; }; |
