gui/audio: Add a test for seeking
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
2a845feb38
commit
96e5749e7f
35
gui/audio.c
35
gui/audio.c
|
@ -34,6 +34,8 @@ static void __gui_audio_load(struct track *track)
|
||||||
__gui_audio_set_label_markup(gui_artist_tag(), "x-large",
|
__gui_audio_set_label_markup(gui_artist_tag(), "x-large",
|
||||||
track->tr_album->al_artist->ar_name);
|
track->tr_album->al_artist->ar_name);
|
||||||
__gui_audio_set_label_markup(gui_duration(), "large", duration);
|
__gui_audio_set_label_markup(gui_duration(), "large", duration);
|
||||||
|
__gui_audio_set_label_markup(gui_position(), "large", "0:00");
|
||||||
|
gtk_adjustment_set_upper(gui_seek(), track->tr_length);
|
||||||
|
|
||||||
gui_pl_system_track_loaded(track);
|
gui_pl_system_track_loaded(track);
|
||||||
gui_treeview_scroll();
|
gui_treeview_scroll();
|
||||||
|
@ -67,7 +69,8 @@ void __gui_audio_pause_changed(GtkComboBox *combo, gpointer data)
|
||||||
audio_pause_after(gtk_combo_box_get_active(combo) - 1);
|
audio_pause_after(gtk_combo_box_get_active(combo) - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __audio_seek(GtkRange *range, GtkScrollType type, double value, gpointer data)
|
void __gui_audio_seek(GtkRange *range, GtkScrollType type,
|
||||||
|
double value, gpointer data)
|
||||||
{
|
{
|
||||||
audio_seek(value * GST_SECOND);
|
audio_seek(value * GST_SECOND);
|
||||||
}
|
}
|
||||||
|
@ -77,19 +80,6 @@ void __audio_volume_changed(GtkScaleButton *button, gdouble value, gpointer data
|
||||||
audio_set_volume((unsigned int)value);
|
audio_set_volume((unsigned int)value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __audio_timeout(gpointer data)
|
|
||||||
{
|
|
||||||
gchar *position = string_sec2str(audio_position() / GST_SECOND);
|
|
||||||
GtkAdjustment *progress = data;
|
|
||||||
|
|
||||||
gtk_adjustment_set_upper(progress, audio_duration() / GST_SECOND);
|
|
||||||
gtk_adjustment_set_value(progress, audio_position() / GST_SECOND);
|
|
||||||
__gui_audio_set_label_markup(gui_position(), "large", position);
|
|
||||||
|
|
||||||
g_free(position);
|
|
||||||
return G_SOURCE_CONTINUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean __gui_audio_can_accel(GtkWidget *widget, guint signal_id)
|
gboolean __gui_audio_can_accel(GtkWidget *widget, guint signal_id)
|
||||||
{
|
{
|
||||||
g_signal_stop_emission_by_name(widget, "can-activate-accel");
|
g_signal_stop_emission_by_name(widget, "can-activate-accel");
|
||||||
|
@ -101,10 +91,10 @@ gboolean __gui_audio_can_accel(GtkWidget *widget, guint signal_id)
|
||||||
void gui_audio_init()
|
void gui_audio_init()
|
||||||
{
|
{
|
||||||
GtkScaleButton *volume = GTK_SCALE_BUTTON(gui_builder_widget("o_volume"));
|
GtkScaleButton *volume = GTK_SCALE_BUTTON(gui_builder_widget("o_volume"));
|
||||||
audio_timeout = g_timeout_add(500, __audio_timeout,
|
|
||||||
gui_builder_object("o_progress"));
|
|
||||||
gtk_scale_button_set_value(volume, audio_get_volume());
|
gtk_scale_button_set_value(volume, audio_get_volume());
|
||||||
gtk_button_set_relief(GTK_BUTTON(volume), GTK_RELIEF_NORMAL);
|
gtk_button_set_relief(GTK_BUTTON(volume), GTK_RELIEF_NORMAL);
|
||||||
|
|
||||||
|
audio_timeout = g_timeout_add(500, gui_audio_timeout, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gui_audio_deinit()
|
void gui_audio_deinit()
|
||||||
|
@ -112,9 +102,14 @@ void gui_audio_deinit()
|
||||||
g_source_remove(audio_timeout);
|
g_source_remove(audio_timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_TESTING
|
int gui_audio_timeout(gpointer data)
|
||||||
void test_gui_audio_timeout()
|
|
||||||
{
|
{
|
||||||
__audio_timeout(gui_builder_object("o_progress"));
|
gchar *position = string_sec2str(audio_position() / GST_SECOND);
|
||||||
|
|
||||||
|
gtk_adjustment_set_upper(gui_seek(), audio_duration() / GST_SECOND);
|
||||||
|
gtk_adjustment_set_value(gui_seek(), audio_position() / GST_SECOND);
|
||||||
|
__gui_audio_set_label_markup(gui_position(), "large", position);
|
||||||
|
|
||||||
|
g_free(position);
|
||||||
|
return G_SOURCE_CONTINUE;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_TESTING */
|
|
||||||
|
|
|
@ -14,6 +14,9 @@ void gui_audio_init();
|
||||||
/* Called to stop the GUI audio timeout function. */
|
/* Called to stop the GUI audio timeout function. */
|
||||||
void gui_audio_deinit();
|
void gui_audio_deinit();
|
||||||
|
|
||||||
|
/* Called to update the current track position. */
|
||||||
|
int gui_audio_timeout();
|
||||||
|
|
||||||
/* Called to get the label displaying the album tag. */
|
/* Called to get the label displaying the album tag. */
|
||||||
static inline GtkLabel *gui_album_tag(void)
|
static inline GtkLabel *gui_album_tag(void)
|
||||||
{
|
{
|
||||||
|
@ -74,7 +77,10 @@ static inline GtkComboBoxText *gui_pause_after(void)
|
||||||
return GTK_COMBO_BOX_TEXT(gui_builder_widget("pause_after"));
|
return GTK_COMBO_BOX_TEXT(gui_builder_widget("pause_after"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_TESTING
|
/* Called to get the seeking GtkAdjustment. */
|
||||||
void test_gui_audio_timeout();
|
static inline GtkAdjustment *gui_seek(void)
|
||||||
#endif /* CONFIG_TESTING */
|
{
|
||||||
|
return GTK_ADJUSTMENT(gui_builder_object("seek"));
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* OCARINA_GUI_AUDIO_H */
|
#endif /* OCARINA_GUI_AUDIO_H */
|
||||||
|
|
|
@ -93,7 +93,7 @@
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="icon_name">folder-new</property>
|
<property name="icon_name">folder-new</property>
|
||||||
</object>
|
</object>
|
||||||
<object class="GtkAdjustment" id="o_progress">
|
<object class="GtkAdjustment" id="seek">
|
||||||
<property name="upper">100000000000</property>
|
<property name="upper">100000000000</property>
|
||||||
<property name="step_increment">1000000000</property>
|
<property name="step_increment">1000000000</property>
|
||||||
<property name="page_increment">10000000000</property>
|
<property name="page_increment">10000000000</property>
|
||||||
|
@ -503,16 +503,16 @@ audio-volume-medium</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkScale" id="o_seek">
|
<object class="GtkScale">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<property name="hexpand">True</property>
|
<property name="hexpand">True</property>
|
||||||
<property name="adjustment">o_progress</property>
|
<property name="adjustment">seek</property>
|
||||||
<property name="round_digits">0</property>
|
<property name="round_digits">0</property>
|
||||||
<property name="draw_value">False</property>
|
<property name="draw_value">False</property>
|
||||||
<property name="value_pos">left</property>
|
<property name="value_pos">left</property>
|
||||||
<signal name="change-value" handler="__audio_seek" swapped="no"/>
|
<signal name="change-value" handler="__gui_audio_seek" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">True</property>
|
<property name="expand">True</property>
|
||||||
|
|
|
@ -20,17 +20,6 @@ struct core_init_data init_data = {
|
||||||
.audio_ops = &audio_ops,
|
.audio_ops = &audio_ops,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void test_audio_seek(gint64 pos)
|
|
||||||
{
|
|
||||||
GstState state;
|
|
||||||
|
|
||||||
audio_seek(pos);
|
|
||||||
state = audio_cur_state();
|
|
||||||
|
|
||||||
while (state != GST_STATE_PAUSED && state != GST_STATE_PLAYING)
|
|
||||||
state = audio_cur_state();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void test_audio_init()
|
static void test_audio_init()
|
||||||
{
|
{
|
||||||
g_assert_cmpstr(gtk_label_get_text(gui_album_tag()), ==, " ");
|
g_assert_cmpstr(gtk_label_get_text(gui_album_tag()), ==, " ");
|
||||||
|
@ -63,6 +52,9 @@ static void test_audio_load()
|
||||||
|
|
||||||
g_assert_false(gtk_widget_is_visible(GTK_WIDGET(gui_play_button())));
|
g_assert_false(gtk_widget_is_visible(GTK_WIDGET(gui_play_button())));
|
||||||
g_assert_true( gtk_widget_is_visible(GTK_WIDGET(gui_pause_button())));
|
g_assert_true( gtk_widget_is_visible(GTK_WIDGET(gui_pause_button())));
|
||||||
|
|
||||||
|
g_assert_cmpuint(gtk_adjustment_get_upper(gui_seek()), ==,
|
||||||
|
track->tr_length);
|
||||||
g_free(length);
|
g_free(length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,26 +92,21 @@ static void test_audio_buttons()
|
||||||
GTK_COMBO_BOX(gui_pause_after())), ==, 0);
|
GTK_COMBO_BOX(gui_pause_after())), ==, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_audio()
|
static void test_audio_seek()
|
||||||
{
|
{
|
||||||
struct db_entry *dbe, *next;
|
GstState state;
|
||||||
struct track *track;
|
|
||||||
|
|
||||||
db_for_each(dbe, next, track_db_get()) {
|
audio_load(track_get(0));
|
||||||
if (TRACK(dbe)->tr_track == 4) {
|
|
||||||
track = TRACK(dbe);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
audio_load(track);
|
|
||||||
gtk_button_clicked(gui_pause_button());
|
gtk_button_clicked(gui_pause_button());
|
||||||
test_audio_seek(71 * GST_SECOND);
|
|
||||||
test_gui_audio_timeout();
|
audio_seek(10 * GST_SECOND);
|
||||||
g_assert_cmpuint(gtk_adjustment_get_upper(GTK_ADJUSTMENT(gui_builder_object("o_progress"))),
|
do {
|
||||||
==, audio_cur_track()->tr_length);
|
state = audio_cur_state();
|
||||||
test_audio_seek(0);
|
} while (state != GST_STATE_PAUSED && state != GST_STATE_PLAYING);
|
||||||
test_gui_audio_timeout();
|
|
||||||
|
g_assert_cmpint(gui_audio_timeout(), ==, G_SOURCE_CONTINUE);
|
||||||
|
g_assert_cmpint(gtk_adjustment_get_value(gui_seek()), ==, 10);
|
||||||
|
g_assert_cmpstr(gtk_label_get_text(gui_position()), ==, "0:10");
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
|
@ -142,7 +129,7 @@ int main(int argc, char **argv)
|
||||||
g_test_add_func("/Gui/Audio/Init", test_audio_init);
|
g_test_add_func("/Gui/Audio/Init", test_audio_init);
|
||||||
g_test_add_func("/Gui/Audio/Load", test_audio_load);
|
g_test_add_func("/Gui/Audio/Load", test_audio_load);
|
||||||
g_test_add_func("/Gui/Audio/Buttons", test_audio_buttons);
|
g_test_add_func("/Gui/Audio/Buttons", test_audio_buttons);
|
||||||
g_test_add_func("/Gui/Audio/Test", test_audio);
|
g_test_add_func("/Gui/Audio/Seek", test_audio_seek);
|
||||||
ret = g_test_run();
|
ret = g_test_run();
|
||||||
|
|
||||||
core_deinit();
|
core_deinit();
|
||||||
|
|
Loading…
Reference in New Issue