#include <stdio.h>
#include <ctype.h>
#include <string.h>
+#include <signal.h>
#include <ncurses.h>
pthread_mutex_t input_output_mutex;
pthread_cond_t input_cond;
+pthread_mutex_t ui_mutex;
+pthread_cond_t ui_cond;
+
int main_thread_notified;
int show_prompt;
+int show_ui;
int log_out;
char *cmd_line;
exit(3);
}
- pthread_mutex_lock(&input_output_mutex);
- show_prompt = 1;
- pthread_cond_signal(&input_cond);
- pthread_mutex_unlock(&input_output_mutex);
+ pthread_mutex_lock(&ui_mutex);
+ show_ui = 1;
+ pthread_cond_signal(&ui_cond);
+ pthread_mutex_unlock(&ui_mutex);
}
void cb_logged_out (sp_session *session)
int pa_err;
struct audio_q_element *aqe;
-
- fprintf(stderr, "music delivery\n");
aqe = malloc(sizeof(struct audio_q_element));
aqe->num_samples = num_frames;
exit(0);
}
+void *ui_thread_function (void *attr)
+{
+ WINDOW *main_win, *playlists_win;
+
+ if ((main_win = initscr()) == NULL) {
+ fprintf(stderr, "Error initializing ncurses.\n");
+ exit(4);
+ }
+ fprintf(stderr, "DEBUG: UI started, ncurses initialized.\n");
+
+ cbreak();
+ noecho();
+ keypad(main_win, TRUE);
+
+ playlists_win = subwin(main_win, LINES - 2, COLS, 2, 0);
+ box(playlists_win, 0, 0);
+
+ int i;
+
+ i = 0;
+ pthread_mutex_lock(&ui_mutex);
+ while (1) {
+ while (!show_ui)
+ pthread_cond_wait(&ui_cond, &ui_mutex);
+
+ pthread_mutex_unlock(&ui_mutex);
+
+ mvwprintw(playlists_win, i + 2, 2, "LOLLLOL");
+
+ wrefresh(playlists_win);
+
+ getch();
+
+ ++i;
+ pthread_mutex_lock(&ui_mutex);
+ }
+
+ delwin(playlists_win);
+ delwin(main_win);
+ endwin();
+
+ finish(0);
+}
+
+void start_ui_thread (void)
+{
+ int ui_thread_id;
+ pthread_t ui_thread;
+
+ ui_thread_id = pthread_create(
+ &ui_thread,
+ NULL,
+ &ui_thread_function,
+ NULL);
+}
+
int main (int argc, char *argv[])
{
sp_error err;
pthread_mutex_init(¬ify_main_thread_mutex, NULL);
pthread_mutex_init(&input_output_mutex, NULL);
+ pthread_mutex_init(&ui_mutex, NULL);
pthread_mutex_init(&audio_q_mutex, NULL);
pthread_cond_init(¬ify_main_thread_cond, NULL);
pthread_cond_init(&input_cond, NULL);
+ pthread_cond_init(&ui_cond, NULL);
pthread_cond_init(&audio_q_cond, NULL);
pthread_mutex_lock(¬ify_main_thread_mutex);
show_prompt = 0;
pthread_mutex_unlock(&input_output_mutex);
+ pthread_mutex_lock(&ui_mutex);
+ show_ui = 0;
+ pthread_mutex_unlock(&ui_mutex);
+
pthread_mutex_lock(&audio_q_mutex);
play = 0;
pthread_mutex_unlock(&audio_q_mutex);
err = sp_session_login(session, username, password, 0, NULL);
if (err != SP_ERROR_OK) {
- fprintf(stderr, "Could not log in: %s.",
+ fprintf(stderr, "Could not log in: %s.\n",
sp_error_message(err));
- return 2;
+ exit(2);
}
- start_input_thread();
+ signal(SIGINT, finish);
+
+ //start_input_thread();
+ start_ui_thread();
start_audio_thread();
pthread_mutex_lock(&audio_q_mutex);