void playermgr_get_state(struct playermgr *m, player_state_e *state);
bool playermgr_set_completed_cb(struct playermgr *m,
player_completed_cb cb, void *data);
+const char *playermgr_get_path(struct playermgr *m);
#endif
struct playermgr {
Evas_Object *win;
player_h player;
+ char *path;
};
+static void _set_path(struct playermgr *m, const char *path)
+{
+ free(m->path);
+
+ if (path)
+ m->path = strdup(path);
+ else
+ m->path = NULL;
+}
+
+const char *playermgr_get_path(struct playermgr *m)
+{
+ if (!m) {
+ _ERR("invalid parameter");
+ return NULL;
+ }
+
+ return m->path;
+}
+
int playermgr_get_duration(struct playermgr *m)
{
int r;
player_pause(m->player);
player_stop(m->player);
player_unprepare(m->player);
+
+ _set_path(m, NULL);
}
bool playermgr_play(struct playermgr *m, const char *path, int ms)
return false;
}
+ _set_path(m, path);
+
if (m->win) {
r = player_set_display(m->player, PLAYER_DISPLAY_TYPE_OVERLAY,
GET_DISPLAY(m->win));
}
m->win = win;
+ m->path = NULL;
return m;
}
player_destroy(m->player);
}
+ free(m->path);
free(m);
}
{
app_media_info *mi;
player_state_e state;
+ const char *path;
+ struct controller *ctl;
+
+ mi = _get_current_media_info(priv);
+ if (!mi) {
+ _ERR("failed to getting media info");
+ return;
+ }
playermgr_get_state(priv->player, &state);
switch (state) {
case PLAYER_STATE_IDLE:
case PLAYER_STATE_READY:
- mi = _get_current_media_info(priv);
- if (!mi) {
- _ERR("failed to getting media info");
- return;
- }
-
progressbar_start(priv->progress);
playermgr_play(priv->player, mi->file_path, 0);
break;
case PLAYER_STATE_PAUSED:
+ path = playermgr_get_path(priv->player);
+ if (path && !strcmp(mi->file_path, path))
+ playermgr_resume(priv->player);
+ else
+ playermgr_play(priv->player, mi->file_path, 0);
+
+ progressbar_resume(priv->progress);
+ break;
case PLAYER_STATE_PLAYING:
+ path = playermgr_get_path(priv->player);
+ if (path && !strcmp(mi->file_path, path))
+ break;
+
+ progressbar_start(priv->progress);
+ playermgr_play(priv->player, mi->file_path, 0);
break;
default:
_ERR("player was not created");
break;
}
+
+ ctl = priv->ctl;
+ ctl->ops->signal(ctl->handle, PLAY_BTN_LOC, SIG_SET_PAUSE);
}
static void _player_stop(struct _priv *priv)
if (priv->playlist.cur != index) {
_mplayer_set_current(priv, index);
- _player_next(priv);
+ _player_play(priv);
}
}