seamus

commit 585d9595348858a2c766889816921cbd2c38742f

Author: Pedro Lucas Porcellis <porcellis@eletrotupi.com>

all: lint, rename variables, match libmpdclient return types and add some logs

 include/queue.h | 1 
 include/seamus.h | 16 +-
 include/status.h | 1 
 include/ui.h | 7 
 src/queue.c | 25 ++--
 src/seamus.c | 34 +++---
 src/status.c | 58 ++++++-----
 src/ui.c | 250 ++++++++++++++++++++++++-------------------------


diff --git a/include/queue.h b/include/queue.h
index d242c81e8f1c0bd6f88512e90430fe52f357e5cb..87b8b627540ef4ed1a98bbba9fd2486a7ad56860 100644
--- a/include/queue.h
+++ b/include/queue.h
@@ -3,6 +3,5 @@ #define SEAMUS_QUEUE
 #include "seamus.h"
 
 int fetch_current_queue(struct seamus_frontend *seamus);
-void print_songs_from_queue(struct seamus_frontend *seamus);
 
 #endif




diff --git a/include/seamus.h b/include/seamus.h
index 5d0464eb8668c0a85651a9305aab04f451ec719c..fe338207b30e1346fc05f18f0260d9d064473784 100644
--- a/include/seamus.h
+++ b/include/seamus.h
@@ -22,8 +22,8 @@
 	int current_song_position;
 	int current_song_id;
 
-	int version;
-	int length;
+	unsigned version;
+	unsigned length;
 
 	unsigned elapsed_time;
 	unsigned total_time;
@@ -64,10 +64,10 @@ 	struct mpd_connection *conn;
 	struct seamus_song *queue;
 	struct seamus_status *status;
 
-	int version;
-	int queue_size;
-	int highlight_index;
-	int scroll_offset;
+	unsigned version;
+	unsigned queue_size;
+	unsigned highlight_index;
+	unsigned scroll_offset;
 
 	enum window_type current_window;
 
@@ -83,8 +83,6 @@ 	TickitPen *playing_pen;
 	TickitPen *dim_pen;
 };
 
-int seamus_init(struct seamus_frontend *s);
-int setup_connection(struct seamus_frontend *s);
-int fetch_mpd_from_current_queue(struct seamus_frontend *seamus, int max_count);
+int seamus_init(struct seamus_frontend *seamus);
 
 #endif




diff --git a/include/status.h b/include/status.h
index cbdc29d38cef789e3ee0bd4c496ac4668dc9f987..7c2b643129d27a6a278835809ecc6dcca5dcd07c 100644
--- a/include/status.h
+++ b/include/status.h
@@ -2,6 +2,5 @@ #ifndef SEAMUS_STATUS
 #define SEAMUS_STATUS
 #include "seamus.h"
 
-int generate_description(struct seamus_status *status, struct mpd_song *song);
 int fetch_current_status(struct seamus_frontend *seamus);
 #endif




diff --git a/include/ui.h b/include/ui.h
index b70856eb7173623faa2f6ef89d9f657820937e25..b3e546855ba037651c8e4ab68376dbe4a648efbc 100644
--- a/include/ui.h
+++ b/include/ui.h
@@ -1,11 +1,10 @@
 #ifndef SEAMUS_UI
 #define SEAMUS_UI
-#include <errno.h>
 #include <tickit.h>
 #include "seamus.h"
 
-int tickit_init(struct seamus_frontend *s);
-int tickit_start(struct seamus_frontend *s);
-int tickit_finish(struct seamus_frontend *s);
+int tickit_init(struct seamus_frontend *seamus);
+int tickit_start(struct seamus_frontend *seamus);
+int tickit_finish(struct seamus_frontend *seamus);
 
 #endif




diff --git a/src/queue.c b/src/queue.c
index 1f68dbdf0d3639ddbef83f4544e30c500d96e45f..aab2bcb97fde415fc5e624e1a913fdb344dbcbe4 100644
--- a/src/queue.c
+++ b/src/queue.c
@@ -12,9 +12,7 @@
 	bool queue_status = mpd_send_list_queue_meta(seamus->conn);
 
 	if (queue_status) {
-		struct mpd_entity *entity;
-		int total = seamus->status->length;
-		int index = 0;
+		unsigned total = seamus->status->length;
 
 		free(seamus->queue);
 		seamus->queue = calloc(total, sizeof(struct seamus_song));
@@ -25,8 +23,8 @@ 			return 1;
 		}
 		seamus->queue_size = total;
 
-		while (index < total) {
-			entity = mpd_recv_entity(seamus->conn);
+		for (unsigned index = 0; index < total; index++) {
+			struct mpd_entity *entity = mpd_recv_entity(seamus->conn);
 
 			if (entity == NULL) {
 				break;
@@ -45,8 +43,8 @@ 				if (stitle == NULL) stitle = "";
 				if (sartist == NULL) sartist = "";
 				if (salbum == NULL) salbum = "";
 
-				struct seamus_song *new = &seamus->queue[index];
-				memset(new, 0, sizeof(*new));
+				struct seamus_song *entry = &seamus->queue[index];
+				memset(entry, 0, sizeof(*entry));
 
 				char *title = malloc(strlen(stitle) + 1);
 				if (title == NULL) break;
@@ -60,18 +58,19 @@ 				char *album = malloc(strlen(salbum) + 1);
 				if (album == NULL) { free(title); free(artist); break; }
 				strcpy(album, salbum);
 
-				new->song_id = mpd_song_get_id(song);
-				new->duration = mpd_song_get_duration(song);
-				new->title = title;
-				new->artist = artist;
-				new->album = album;
+				entry->song_id = mpd_song_get_id(song);
+				entry->duration = mpd_song_get_duration(song);
+				entry->title = title;
+				entry->artist = artist;
+				entry->album = album;
 			}
 
 			mpd_entity_free(entity);
-			index++;
 		}
 
 		mpd_response_finish(seamus->conn);
+
+		log_info("Queue fetched: %u songs", seamus->queue_size);
 
 		return 0;
 	} else {




diff --git a/src/seamus.c b/src/seamus.c
index 45014a5dea80939b8b5901a3666a065d350c9146..1e1b6711d9c04be6f6521d4fc9014130c568b5f2 100755
--- a/src/seamus.c
+++ b/src/seamus.c
@@ -5,8 +5,8 @@ #include 
 #include "seamus.h"
 #include "ui.h"
 
-int
-setup_connection(struct seamus_frontend *s)
+static int
+setup_connection(struct seamus_frontend *seamus)
 {
 	struct mpd_connection *connection = mpd_connection_new(NULL, 0, 0);
 
@@ -23,17 +23,15 @@ 		log_error("MPD connection error: %s", message);
 		return 1;
 	}
 
-	s->conn = connection;
+	seamus->conn = connection;
 
 	return 0;
 }
 
-void
+static void
 seamus_finish(struct seamus_frontend *seamus)
 {
-	int i;
-	int n = seamus->queue_size;
-	for (i = 0; i < n; i++) {
+	for (unsigned i = 0; i < seamus->queue_size; i++) {
 		struct seamus_song *s = &seamus->queue[i];
 		free(s->title);
 		free(s->artist);
@@ -50,16 +48,16 @@ 	free(sts);
 }
 
 int
-seamus_init(struct seamus_frontend *s)
+seamus_init(struct seamus_frontend *seamus)
 {
-	s->highlight_index = 0;
-	s->scroll_offset = 0;
-	s->current_window = WINDOW_QUEUE;
-	s->prev_song_id = -1;
-	s->needs_center = 0;
+	seamus->highlight_index = 0;
+	seamus->scroll_offset = 0;
+	seamus->current_window = WINDOW_QUEUE;
+	seamus->prev_song_id = -1;
+	seamus->needs_center = 0;
 
-	int mpd_con = setup_connection(s);
-	if (mpd_con != 0) {
+	int ret = setup_connection(seamus);
+	if (ret != 0) {
 		log_error("Weren't able to connect with MPD");
 
 		return 1;
@@ -73,6 +71,12 @@ main(int argc, char *argv[])
 {
 	(void)argc;
 	(void)argv;
+
+	const char *log_level = getenv("SEAMUS_LOG");
+	if (log_level != NULL) {
+		log_set_level(atoi(log_level));
+	}
+
 	struct seamus_frontend seamus = {0};
 
 	int r = seamus_init(&seamus);




diff --git a/src/status.c b/src/status.c
index 294f49d402dcaeb1310d6301c49c00513137ca3f..18e6cd6a594ed2b7aef7191cade9244f2c47f412 100644
--- a/src/status.c
+++ b/src/status.c
@@ -5,72 +5,74 @@ #include 
 #include "seamus.h"
 #include "status.h"
 
+static int generate_description(struct seamus_status *status, struct mpd_song *song);
+
 int
-fetch_current_status(struct seamus_frontend *s)
+fetch_current_status(struct seamus_frontend *seamus)
 {
-	assert(s->conn != NULL);
+	assert(seamus->conn != NULL);
 
-	struct mpd_status *status = mpd_run_status(s->conn);
+	struct mpd_status *status = mpd_run_status(seamus->conn);
 
 	if (status == NULL) {
-		const char *message = mpd_connection_get_error_message(s->conn);
+		const char *message = mpd_connection_get_error_message(seamus->conn);
 		log_error("MPD Error - No Status: %s", message);
 
 		return 1;
 	}
 
-	if (s->status == NULL) {
-		s->status = calloc(1, sizeof(struct seamus_status));
-		if (s->status == NULL) {
+	if (seamus->status == NULL) {
+		seamus->status = calloc(1, sizeof(struct seamus_status));
+		if (seamus->status == NULL) {
 			log_error("Failed to allocate memory for status");
 			mpd_status_free(status);
 			return 1;
 		}
 	}
 
-	s->status->repeat = mpd_status_get_repeat(status);
-	s->status->version = mpd_status_get_queue_version(status);
-	s->status->length = mpd_status_get_queue_length(status);
-	s->status->current_song_position = mpd_status_get_song_pos(status);
-	s->status->current_song_id = mpd_status_get_song_id(status);
-	s->status->state = mpd_status_get_state(status);
-	s->status->elapsed_time = mpd_status_get_elapsed_time(status);
-	s->status->total_time = mpd_status_get_total_time(status);
+	seamus->status->repeat = mpd_status_get_repeat(status);
+	seamus->status->version = mpd_status_get_queue_version(status);
+	seamus->status->length = mpd_status_get_queue_length(status);
+	seamus->status->current_song_position = mpd_status_get_song_pos(status);
+	seamus->status->current_song_id = mpd_status_get_song_id(status);
+	seamus->status->state = mpd_status_get_state(status);
+	seamus->status->elapsed_time = mpd_status_get_elapsed_time(status);
+	seamus->status->total_time = mpd_status_get_total_time(status);
 
-	mpd_response_finish(s->conn);
+	mpd_response_finish(seamus->conn);
 
-	struct mpd_song *song = mpd_run_current_song(s->conn);
+	struct mpd_song *song = mpd_run_current_song(seamus->conn);
 	if (song != NULL) {
-		int desc = generate_description(s->status, song);
+		int desc = generate_description(seamus->status, song);
 		mpd_song_free(song);
 
 		if (desc != 0) {
 			log_debug("Something went off, when generate description");
 		}
 	} else {
-		free(s->status->description);
-		s->status->description = malloc(sizeof("Stopped"));
-		if (s->status->description == NULL) {
+		free(seamus->status->description);
+		seamus->status->description = malloc(sizeof("Stopped"));
+		if (seamus->status->description == NULL) {
 			log_error("Failed to allocate memory for status description");
 			mpd_status_free(status);
-			mpd_response_finish(s->conn);
+			mpd_response_finish(seamus->conn);
 			return 1;
 		}
-		sprintf(s->status->description, "%s", "Stopped");
+		sprintf(seamus->status->description, "%s", "Stopped");
 	}
 
-	if (s->status->current_song_id != s->prev_song_id) {
-		s->prev_song_id = s->status->current_song_id;
-		s->needs_center = 1;
+	if (seamus->status->current_song_id != seamus->prev_song_id) {
+		seamus->prev_song_id = seamus->status->current_song_id;
+		seamus->needs_center = 1;
 	}
 
 	mpd_status_free(status);
-	mpd_response_finish(s->conn);
+	mpd_response_finish(seamus->conn);
 
 	return 0;
 }
 
-int
+static int
 generate_description(struct seamus_status *status, struct mpd_song *song)
 {
 	const char *title = mpd_song_get_tag(song, MPD_TAG_TITLE, 0);




diff --git a/src/ui.c b/src/ui.c
index 92b115b39ea101a93dfa42915cadf076fc2c40c9..cd7014b8e83d1bd9c4664ce19f3bb84d35e0b41a 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -1,4 +1,5 @@
 #include <assert.h>
+#include <errno.h>
 #include <stdio.h>
 #include <string.h>
 #include "ui.h"
@@ -21,7 +22,6 @@ static int stop_playback(struct seamus_frontend *seamus);
 static int next_track(struct seamus_frontend *seamus);
 static int toggle_repeat(struct seamus_frontend *seamus);
 static int update_status(Tickit *t, TickitEventFlags flags, void *_info, void *data);
-static int update_main_window(Tickit *t, TickitEventFlags flags, void *_info, void *data);
 static int render_root(TickitWindow *win, TickitEventFlags flags, void *_info, void *data);
 static int render_status_window(TickitWindow *win, TickitEventFlags flags, void *_info, void *data);
 static int render_main_window(TickitWindow *win, TickitEventFlags flags, void *_info, void *data);
@@ -29,19 +29,43 @@ static int render_queue(struct seamus_frontend *seamus, TickitRenderBuffer *render_buffer);
 static int render_library(struct seamus_frontend *seamus, TickitRenderBuffer *render_buffer);
 static void render_progress_bar(TickitWindow *win, TickitRenderBuffer *render_buffer,
 	struct seamus_frontend *seamus);
+static void render_status_line(TickitRenderBuffer *render_buffer,
+	struct seamus_frontend *seamus, int fetch_ok);
 
-int
-tickit_init(struct seamus_frontend *s)
+static int
+tickit_init_pens(struct seamus_frontend *seamus)
+{
+	seamus->scrolling_pen = tickit_pen_new_attrs(
+		TICKIT_PEN_BG, 3,
+		TICKIT_PEN_FG, 0,
+		0
+	);
+
+	seamus->playing_pen = tickit_pen_new_attrs(
+		TICKIT_PEN_BOLD, 1,
+		0
+	);
+
+	seamus->dim_pen = tickit_pen_new_attrs(
+		TICKIT_PEN_FG, 8,
+		0
+	);
+
+	return 0;
+}
+
+static int
+tickit_init_windows(struct seamus_frontend *seamus)
 {
 	Tickit *t = tickit_new_stdtty();
 	TickitWindow *root = tickit_get_rootwin(t);
 
 	if (!root) {
-		log_error("Cannot create TickitTerm - %d\n", strerror(errno));
+		log_error("Cannot create TickitTerm - %s", strerror(errno));
 		return 1;
 	}
 
-	s->t = t;
+	seamus->t = t;
 
 	int root_lines = tickit_window_lines(root);
 	int root_cols = tickit_window_cols(root);
@@ -66,56 +90,48 @@ 		log_error("Failed to create status window");
 		return 1;
 	}
 
-	s->scrolling_pen = tickit_pen_new_attrs(
-		TICKIT_PEN_BG, 3,
-		TICKIT_PEN_FG, 0,
-		0
-	);
+	seamus->main_window = main_window;
+	seamus->status_window = status_window;
 
-	s->playing_pen = tickit_pen_new_attrs(
-		TICKIT_PEN_BOLD, 1,
-		0
-	);
+	return 0;
+}
 
-	s->dim_pen = tickit_pen_new_attrs(
-		TICKIT_PEN_FG, 8,
-		0
-	);
-
-	s->main_window = main_window;
-	s->status_window = status_window;
+int
+tickit_init(struct seamus_frontend *seamus)
+{
+	int ret = tickit_init_windows(seamus);
+	if (ret != 0) {
+		return ret;
+	}
 
-	return 0;
+	return tickit_init_pens(seamus);
 }
 
 int
-tickit_start(struct seamus_frontend *s)
+tickit_start(struct seamus_frontend *seamus)
 {
-	TickitWindow *root = tickit_get_rootwin(s->t);
-	TickitTerm *tt = tickit_get_term(s->t);
+	TickitWindow *root = tickit_get_rootwin(seamus->t);
+	TickitTerm *tt = tickit_get_term(seamus->t);
 
-	tickit_window_bind_event(s->status_window, TICKIT_WINDOW_ON_EXPOSE, 0, &render_status_window, s);
-	tickit_window_bind_event(s->main_window, TICKIT_WINDOW_ON_EXPOSE, 0, &render_main_window, s);
-	tickit_window_bind_event(root, TICKIT_WINDOW_ON_EXPOSE, 0, &render_root, s);
+	tickit_window_bind_event(seamus->status_window, TICKIT_WINDOW_ON_EXPOSE, 0, &render_status_window, seamus);
+	tickit_window_bind_event(seamus->main_window, TICKIT_WINDOW_ON_EXPOSE, 0, &render_main_window, seamus);
+	tickit_window_bind_event(root, TICKIT_WINDOW_ON_EXPOSE, 0, &render_root, seamus);
 
-	tickit_term_bind_event(tt, TICKIT_TERM_ON_KEY, 0, &on_key_event, s);
+	tickit_term_bind_event(tt, TICKIT_TERM_ON_KEY, 0, &on_key_event, seamus);
 
-	// Initial fetch and center so first render is already aligned
-	// XXX: It doesn't work that well, need some more digging
-	fetch_current_status(s);
-	if (s->status && s->status->length > 0) {
-		s->version = s->status->version;
-		fetch_current_queue(s);
-		s->needs_center = 0;
-		scroll_to_center(s);
+	fetch_current_status(seamus);
+	if (seamus->status && seamus->status->length > 0) {
+		seamus->version = seamus->status->version;
+		fetch_current_queue(seamus);
+		seamus->needs_center = 0;
+		scroll_to_center(seamus);
 	} else {
-		s->needs_center = 0;
+		seamus->needs_center = 0;
 	}
 
-	// Kick periodic update timer
-	tickit_watch_timer_after_msec(s->t, 1000, 0, &update_status, s);
+	tickit_watch_timer_after_msec(seamus->t, 1000, 0, &update_status, seamus);
 
-	tickit_run(s->t);
+	tickit_run(seamus->t);
 
 	return 0;
 }
@@ -247,13 +263,13 @@
 static int
 toggle_playing_status(struct seamus_frontend *seamus)
 {
-	if (seamus->highlight_index < 0 || seamus->highlight_index >= seamus->queue_size) {
-		log_info("No song at index %d to play", seamus->highlight_index);
+	if (seamus->highlight_index >= seamus->queue_size) {
+		log_info("No song at index %u to play", seamus->highlight_index);
 		return 1;
 	}
 
 	struct seamus_song *song = &seamus->queue[seamus->highlight_index];
-	log_info("Current position %d - %s", seamus->highlight_index, song->title);
+	log_info("Current position %u - %s", seamus->highlight_index, song->title);
 
 	if (!mpd_run_play_id(seamus->conn, song->song_id)) {
 		const char *msg = mpd_connection_get_error_message(seamus->conn);
@@ -271,7 +287,7 @@
 static int
 update_scroll_position(struct seamus_frontend *seamus, int direction)
 {
-	if (seamus->status->length <= 0) {
+	if (seamus->status->length == 0) {
 		return 0;
 	}
 
@@ -290,8 +306,8 @@ 	}
 
 	if (seamus->highlight_index < seamus->scroll_offset) {
 		seamus->scroll_offset = seamus->highlight_index;
-	} else if (seamus->highlight_index >= seamus->scroll_offset + visible_rows) {
-		seamus->scroll_offset = seamus->highlight_index - visible_rows + 1;
+	} else if (seamus->highlight_index >= seamus->scroll_offset + (unsigned)visible_rows) {
+		seamus->scroll_offset = seamus->highlight_index - (unsigned)visible_rows + 1;
 	}
 
 	tickit_window_expose(seamus->main_window, NULL);
@@ -301,7 +317,7 @@
 static int
 scroll_page(struct seamus_frontend *seamus, int direction)
 {
-	if (seamus->status->length <= 0) {
+	if (seamus->status->length == 0) {
 		return 0;
 	}
 
@@ -309,15 +325,13 @@ 	int visible_rows = tickit_window_lines(seamus->main_window) - QUEUE_START_LINE;
 	if (visible_rows <= 0) visible_rows = 1;
 
 	if (direction == 1) {
-		seamus->scroll_offset += visible_rows;
-		if (seamus->scroll_offset > seamus->status->length - visible_rows) {
-			seamus->scroll_offset = seamus->status->length - visible_rows;
+		seamus->scroll_offset += (unsigned)visible_rows;
+		if (seamus->scroll_offset > seamus->status->length - (unsigned)visible_rows) {
+			seamus->scroll_offset = seamus->status->length - (unsigned)visible_rows;
 		}
-		if (seamus->scroll_offset < 0) seamus->scroll_offset = 0;
 		seamus->highlight_index = seamus->scroll_offset;
 	} else if (direction == -1) {
-		seamus->scroll_offset -= visible_rows;
-		if (seamus->scroll_offset < 0) seamus->scroll_offset = 0;
+		seamus->scroll_offset -= (unsigned)visible_rows;
 		seamus->highlight_index = seamus->scroll_offset;
 	}
 
@@ -328,19 +342,15 @@
 static int
 scroll_to_extremes(struct seamus_frontend *seamus, int home)
 {
-	if (seamus->status->length <= 0) {
+	if (seamus->status->length == 0) {
 		return 0;
 	}
 
-	int visible_rows = tickit_window_lines(seamus->main_window) - QUEUE_START_LINE;
-	if (visible_rows <= 0) visible_rows = 1;
-
 	if (home) {
 		seamus->scroll_offset = 0;
 		seamus->highlight_index = 0;
 	} else {
-		seamus->scroll_offset = seamus->status->length - visible_rows;
-		if (seamus->scroll_offset < 0) seamus->scroll_offset = 0;
+		seamus->scroll_offset = seamus->status->length - 1;
 		seamus->highlight_index = seamus->status->length - 1;
 	}
 
@@ -351,7 +361,7 @@
 static int
 scroll_half_page(struct seamus_frontend *seamus, int direction)
 {
-	if (seamus->status->length <= 0) {
+	if (seamus->status->length == 0) {
 		return 0;
 	}
 
@@ -362,18 +372,15 @@ 	int step = visible_rows / 2;
 	if (step < 1) step = 1;
 
 	if (direction == 1) {
-		seamus->scroll_offset += step;
+		seamus->scroll_offset += (unsigned)step;
 
-		if (seamus->scroll_offset > seamus->status->length - visible_rows) {
-			seamus->scroll_offset = seamus->status->length - visible_rows;
+		if (seamus->scroll_offset > seamus->status->length - (unsigned)visible_rows) {
+			seamus->scroll_offset = seamus->status->length - (unsigned)visible_rows;
 		}
 
-		if (seamus->scroll_offset < 0) seamus->scroll_offset = 0;
 		seamus->highlight_index = seamus->scroll_offset;
 	} else if (direction == -1) {
-		seamus->scroll_offset -= step;
-
-		if (seamus->scroll_offset < 0) seamus->scroll_offset = 0;
+		seamus->scroll_offset -= (unsigned)step;
 		seamus->highlight_index = seamus->scroll_offset;
 	}
 
@@ -385,14 +392,14 @@
 static int
 scroll_to_center(struct seamus_frontend *seamus)
 {
-	if (seamus->status->length <= 0 || seamus->queue_size <= 0) {
+	if (seamus->status->length == 0 || seamus->queue_size == 0) {
 		return 0;
 	}
 
 	int playing_idx = -1;
-	for (int i = 0; i < seamus->queue_size; i++) {
+	for (unsigned i = 0; i < seamus->queue_size; i++) {
 		if (seamus->queue[i].song_id == seamus->status->current_song_id) {
-			playing_idx = i;
+			playing_idx = (int)i;
 			break;
 		}
 	}
@@ -407,12 +414,8 @@ 	if (visible_rows <= 0) {
 		visible_rows = 1;
 	}
 
-	seamus->highlight_index = playing_idx;
-	seamus->scroll_offset = playing_idx - visible_rows / 2;
-
-	if (seamus->scroll_offset < 0) {
-		seamus->scroll_offset = 0;
-	}
+	seamus->highlight_index = (unsigned)playing_idx;
+	seamus->scroll_offset = (unsigned)(playing_idx - visible_rows / 2);
 
 	tickit_window_expose(seamus->main_window, NULL);
 
@@ -510,19 +513,6 @@ 	return 0;
 }
 
 static int
-update_main_window(Tickit *t, TickitEventFlags flags, void *_info, void *data)
-{
-	(void)flags;
-	(void)_info;
-	struct seamus_frontend *seamus = (struct seamus_frontend*) data;
-
-	tickit_window_expose(seamus->main_window, NULL);
-	tickit_watch_timer_after_msec(t, 1000, 0, &update_main_window, data);
-
-	return 0;
-}
-
-static int
 render_root(TickitWindow *win, TickitEventFlags flags, void *_info, void *data)
 {
 	(void)flags;
@@ -675,40 +665,42 @@ 	draw_button(render_buffer, row, col, "R", seamus->status->repeat);
 	tickit_renderbuffer_goto(render_buffer, row + 3, col + 1);
 	tickit_renderbuffer_text(render_buffer, repeat_desc);
 
-	if (r != 0) {
+	render_status_line(render_buffer, seamus, r);
+
+	return 1;
+}
+
+static void
+render_status_line(TickitRenderBuffer *render_buffer,
+	struct seamus_frontend *seamus, int fetch_ok)
+{
+	tickit_renderbuffer_goto(render_buffer, 6, 0);
+
+	if (fetch_ok != 0) {
 		log_fatal("We had some trouble");
 
-		tickit_renderbuffer_goto(render_buffer, 6, 0);
+		tickit_renderbuffer_savepen(render_buffer);
 
-		{
-			tickit_renderbuffer_savepen(render_buffer);
-
-			TickitPen *pen = tickit_pen_new_attrs(
-					TICKIT_PEN_FG, 1,
-					TICKIT_PEN_BOLD, 1,
-					0);
+		TickitPen *pen = tickit_pen_new_attrs(
+				TICKIT_PEN_FG, 1,
+				TICKIT_PEN_BOLD, 1,
+				0);
 
-			tickit_renderbuffer_setpen(render_buffer, pen);
-			tickit_renderbuffer_text(render_buffer, "We had some error fetching the status");
-			tickit_renderbuffer_restore(render_buffer);
-		}
+		tickit_renderbuffer_setpen(render_buffer, pen);
+		tickit_renderbuffer_text(render_buffer, "We had some error fetching the status");
+		tickit_renderbuffer_restore(render_buffer);
 	} else {
-		tickit_renderbuffer_goto(render_buffer, 6, 0);
-		{
-			tickit_renderbuffer_savepen(render_buffer);
+		tickit_renderbuffer_savepen(render_buffer);
 
-			TickitPen *pen = tickit_pen_new_attrs(
-					TICKIT_PEN_FG, 4,
-					TICKIT_PEN_BOLD, 1,
-					0);
+		TickitPen *pen = tickit_pen_new_attrs(
+				TICKIT_PEN_FG, 4,
+				TICKIT_PEN_BOLD, 1,
+				0);
 
-			tickit_renderbuffer_setpen(render_buffer, pen);
-			tickit_renderbuffer_text(render_buffer, seamus->status->description);
-			tickit_renderbuffer_restore(render_buffer);
-		}
+		tickit_renderbuffer_setpen(render_buffer, pen);
+		tickit_renderbuffer_text(render_buffer, seamus->status->description);
+		tickit_renderbuffer_restore(render_buffer);
 	}
-
-	return 1;
 }
 
 static int
@@ -740,7 +732,7 @@ }
 
 static int
 render_main_window_tabs(TickitWindow *win, TickitRenderBuffer *render_buffer,
-		struct seamus_frontend *seamus)
+		const struct seamus_frontend *seamus)
 {
 	int active = seamus->current_window;
 	const char *names[2] = { "QUEUE", "LIBRARY" };
@@ -818,7 +810,7 @@ 	} else {
 		log_info("There are items on queue");
 		if (seamus->status->version != seamus->version) {
 			log_info(
-				"The current rendered version is %d and there's a new one %d",
+				"The current rendered version is %u and there's a new one %u",
 				seamus->version,
 				seamus->status->version
 			);
@@ -843,12 +835,12 @@ 	return 1;
 }
 
 static void
-format_song_line(const struct seamus_song *song, int index,
+format_song_line(const struct seamus_song *song, unsigned index,
 	char *head, size_t headsz,
 	char *body, size_t bodysz,
 	char *tail, size_t tailsz)
 {
-	snprintf(head, headsz, "%d. ", index + 1);
+	snprintf(head, headsz, "%u. ", index + 1);
 
 	int pos = snprintf(body, bodysz, "%s - %s", song->artist, song->title);
 	if (song->album && song->album[0]) {
@@ -866,7 +858,7 @@ }
 
 static void
 render_song_body(TickitRenderBuffer *rb, struct seamus_frontend *seamus,
-	const struct seamus_song *song, int idx, const char *text)
+	const struct seamus_song *song, unsigned idx, const char *text)
 {
 	if (seamus->status->current_song_id == song->song_id
 		&& seamus->highlight_index == idx) {
@@ -897,14 +889,14 @@ {
 	int visible_rows = tickit_window_lines(seamus->main_window) - QUEUE_START_LINE;
 	if (visible_rows < 0) visible_rows = 0;
 
-	int start = seamus->scroll_offset;
-	int end = start + visible_rows;
+	unsigned start = seamus->scroll_offset;
+	unsigned end = start + (unsigned)visible_rows;
 	if (end > seamus->queue_size) end = seamus->queue_size;
 
-	log_info("Rendering queue rows %d to %d (highlight: %d)", start, end, seamus->highlight_index);
+	log_info("Rendering queue rows %u to %u (highlight: %u)", start, end, seamus->highlight_index);
 
-	for (int i = start; i < end; ++i) {
-		struct seamus_song *song = &seamus->queue[i];
+	for (unsigned i = start; i < end; ++i) {
+		const struct seamus_song *song = &seamus->queue[i];
 		char head[16], body[1024], tail[32];
 
 		format_song_line(song, i, head, sizeof(head), body, sizeof(body), tail, sizeof(tail));
@@ -942,12 +934,12 @@ 	return 0;
 }
 
 int
-tickit_finish(struct seamus_frontend *s)
+tickit_finish(struct seamus_frontend *seamus)
 {
-	TickitWindow *root = tickit_get_rootwin(s->t);
+	TickitWindow *root = tickit_get_rootwin(seamus->t);
 
 	tickit_window_close(root);
-	tickit_unref(s->t);
+	tickit_unref(seamus->t);
 
 	return 0;
 }