Since the complete callback of player have bug, we implemented it on progressbar
Change-Id: I69f1afd6751b49a3523daf6fe80e5301a2049523
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
struct progressbar_ops {
int (*get_value)(void *data);
int (*set_value)(void *data);
+ void (*complete_cb)(void *data);
};
enum progressbar_time_format {
#define SLIDER_STEP 0.03
#define PROGRESSBAR_INTERVAL 0.1
+#define COMPLETE_INTERVAL 1.0
+#define COMPLETE_BUFFER 500
struct progressbar {
Evas_Object *base;
char *str_separator;
enum progressbar_time_format fmt;
+ int duration;
};
static void _update_progress_info(struct progressbar *m, int position)
_update_progress_info(m, position);
}
+static Eina_Bool _complete_cb(void *data)
+{
+ struct progressbar *m;
+
+ if (!data)
+ return ECORE_CALLBACK_CANCEL;
+
+ m = data;
+
+ if (m->ops->complete_cb)
+ m->ops->complete_cb(m->ops_data);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
static Eina_Bool _timer_cb(void *data)
{
struct progressbar *m;
elm_slider_value_set(m->slider, position);
_update_progress_info(m, position);
+ if (position + COMPLETE_BUFFER > m->duration) {
+ ecore_timer_add(COMPLETE_INTERVAL, _complete_cb, m);
+ m->timer = NULL;
+
+ return ECORE_CALLBACK_CANCEL;
+ }
+
return ECORE_CALLBACK_RENEW;
}
return;
}
+ m->duration = duration;
+
elm_slider_min_max_set(m->slider, 0, duration);
elm_slider_step_set(m->slider, SLIDER_STEP);
elm_slider_value_set(m->slider, position);
static void _draw_progressbar(struct _priv *priv, app_media_info *mi)
{
- progressbar_reset(priv->progress, 0, mi->audio->duration);
progressbar_show(priv->progress);
}
{
struct view_update_data vdata;
+ /* update progressbar */
+ progressbar_reset(priv->progress, 0, mi->audio->duration);
+
/* update history */
app_contents_recent_add(CONTENTS_MEDIA, mi->media_id);
return playermgr_get_position(priv->player);
}
-static struct progressbar_ops _progressbar_ops = {
- .get_value = _player_get_position,
-};
-
static void _player_play_pause(struct _priv *priv)
{
app_media_info *mi;
_player_next(priv);
}
+static struct progressbar_ops _progressbar_ops = {
+ .get_value = _player_get_position,
+ .complete_cb = _player_complete_cb,
+};
+
static void _callback_music(void *data, const char *ev)
{
struct _priv *priv;
return NULL;
}
- r = playermgr_set_completed_cb(player, _player_complete_cb, priv);
- if (!r) {
- _ERR("failed to set callback");
- playermgr_destroy(player);
- return NULL;
- }
-
priv->player = player;
r = _ui_init(priv);