diff options
Diffstat (limited to 'src/main.odin')
| -rw-r--r-- | src/main.odin | 109 |
1 files changed, 82 insertions, 27 deletions
diff --git a/src/main.odin b/src/main.odin index 71ae6ed..37c17c1 100644 --- a/src/main.odin +++ b/src/main.odin @@ -6,6 +6,7 @@ import "core:os/os2" import "core:path/filepath" import "core:sys/windows" import "core:strings" +import "wav" /* TODO: Simplify pre-allocation. Just allocate a bunch. It's probably fine. @@ -20,6 +21,10 @@ PART_ONE :: #load("parts/start.html", string) PART_TWO :: #load("parts/start2.html", string) PART_END :: #load("parts/end.html", string) +HEADER_TEMPLATE :: #load("header_template.txt", string) +HEADER_FIELDS_PATH :: "info.txt" +header_fields_file : string + Device :: enum { UNSET, ZOOM, @@ -50,6 +55,12 @@ Report :: struct { tc_column_index : int, } +CSV :: string +Directory :: [dynamic]string +Job :: union {CSV, Directory} +job_list :: [dynamic]Job +// TODO: Changing file_list to job_list, so the Directory jobs can contain a list of all the relevant .wav files before being sent to parse_folder() + main :: proc() { when ODIN_OS == .Windows { windows.SetConsoleOutputCP(windows.CODEPAGE.UTF8) @@ -57,13 +68,20 @@ main :: proc() { input_file_name : string if len(os.args) < 2 { - fmt.println("ERROR: No file submitted.") + fmt.println("No paths submitted.") + if os.is_file(HEADER_FIELDS_PATH) { + fmt.printfln("\"%v\" already exists.", HEADER_FIELDS_PATH) + } else { + os.write_entire_file(HEADER_FIELDS_PATH, transmute([]u8)HEADER_TEMPLATE) + fmt.printfln("Created \"%v\".", HEADER_FIELDS_PATH) + } return - } else { - fmt.printf("Input path: {}\n", os.args[1]) - input_file_name = os.args[1] } + fmt.printf("Input path: {}\n", os.args[1]) + input_file_name = os.args[1] + + path_info, error := os.stat(input_file_name) @@ -71,22 +89,21 @@ main :: proc() { files_done := 0 if error == os.ERROR_NONE { - file_list : [dynamic]string if(path_info.is_dir) { fmt.printf("Directory submitted! Walking directory...\n\n") fmt.printf("š {}\n", path_info.name) - try_os2 := walk_directory(path_info.fullpath, &file_count, &file_list, 1) - if len(file_list) == 0 && try_os2 { + try_os2 := walk_directory(path_info.fullpath, &file_count, &job_list, 1) + if len(job_list) == 0 && try_os2 { fmt.printf("\nNot_Dir error encountered. Trying os2 version...\n\n") fmt.printf("š {}\n", path_info.name) - walk_directory_os2(path_info.fullpath, &file_count, &file_list, 1) + walk_directory_os2(path_info.fullpath, &file_count, &job_list, 1) } } else { fmt.println("File submitted! Processing file...") - append(&file_list, strings.clone(path_info.fullpath)) + append(&job_list, strings.clone(path_info.fullpath)) } - for file, f in file_list { + for file, f in job_list { file_info, _ := os.stat(file) fmt.printf("\nš File {}: {}\n", f+1, file_info.name) @@ -99,8 +116,9 @@ main :: proc() { render(parsed, output_name) free_all(context.temp_allocator) files_done += 1 + } - fmt.printf("\nCompleted {}/{} files.\n\n", files_done, len(file_list)) + fmt.printf("\nCompleted {}/{} files.\n\n", files_done, len(job_list)) } else { fmt.printf("ERROR could not get path info for: {}\n", input_file_name) } @@ -108,9 +126,19 @@ main :: proc() { } +parse :: proc(path : string, device : Device = .UNSET) -> (Report, bool) { + if os.is_dir(path) { + return parse_folder(path) + } + return parse_file(path, device) +} +parse_folder :: proc(path : string) -> (Report, bool) { + output : Report = {} + return output, false +} -parse :: proc(path : string, device : Device = .UNSET) -> (Report, bool) { +parse_file :: proc(path : string, device : Device = .UNSET) -> (Report, bool) { device := device output : Report = {} data, ok := os.read_entire_file(path, context.temp_allocator) @@ -346,8 +374,6 @@ parse :: proc(path : string, device : Device = .UNSET) -> (Report, bool) { } } - fmt.printf("\n") - @@ -666,16 +692,13 @@ render :: proc(report : Report, path : string) { fmt.printf("Output: {}\n", path) } - - - indent_by :: proc(i : int) { for x in 0..<i { fmt.printf(" ") } } -walk_directory :: proc(path : string, file_number : ^int, file_list : ^[dynamic]string, depth : int = 0) -> bool { +walk_directory :: proc(path : string, file_number : ^int, job_list : ^[dynamic]string, depth : int = 0) -> bool { handle, ok := os.open(path) if ok != os.ERROR_NONE { indent_by(depth) @@ -692,6 +715,8 @@ walk_directory :: proc(path : string, file_number : ^int, file_list : ^[dynamic] return true } + wav_count := 0 + has_csv := false for file in files { @@ -700,24 +725,38 @@ walk_directory :: proc(path : string, file_number : ^int, file_list : ^[dynamic] if file.is_dir { indent_by(depth) fmt.printf("š %s\n", file.name) - walk_directory(full_path, file_number, file_list, depth+1) // Recurse + walk_directory(full_path, file_number, job_list, depth+1) // Recurse } else { // If file is actually a file extension := strings.to_lower(filepath.ext(file.name)) defer delete(extension) - if(extension == ".csv"){ + if extension == ".csv" { indent_by(depth) - fmt.printf("š %d %s\n", file_number^, file.name) - append(file_list, strings.clone(file.fullpath)) + fmt.printf("š [#%d] %s\n", file_number^, file.name) + append(job_list, strings.clone(file.fullpath)) file_number^ += 1 + has_csv = true + } + if extension == ".wav" { + wav_count += 1 } } } + if wav_count>0 && !has_csv { + indent_by(depth+1) + if wav_count == 1 { + fmt.printf("š½ [#%d] 1 WAV file, without CSV.\n", file_number^) + } else { + fmt.printf("š½ [#%d] %d WAV files, without CSV.\n", file_number^, wav_count) + } + append(job_list, strings.clone(path)) + file_number^ += 1 + } return false } -walk_directory_os2 :: proc(path : string, file_number : ^int, file_list : ^[dynamic]string, depth : int = 0) { +walk_directory_os2 :: proc(path : string, file_number : ^int, job_list : ^[dynamic]string, depth : int = 0) { handle, ok := os2.open(path) if ok != os2.ERROR_NONE { indent_by(depth) @@ -733,6 +772,8 @@ walk_directory_os2 :: proc(path : string, file_number : ^int, file_list : ^[dyna return } + wav_count := 0 + has_csv := false for file in files { @@ -741,18 +782,32 @@ walk_directory_os2 :: proc(path : string, file_number : ^int, file_list : ^[dyna if os.is_dir(full_path) { indent_by(depth) fmt.printf("š %s\n", file.name) - walk_directory_os2(full_path, file_number, file_list, depth+1) // Recurse + walk_directory_os2(full_path, file_number, job_list, depth+1) // Recurse } else { // If file is actually a file extension := strings.to_lower(filepath.ext(file.name)) defer delete(extension) - if(extension == ".csv"){ + if extension == ".csv" { indent_by(depth) - fmt.printf("š %d %s\n", file_number^, file.name) - append(file_list, strings.clone(file.fullpath)) + fmt.printf("š [#%d] %s\n", file_number^, file.name) + append(job_list, strings.clone(file.fullpath)) file_number^ += 1 + has_csv = true + } + if extension == ".wav" { + wav_count += 1 } } } + if wav_count>0 && !has_csv { + indent_by(depth+1) + if wav_count == 1 { + fmt.printf("š½ [#%d] A WAV file, without CSV.\n", file_number^) + } else { + fmt.printf("š½ [#%d] %d WAV files, without CSV.\n", file_number^, wav_count) + } + append(job_list, strings.clone(path)) + file_number^ += 1 + } }
\ No newline at end of file |