fix playtwitch not respecting quality

This commit is contained in:
LordMZTE 2022-08-06 17:24:22 +02:00
parent 52ad6f2435
commit 638ab6d508
Signed by: LordMZTE
GPG key ID: B64802DC33A64FF6
2 changed files with 22 additions and 4 deletions

View file

@ -14,3 +14,7 @@ pub fn connectSignal(
const flags: *c.GConnectFlags = @ptrCast(*c.GConnectFlags, &zero);
_ = c.g_signal_connect_data(instance, detailed_signal, c_handler, data, null, flags.*);
}
pub fn getEntryBufferText(buf: *c.GtkEntryBuffer) []const u8 {
return c.gtk_entry_buffer_get_text(buf)[0..c.gtk_entry_buffer_get_length(buf)];
}

View file

@ -51,6 +51,7 @@ pub fn activate(app: *c.GtkApplication, state: *GuiState) void {
.buf = other_stream_buffer,
.win = @ptrCast(*c.GtkWindow, win),
.chatty_switch = @ptrCast(*c.GtkSwitch, chatty_switch),
.quality_buffer = quality_buffer,
};
ffi.connectSignal(
@ -83,6 +84,7 @@ pub fn activate(app: *c.GtkApplication, state: *GuiState) void {
.state = state,
.win = @ptrCast(*c.GtkWindow, win),
.chatty_switch = @ptrCast(*c.GtkSwitch, chatty_switch),
.quality_buffer = quality_buffer,
};
ffi.connectSignal(list, "row-activated", @ptrCast(c.GCallback, onRowActivate), act_data);
@ -126,6 +128,7 @@ const RowActivateData = struct {
state: *GuiState,
win: *c.GtkWindow,
chatty_switch: *c.GtkSwitch,
quality_buffer: *c.GtkEntryBuffer,
};
fn onRowActivate(list: *c.GtkListBox, row: *c.GtkListBoxRow, data: *RowActivateData) void {
@ -137,6 +140,7 @@ fn onRowActivate(list: *c.GtkListBox, row: *c.GtkListBoxRow, data: *RowActivateD
data.state,
if (c.gtk_switch_get_active(data.chatty_switch) == 0) false else true,
std.mem.sliceTo(channel_name, 0),
ffi.getEntryBufferText(data.quality_buffer),
) catch |err| std.log.err("Failed to start children: {}", .{err});
c.gtk_window_close(data.win);
@ -147,6 +151,7 @@ const OtherStreamActivateData = struct {
buf: *c.GtkEntryBuffer,
win: *c.GtkWindow,
chatty_switch: *c.GtkSwitch,
quality_buffer: *c.GtkEntryBuffer,
};
fn onOtherStreamActivate(entry: *c.GtkEntry, data: *OtherStreamActivateData) void {
@ -154,22 +159,31 @@ fn onOtherStreamActivate(entry: *c.GtkEntry, data: *OtherStreamActivateData) voi
start(
data.state,
if (c.gtk_switch_get_active(data.chatty_switch) == 0) false else true,
c.gtk_entry_buffer_get_text(data.buf)[0..c.gtk_entry_buffer_get_length(data.buf)],
ffi.getEntryBufferText(data.buf),
ffi.getEntryBufferText(data.quality_buffer),
) catch |err| std.log.err("Failed to start children: {}", .{err});
c.gtk_window_close(data.win);
}
fn start(state: *GuiState, chatty: bool, channel: []const u8) !void {
fn start(
state: *GuiState,
chatty: bool,
channel: []const u8,
quality: []const u8,
) !void {
if (channel.len == 0) {
std.log.warn("Exiting due to attempt to start empty channel", .{});
return;
}
std.log.info("Starting for channel {s} (chatty: {})", .{ channel, chatty });
std.log.info(
"Starting for channel {s} with quality {s} (chatty: {})",
.{ channel, quality, chatty },
);
const url = try std.fmt.allocPrint(state.alloc, "https://twitch.tv/{s}", .{channel});
defer state.alloc.free(url);
const streamlink_argv = [_][]const u8{ "streamlink", url };
const streamlink_argv = [_][]const u8{ "streamlink", url, quality };
var streamlink_child = std.ChildProcess.init(&streamlink_argv, state.alloc);
try streamlink_child.spawn();
state.streamlink_child = streamlink_child;