update
This commit is contained in:
parent
12ce9744d1
commit
c2255bf1e0
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.idea/
|
||||||
|
.zig-cache/
|
||||||
|
todo-db.txt
|
6
Zig.iml
Normal file
6
Zig.iml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<orderEntry type="library" name="Zig SDK" level="project" />
|
||||||
|
</component>
|
||||||
|
</module>
|
@ -15,15 +15,24 @@ pub fn userInteraction(allocator: std.mem.Allocator, tasks: *std.ArrayList([]con
|
|||||||
failure += 1;
|
failure += 1;
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
try stdout.print("Please enter your choice [add/remove/edit/quit]: ", .{});
|
|
||||||
|
// todo make available commads be listed from enum itself
|
||||||
|
const Case = enum { add, edit, remove, move, quit };
|
||||||
|
|
||||||
|
var fields = std.ArrayList([]const u8).init(allocator);
|
||||||
|
defer fields.deinit();
|
||||||
|
|
||||||
|
inline for (@typeInfo(Case).Enum.fields) |f| {
|
||||||
|
fields.append(f.name);
|
||||||
|
}
|
||||||
|
try stdout.print("Please enter your choice [add/remove/edit/move/quit]: ", .{});
|
||||||
const input = getInput(allocator) catch |err| {
|
const input = getInput(allocator) catch |err| {
|
||||||
std.debug.print("Error acquiring input:\n{}\n", .{err});
|
std.debug.print("Error acquiring input:\n{}\n", .{err});
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
defer allocator.free(input);
|
defer allocator.free(input);
|
||||||
// todo add option to manipulate tasks via numbers (and add numbers to tasks)
|
|
||||||
|
|
||||||
const Case = enum { add, edit, remove, quit };
|
|
||||||
const case = std.meta.stringToEnum(Case, input) orelse continue;
|
const case = std.meta.stringToEnum(Case, input) orelse continue;
|
||||||
|
|
||||||
var task_name: []const u8 = undefined;
|
var task_name: []const u8 = undefined;
|
||||||
@ -70,11 +79,56 @@ pub fn userInteraction(allocator: std.mem.Allocator, tasks: *std.ArrayList([]con
|
|||||||
allocator.free(tasks.items[id]);
|
allocator.free(tasks.items[id]);
|
||||||
_ = tasks.orderedRemove(id);
|
_ = tasks.orderedRemove(id);
|
||||||
},
|
},
|
||||||
|
.move => {
|
||||||
|
try stdout.print("Please enter task name or number: ", .{});
|
||||||
|
_ = getTaskIndex(tasks, task_name) catch {
|
||||||
|
std.debug.print("Invalid task name...", .{});
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
|
||||||
|
const new_input = getInput(allocator) catch |err| {
|
||||||
|
std.debug.print("Failed to get new input:\n{}\n", .{err});
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
defer allocator.free(new_input);
|
||||||
|
|
||||||
|
_ = std.fmt.parseInt(usize, new_input, 10) catch |err| {
|
||||||
|
std.debug.print("Failed to convert the input into ID:\n{}\n", .{err});
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
|
||||||
|
// todo restructure arraylist
|
||||||
|
},
|
||||||
.quit => break,
|
.quit => break,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_fields_str(allocator: std.mem.Allocator, arr: std.ArrayList([]const u8)) ![]const u8 {
|
||||||
|
// get len
|
||||||
|
var len = 0;
|
||||||
|
for (arr.items) |value| {
|
||||||
|
len += value.len;
|
||||||
|
}
|
||||||
|
len += arr.capacity - 1;
|
||||||
|
|
||||||
|
// todo free mem
|
||||||
|
var result = try allocator.alloc(u8, len);
|
||||||
|
defer allocator.free(result);
|
||||||
|
|
||||||
|
var cur_len = 0;
|
||||||
|
for (arr.items) |value| {
|
||||||
|
@memcpy(result[0..], value);
|
||||||
|
cur_len += value.len;
|
||||||
|
|
||||||
|
if (value == arr.items[arr.capacity-1]) continue;
|
||||||
|
@memcpy(result[cur_len..], "/");
|
||||||
|
cur_len += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
fn getInput(allocator: std.mem.Allocator) ![]const u8 {
|
fn getInput(allocator: std.mem.Allocator) ![]const u8 {
|
||||||
const stdin = std.io.getStdIn().reader();
|
const stdin = std.io.getStdIn().reader();
|
||||||
const bare_line = try stdin.readUntilDelimiterAlloc(allocator, '\n', 8192);
|
const bare_line = try stdin.readUntilDelimiterAlloc(allocator, '\n', 8192);
|
||||||
@ -84,11 +138,19 @@ fn getInput(allocator: std.mem.Allocator) ![]const u8 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn getTaskIndex(tasks: *std.ArrayList([]const u8), task_name: []const u8) !usize {
|
fn getTaskIndex(tasks: *std.ArrayList([]const u8), task_name: []const u8) !usize {
|
||||||
for (tasks.items, 0..) |value, i| {
|
if (tasks.items.len == 0) return InteractionError.TaskNotFound;
|
||||||
if (std.mem.eql(u8, task_name, value)) {
|
const task_id = std.fmt.parseInt(usize, task_name, 10) catch {
|
||||||
return i;
|
for (tasks.items, 0..) |value, i| {
|
||||||
|
if (std.mem.eql(u8, task_name, value)) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
return InteractionError.TaskNotFound;
|
||||||
|
};
|
||||||
|
|
||||||
|
const act_val = task_id - 1;
|
||||||
|
if (act_val >= 0 and act_val < tasks.items.len) return act_val;
|
||||||
|
|
||||||
return InteractionError.TaskNotFound;
|
return InteractionError.TaskNotFound;
|
||||||
}
|
}
|
||||||
@ -100,8 +162,8 @@ fn printItems(tasks: *std.ArrayList([]const u8)) !void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try stdout.print("Items:\n------\n", .{});
|
try stdout.print("Items:\n------\n", .{});
|
||||||
for (tasks.items) |value| {
|
for (tasks.items, 1..) |value, i| {
|
||||||
try stdout.print("{s}\n", .{value});
|
try stdout.print("{d}. {s}\n", .{i, value});
|
||||||
}
|
}
|
||||||
try stdout.print("\n", .{});
|
try stdout.print("\n", .{});
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user