diff --git a/src/main.zig b/src/main.zig index 8b4b88a..c996acf 100644 --- a/src/main.zig +++ b/src/main.zig @@ -8,7 +8,7 @@ const Args = struct { syncthing_url: ?[]const u8 = null, }; -pub fn main() !void { +pub fn main() !u8 { var gpa = std.heap.GeneralPurposeAllocator(.{}).init; defer _ = gpa.deinit(); const allocator = gpa.allocator(); @@ -32,9 +32,19 @@ pub fn main() !void { const arena = arena_alloc.allocator(); var poller = try EventPoller.init(arena, config); - const events = poller.poll() catch |err| { - std.log.err("Error polling events: {s}", .{@errorName(err)}); - continue; + const events = poller.poll() catch |err| switch (err) { + error.Unauthorized => { + std.log.err("Not authorized to use syncthing. Please set ST_EVENTS_AUTH environment variable and try again", .{}); + return 2; + }, + error.MaxRetriesExceeded => { + std.log.err("Maximum retries exceeded - exiting", .{}); + return 1; + }, + else => { + std.log.err("Error polling events: {s}", .{@errorName(err)}); + continue; + }, }; for (events) |event| { @@ -46,6 +56,7 @@ pub fn main() !void { } } } + return 0; } fn parseArgs(allocator: std.mem.Allocator) !Args { diff --git a/src/root.zig b/src/root.zig index a0832c1..7c81bed 100644 --- a/src/root.zig +++ b/src/root.zig @@ -91,7 +91,7 @@ pub const EventPoller = struct { const aa = arena.allocator(); try client.initDefaultProxies(aa); - var retry_count: usize = self.config.max_retries; + var retry_count: usize = 0; while (retry_count < self.config.max_retries) : (retry_count += 1) { var url_buf: [1024]u8 = undefined; var since_buf: [100]u8 = undefined; @@ -118,6 +118,7 @@ pub const EventPoller = struct { return err; }; + if (response.status == .forbidden) return error.Unauthorized; if (response.status != .ok) { std.log.err("HTTP status code: {}", .{response.status}); if (retry_count + 1 < self.config.max_retries) {