diff src/madplug/input.c @ 1428:4993976d7ed0

madplug: tuple API changes
author William Pitcock <nenolod@atheme-project.org>
date Fri, 10 Aug 2007 07:45:29 -0500
parents 38fb3bb3e21e
children db616ccdd40c
line wrap: on
line diff
--- a/src/madplug/input.c	Fri Aug 10 06:52:55 2007 -0500
+++ b/src/madplug/input.c	Fri Aug 10 07:45:29 2007 -0500
@@ -280,7 +280,7 @@
     return ret;
 }
 
-gchar *input_id3_get_string(struct id3_tag * tag, char *frame_name)
+gchar *input_id3_get_string(struct id3_tag * tag, const gchar *frame_name)
 {
     gchar *rtn0 = NULL, *rtn = NULL;
     const id3_ucs4_t *string_const = NULL;
@@ -341,15 +341,24 @@
     return rtn;
 }
 
+static void input_set_and_free_tag(struct id3_tag *tag, Tuple *tuple, const gchar *frame, const gchar *tuple_name)
+{
+    gchar *scratch = input_id3_get_string(tag, frame);
+
+    tuple_associate_string(tuple, tuple_name, scratch);
+    tuple_associate_string(tuple, frame, scratch);
+
+    g_free(scratch);
+}
 
 static void input_alloc_tag(struct mad_info_t *info)
 {
-    TitleInput *title_input;
+    Tuple *title_input;
 
     if (info->tuple == NULL) {
-        title_input = bmp_title_input_new();
+        title_input = tuple_new();
         info->tuple = title_input;
-        info->tuple->length = -1; //will be refferd in decoder.c
+        tuple_associate_int(info->tuple, "length", -1);
     }
     else
         title_input = info->tuple;
@@ -362,14 +371,14 @@
 {
     gchar *string = NULL;
     gchar *realfn = NULL;
-    TitleInput *title_input;
+    Tuple *title_input;
     glong curpos = 0;
 
 #ifdef DEBUG
     g_message("f: input_read_tag");
 #endif
     if (info->tuple == NULL) {
-        title_input = bmp_title_input_new();
+        title_input = tuple_new();
         info->tuple = title_input;
     }
     else
@@ -398,21 +407,19 @@
         return;
     }
 
-    title_input->performer =
-        input_id3_get_string(info->tag, ID3_FRAME_ARTIST);
-    title_input->track_name =
-        input_id3_get_string(info->tag, ID3_FRAME_TITLE);
-    title_input->album_name =
-        input_id3_get_string(info->tag, ID3_FRAME_ALBUM);
-    title_input->genre = input_id3_get_string(info->tag, ID3_FRAME_GENRE);
-    title_input->comment =
-        input_id3_get_string(info->tag, ID3_FRAME_COMMENT);
+    input_set_and_free_tag(info->tag, title_input, ID3_FRAME_ARTIST, "artist");
+    input_set_and_free_tag(info->tag, title_input, ID3_FRAME_TITLE, "title");
+    input_set_and_free_tag(info->tag, title_input, ID3_FRAME_ALBUM, "album");
+    input_set_and_free_tag(info->tag, title_input, ID3_FRAME_GENRE, "genre");
+    input_set_and_free_tag(info->tag, title_input, ID3_FRAME_COMMENT, "comment");
+
     string = input_id3_get_string(info->tag, ID3_FRAME_TRACK);
     if (string) {
-        title_input->track_number = atoi(string);
+        tuple_associate_int(title_input, "track-number", atoi(string));
         g_free(string);
         string = NULL;
     }
+
     // year
     string = NULL;
     string = input_id3_get_string(info->tag, ID3_FRAME_YEAR);   //TDRC
@@ -420,34 +427,44 @@
         string = input_id3_get_string(info->tag, "TYER");
 
     if (string) {
-        title_input->year = atoi(string);
+        tuple_associate_int(title_input, "year", atoi(string));
         g_free(string);
         string = NULL;
     }
 
     // length
-    title_input->length = -1;
     string = input_id3_get_string(info->tag, "TLEN");
     if (string) {
-        title_input->length = atoi(string);
+        tuple_associate_int(title_input, "length", atoi(string));
 #ifdef DEBUG
-        g_message("input_read_tag: TLEN = %d", title_input->length);
+        g_message("input_read_tag: TLEN = %d", atoi(string));
 #endif	
         g_free(string);
         string = NULL;
     }
     
     realfn = g_filename_from_uri(info->filename, NULL, NULL);
-    title_input->file_name = g_strdup(g_basename(realfn ? realfn : info->filename));
-    title_input->file_path = g_path_get_dirname(realfn ? realfn : info->filename);
-    g_free(realfn); realfn = NULL;
-    if ((string = strrchr(title_input->file_name, '.'))) {
-        title_input->file_ext = string + 1;
+    
+    string = g_strdup(g_basename(realfn ? realfn : info->filename));
+    tuple_associate_string(title_input, "file-name", string);
+    g_free(string);
+
+    string = g_path_get_dirname(realfn ? realfn : info->filename);
+    tuple_associate_string(title_input, "file-path", string);
+    g_free(string);
+
+    if ((string = strrchr(realfn ? realfn : info->filename, '.'))) {
         *string = '\0';         // make filename end at dot.
+        tuple_associate_string(title_input, "file-ext", string + 1);
     }
 
-    info->title = xmms_get_titlestring(audmad_config.title_override == TRUE ?
-        audmad_config.id3_format : xmms_get_gentitle_format(), title_input);
+    g_free(realfn); realfn = NULL;
+
+    tuple_associate_string(title_input, "codec", "MPEG Audio (MP3)");
+    tuple_associate_string(title_input, "quality", "lossy");
+
+    info->title = tuple_formatter_process_string(title_input, audmad_config.title_override == TRUE ?
+        audmad_config.id3_format : cfg.gentitle_format);
 
     // for connection via proxy, we have to stop transfer once. I can't explain the reason.
     if (info->infile != NULL) {
@@ -458,11 +475,12 @@
 #ifdef DEBUG
     g_message("e: input_read_tag");
 #endif
-
 }
 
 void input_process_remote_metadata(struct mad_info_t *info)
 {
+    gboolean metadata = FALSE;
+
     if(info->remote && mad_timer_count(info->duration, MAD_UNITS_SECONDS) <= 0){
         gchar *tmp = NULL;
 #ifdef DEBUG
@@ -470,32 +488,41 @@
         g_message("process_remote_meta");
 #endif
 #endif
+
         g_free(info->title);
         info->title = NULL;
-        g_free(info->tuple->track_name);
-        info->tuple->track_name = NULL;
-        g_free(info->tuple->album_name);
-        info->tuple->album_name = NULL;
+        tuple_disassociate(info->tuple, "title");
+        tuple_disassociate(info->tuple, "album");
 
         tmp = vfs_get_metadata(info->infile, "track-name");
         if(tmp){
-            info->tuple->track_name = str_to_utf8(tmp);
-            info->title = g_strdup(info->tuple->track_name);
+            metadata = TRUE;
+            gchar *scratch;
+
+            scratch = str_to_utf8(tmp);
+            tuple_associate_string(info->tuple, "title", scratch);
+            g_free(scratch);
+
             g_free(tmp);
             tmp = NULL;
         }
 
         tmp = vfs_get_metadata(info->infile, "stream-name");
         if(tmp){
-            info->tuple->album_name = str_to_utf8(tmp);
+            metadata = TRUE;
+            gchar *scratch;
+
+            scratch = str_to_utf8(tmp);
+            tuple_associate_string(info->tuple, "album", scratch);
+            tuple_associate_string(info->tuple, "stream", scratch);
+            g_free(scratch);
+
             g_free(tmp);
             tmp = NULL;
         }
 
-        if (info->tuple->track_name && info->tuple->album_name)
-            tmp = g_strdup_printf("%s (%s)", info->tuple->track_name, info->tuple->album_name);
-        else if (info->tuple->album_name)
-            tmp = g_strdup(info->tuple->album_name);
+        if (metadata)
+            tmp = tuple_formatter_process_string(info->tuple, "${?title:${title}}${?stream: (${stream})");
         else {
             gchar *realfn = g_filename_from_uri(info->filename, NULL, NULL);
             gchar *tmp2 = g_path_get_basename(realfn ? realfn : info->filename); // info->filename is uri. --yaz
@@ -637,7 +664,7 @@
         g_free(info->mp3gain_minmax_str);
 
     if (info->tuple) {
-        bmp_title_input_free(info->tuple);
+        mowgli_object_unref(info->tuple);
         info->tuple = NULL;
     }