emotion/generic: Non-blocking meta info retrieval.
authorantognolli <antognolli>
Tue, 6 Sep 2011 21:15:53 +0000 (21:15 +0000)
committerantognolli <antognolli@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 6 Sep 2011 21:15:53 +0000 (21:15 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/emotion@63238 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/generic_players/vlc/emotion_generic_vlc.c
src/modules/generic/emotion_generic.c
src/modules/generic/emotion_generic.h

index c4ab25b..4fb8ba0 100644 (file)
@@ -696,7 +696,7 @@ _position_changed(struct _App *app)
    _send_all_track_info(app);
 
    /* sending meta info */
-   // _send_all_meta_info(app);
+   _send_all_meta_info(app);
 
    libvlc_media_player_stop(app->mp);
 }
index fc44657..2b1be32 100644 (file)
@@ -524,14 +524,14 @@ _player_meta_info_read(Emotion_Generic_Video *ev)
 {
    INF("Receiving meta info:");
    _player_meta_info_free(ev);
-   _player_helper_str_read(ev, &ev->meta.title);
-   _player_helper_str_read(ev, &ev->meta.artist);
-   _player_helper_str_read(ev, &ev->meta.album);
-   _player_helper_str_read(ev, &ev->meta.year);
-   _player_helper_str_read(ev, &ev->meta.genre);
-   _player_helper_str_read(ev, &ev->meta.comment);
-   _player_helper_str_read(ev, &ev->meta.disc_id);
-   _player_helper_str_read(ev, &ev->meta.count);
+   ev->meta.title = ev->cmd.param.meta.title;
+   ev->meta.artist = ev->cmd.param.meta.artist;
+   ev->meta.album = ev->cmd.param.meta.album;
+   ev->meta.year = ev->cmd.param.meta.year;
+   ev->meta.genre = ev->cmd.param.meta.genre;
+   ev->meta.comment = ev->cmd.param.meta.comment;
+   ev->meta.disc_id = ev->cmd.param.meta.disc_id;
+   ev->meta.count = ev->cmd.param.meta.count;
    INF("title: '%s'", ev->meta.title);
    INF("artist: '%s'", ev->meta.artist);
    INF("album: '%s'", ev->meta.album);
@@ -774,6 +774,64 @@ _player_cmd_track_info(Emotion_Generic_Video *ev)
 }
 
 static void
+_player_cmd_meta_info(Emotion_Generic_Video *ev)
+{
+   int param;
+   const char *info;
+   char buf[PATH_MAX];
+
+   if (ev->cmd.num_params == 0)
+     {
+       ev->cmd.cur_param = 0;
+       ev->cmd.num_params = 8;
+       ev->cmd.param.meta.title = NULL;
+       ev->cmd.param.meta.artist = NULL;
+       ev->cmd.param.meta.album = NULL;
+       ev->cmd.param.meta.year = NULL;
+       ev->cmd.param.meta.genre = NULL;
+       ev->cmd.param.meta.comment = NULL;
+       ev->cmd.param.meta.disc_id = NULL;
+       ev->cmd.param.meta.count = NULL;
+       ev->cmd.s_len = -1;
+     }
+
+   if (ev->cmd.s_len == -1)
+     {
+       if (!_player_cmd_param_read(ev, &param, sizeof(param)))
+         return;
+       ev->cmd.s_len = param;
+     }
+
+   if (!_player_cmd_param_read(ev, buf, ev->cmd.s_len))
+     return;
+
+   info = eina_stringshare_add_length(buf, ev->cmd.s_len);
+   ev->cmd.s_len = -1;
+
+   if (ev->cmd.cur_param == 0)
+     ev->cmd.param.meta.title = info;
+   else if (ev->cmd.cur_param == 1)
+     ev->cmd.param.meta.artist = info;
+   else if (ev->cmd.cur_param == 2)
+     ev->cmd.param.meta.album = info;
+   else if (ev->cmd.cur_param == 3)
+     ev->cmd.param.meta.year = info;
+   else if (ev->cmd.cur_param == 4)
+     ev->cmd.param.meta.genre = info;
+   else if (ev->cmd.cur_param == 5)
+     ev->cmd.param.meta.comment = info;
+   else if (ev->cmd.cur_param == 6)
+     ev->cmd.param.meta.disc_id = info;
+   else if (ev->cmd.cur_param == 7)
+     ev->cmd.param.meta.count = info;
+
+   ev->cmd.cur_param++;
+
+   if (ev->cmd.cur_param == 8)
+     _player_cmd_process(ev);
+}
+
+static void
 _player_cmd_read(Emotion_Generic_Video *ev)
 {
    if (ev->cmd.type < 0)
@@ -807,6 +865,9 @@ _player_cmd_read(Emotion_Generic_Video *ev)
       case EM_RESULT_SPU_TRACK_INFO:
         _player_cmd_track_info(ev);
         break;
+      case EM_RESULT_META_INFO:
+        _player_cmd_meta_info(ev);
+        break;
 
       default:
         WRN("received wrong command: %d", ev->cmd.type);
index 38e7c42..50dd8e4 100644 (file)
@@ -54,6 +54,7 @@ struct _Emotion_Generic_Cmd_Buffer
             int current;
             Emotion_Generic_Channel *channels;
        } track;
+       Emotion_Generic_Meta meta;
    } param;
 };