ocarina: Show information on the currently playing track
I update it using the main timeout loop, but only if the current track pointer has changed. Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
parent
f1bbbbcc5c
commit
e3c44146ff
|
@ -7,8 +7,6 @@ namespace libsaria
|
|||
{
|
||||
void init(string, bool, int, char **);
|
||||
void quit();
|
||||
|
||||
libsaria::Track *current_track();
|
||||
}
|
||||
|
||||
#endif /* LIBSARIA_H */
|
||||
|
|
|
@ -64,5 +64,7 @@ namespace libsaria
|
|||
bool operator<(Track &);
|
||||
};
|
||||
|
||||
Track *current_track();
|
||||
|
||||
} /* Namespace: libsaria */
|
||||
#endif /* LIBSARIA_TRACK_H */
|
||||
|
|
|
@ -21,6 +21,8 @@ namespace ocarina
|
|||
void set_idle_progress(float);
|
||||
void hide_idle_progress();
|
||||
|
||||
void set_now_playing();
|
||||
|
||||
GtkWidget *playlist_init();
|
||||
GtkWidget *footer_init();
|
||||
GtkWidget *now_playing_page();
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
#include <libsaria/path.h>
|
||||
#include "audio.h"
|
||||
|
||||
static string cur_file;
|
||||
static GstState cur_state = GST_STATE_NULL;
|
||||
|
||||
static bool change_state(GstState new_state)
|
||||
|
@ -36,7 +35,6 @@ void load_file(GstElement *playbin, string file)
|
|||
string uri = "file://" + file;
|
||||
println("Loading uri: " + uri);
|
||||
g_object_set(G_OBJECT(playbin), "uri", uri.c_str(), NULL);
|
||||
cur_file = file;
|
||||
}
|
||||
|
||||
namespace libsaria
|
||||
|
@ -44,8 +42,6 @@ namespace libsaria
|
|||
|
||||
void audio::play()
|
||||
{
|
||||
if (cur_file == "")
|
||||
return;
|
||||
change_state(GST_STATE_PLAYING);
|
||||
/*if (change_state(GST_STATE_PLAYING))
|
||||
trigger_callback(PLAY);*/
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
// Copyright (c) 2011 Bryan Schumaker.
|
||||
#include <libsaria/libsaria.h>
|
||||
#include <libsaria/library.h>
|
||||
#include <libsaria/audio.h>
|
||||
#include <libsaria/path.h>
|
||||
|
||||
//static libsaria::Track tmp_track;
|
||||
|
||||
namespace libsaria
|
||||
{
|
||||
|
||||
libsaria::Track *current_track()
|
||||
{
|
||||
// sid_t songid;
|
||||
//libsaria::Track *current;
|
||||
//string file = libsaria::audio::get_current_file();
|
||||
|
||||
//if (file == "")
|
||||
// return NULL;
|
||||
|
||||
// songid = lookup_songid(file);
|
||||
/*current = libsaria::library::lookup(songid);
|
||||
if (current)
|
||||
return current;*/
|
||||
|
||||
// tmp_track = libsaria::Track(file, songid);
|
||||
// tmp_track.do_cleanup();
|
||||
// return &tmp_track;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
};
|
|
@ -12,6 +12,8 @@
|
|||
#include <sstream>
|
||||
using namespace std;
|
||||
|
||||
static libsaria::Track *cur = NULL;
|
||||
|
||||
static void make_lenstr(unsigned int length, string &res)
|
||||
{
|
||||
int minutes;
|
||||
|
@ -83,6 +85,12 @@ namespace libsaria
|
|||
println("Playing: " + title + " by " + artist);
|
||||
audio::load(filepath);
|
||||
audio::play();
|
||||
cur = this;
|
||||
}
|
||||
|
||||
Track *current_track()
|
||||
{
|
||||
return cur;
|
||||
}
|
||||
|
||||
/* Track::Track()
|
||||
|
|
|
@ -2,14 +2,76 @@
|
|||
#include <ocarina/ocarina.h>
|
||||
#include <ocarina/body.h>
|
||||
|
||||
#include <libsaria/track.h>
|
||||
|
||||
static libsaria::Track *current = NULL;
|
||||
static GtkWidget *title;
|
||||
static GtkWidget *artist;
|
||||
static GtkWidget *album;
|
||||
|
||||
static void set_label(GtkWidget *label, string text, string size)
|
||||
{
|
||||
char *escaped = g_markup_escape_text(text.c_str(), -1);
|
||||
string markup = "<span size='" + size + "'>" + escaped + "</span>";
|
||||
gtk_label_set_markup(GTK_LABEL(label), markup.c_str());
|
||||
g_free(escaped);
|
||||
}
|
||||
|
||||
static void refresh_widgets()
|
||||
{
|
||||
string t = current->get_title();
|
||||
string ar = current->get_artist();
|
||||
string al = current->get_album();
|
||||
|
||||
set_label(title, t, "xx-large");
|
||||
set_label(artist, ar, "x-large");
|
||||
set_label(album, al, "x-large");
|
||||
}
|
||||
|
||||
static GtkWidget *align(GtkWidget *w)
|
||||
{
|
||||
GtkWidget *alignment = gtk_alignment_new(0.0, 0.5, 0.0, 0.0);
|
||||
gtk_container_add(GTK_CONTAINER(alignment), w);
|
||||
return alignment;
|
||||
}
|
||||
|
||||
namespace ocarina
|
||||
{
|
||||
|
||||
GtkWidget *body::now_playing_page()
|
||||
{
|
||||
GtkWidget *label = gtk_label_new("Future now playing page");
|
||||
gtk_widget_show(label);
|
||||
return label;
|
||||
GtkWidget *box = gtk_vbox_new(FALSE, 0);
|
||||
GtkWidget *window = gtk_scrolled_window_new(NULL, NULL);
|
||||
GtkWidget *viewport = gtk_viewport_new(NULL, NULL);
|
||||
|
||||
title = gtk_label_new("");
|
||||
artist = gtk_label_new("");
|
||||
album = gtk_label_new("");
|
||||
|
||||
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(window),
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport), GTK_SHADOW_NONE);
|
||||
|
||||
gtk_container_add(GTK_CONTAINER(viewport), box);
|
||||
gtk_container_add(GTK_CONTAINER(window), viewport);
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(box), align(title), TRUE, FALSE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(box), align(artist), TRUE, FALSE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(box), align(album), TRUE, FALSE, 0);
|
||||
|
||||
gtk_widget_show_all(window);
|
||||
return window;
|
||||
}
|
||||
|
||||
void body::set_now_playing()
|
||||
{
|
||||
libsaria::Track *cur = libsaria::current_track();
|
||||
if (cur == current)
|
||||
return;
|
||||
current = cur;
|
||||
refresh_widgets();
|
||||
println("Current track changed");
|
||||
}
|
||||
|
||||
}; /* Namespace: ocarina */
|
||||
|
|
|
@ -86,6 +86,7 @@ namespace ocarina
|
|||
static gboolean timeout_poll(gpointer data)
|
||||
{
|
||||
idle_add();
|
||||
ocarina::body::set_now_playing();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue