[easytag/wip/musicbrainz-support] Added support for one level synchronous searching of Artist and Album
- From: Abhinav Jangda <abhijangda src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [easytag/wip/musicbrainz-support] Added support for one level synchronous searching of Artist and Album
- Date: Fri, 16 May 2014 14:39:34 +0000 (UTC)
commit 13fdaef669ec6d16fedad72ea8a03539e685dbff
Author: Abhinav <abhijangda hotmail com>
Date: Fri May 16 20:07:30 2014 +0530
Added support for one level synchronous searching of Artist and Album
data/musicbrainz_dialog.ui | 21 +++--
src/mbentityview.c | 11 +-
src/mbentityview.h | 2 +-
src/musicbrainz_dialog.c | 243 ++++++++++++++++++++++++++++++++++++++++++--
4 files changed, 253 insertions(+), 24 deletions(-)
---
diff --git a/data/musicbrainz_dialog.ui b/data/musicbrainz_dialog.ui
index 92126dd..bcc49cd 100755
--- a/data/musicbrainz_dialog.ui
+++ b/data/musicbrainz_dialog.ui
@@ -6,6 +6,11 @@
<property name="can_focus">False</property>
<property name="stock">gtk-find</property>
</object>
+ <object class="GtkImage" id="image13">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-stop</property>
+ </object>
<object class="GtkImage" id="image10">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -21,11 +26,6 @@
<property name="can_focus">False</property>
<property name="stock">gtk-find</property>
</object>
- <object class="GtkImage" id="image13">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="stock">gtk-stop</property>
- </object>
<object class="GtkImage" id="image14">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -239,9 +239,15 @@
<object class="GtkComboBoxText" id="cbManualSearch">
<property name="width_request">240</property>
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can_focus">True</property>
+ <property name="has_entry">True</property>
<property name="entry_text_column">0</property>
<property name="id_column">1</property>
+ <child internal-child="entry">
+ <object class="GtkEntry" id="combobox-entry">
+ <property name="can_focus">True</property>
+ </object>
+ </child>
</object>
<packing>
<property name="expand">False</property>
@@ -263,7 +269,7 @@
</packing>
</child>
<child>
- <object class="GtkComboBox" id="cbManualSearchIn">
+ <object class="GtkComboBoxText" id="cbManualSearchIn">
<property name="width_request">120</property>
<property name="height_request">26</property>
<property name="visible">True</property>
@@ -319,6 +325,7 @@
<object class="GtkLabel" id="label13">
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="margin_right">1</property>
<property name="label" translatable="yes">Manual Search</property>
</object>
<packing>
diff --git a/src/mbentityview.c b/src/mbentityview.c
index 22b9dd2..fa6a4ad 100644
--- a/src/mbentityview.c
+++ b/src/mbentityview.c
@@ -190,12 +190,12 @@ add_iter_to_list_store (GtkListStore *list_store, GNode *node)
break;
case MB_ENTITY_TYPE_ALBUM:
- mb5_releasegroup_get_title ((Mb5ReleaseGroup)entity, name, sizeof (name));
+ mb5_release_get_title ((Mb5Release)entity, name, sizeof (name));
gtk_list_store_append (list_store, &iter);
gtk_list_store_set (list_store, &iter,
- MB_ALBUM_COLUMNS_NAME, name, -1);
+ MB_ALBUM_COLUMNS_NAME, name, -1);
- artist_credit = mb5_releasegroup_get_artistcredit ((Mb5ReleaseGroup)entity);
+ artist_credit = mb5_release_get_artistcredit ((Mb5Release)entity);
name_list = mb5_artistcredit_get_namecreditlist (artist_credit);
gstring = g_string_new ("");
@@ -218,11 +218,12 @@ add_iter_to_list_store (GtkListStore *list_store, GNode *node)
MB_ALBUM_COLUMNS_ARTIST, gstring->str, -1);
g_string_free (gstring, TRUE);
- release_list = mb5_releasegroup_get_releaselist ((Mb5ReleaseGroup)entity);
+ //TODO: Correct below code
+ /*release_list = mb5_release_get_releaselist ((Mb5Release)entity);
gtk_list_store_set (list_store, &iter,
MB_ALBUM_COLUMNS_RELEASES,
mb5_release_list_get_count (release_list), -1);
- mb5_release_list_delete (release_list);
+ mb5_release_list_delete (release_list);*/
break;
case MB_ENTITY_TYPE_TRACK:
diff --git a/src/mbentityview.h b/src/mbentityview.h
index eeb08d5..05e7b9d 100644
--- a/src/mbentityview.h
+++ b/src/mbentityview.h
@@ -86,7 +86,7 @@ enum MB_ALBUM_COLUMNS
{
MB_ALBUM_COLUMNS_NAME,
MB_ALBUM_COLUMNS_ARTIST,
- MB_ALBUM_COLUMNS_RELEASES,
+ MB_ALBUM_COLUMNS_TRACKS,
MB_ALBUM_COLUMNS_TYPE,
MB_ALBUM_COLUMNS_N
};
diff --git a/src/musicbrainz_dialog.c b/src/musicbrainz_dialog.c
index 6548360..a1a0895 100644
--- a/src/musicbrainz_dialog.c
+++ b/src/musicbrainz_dialog.c
@@ -25,20 +25,14 @@
#include <glib/gi18n.h>
#include "gtk2_compat.h"
-#include "cddb.h"
#include "easytag.h"
-#include "et_core.h"
-#include "browser.h"
-#include "scan_dialog.h"
#include "log.h"
-#include "misc.h"
-#include "setting.h"
-#include "id3_tag.h"
-#include "setting.h"
-#include "charset.h"
#include "musicbrainz_dialog.h"
#include "mbentityview.h"
+#define SEARCH_LIMIT_STR "5"
+#define SEARCH_LIMIT_INT 5
+
/***************
* Declaration *
***************/
@@ -46,11 +40,226 @@
static GtkBuilder *builder;
static GtkWidget *mbDialog;
static GtkWidget *entityView;
+static GNode *mb_tree_root;
+
+/**************
+ * Prototypes *
+ **************/
+
+static void
+et_musicbrainz_search_in_entity (gchar *string, enum MB_ENTITY_TYPE child_type,
+ enum MB_ENTITY_TYPE parent_type,
+ gchar *parent_mbid, GNode *root);
+static void
+et_musicbrainz_search (gchar *string, enum MB_ENTITY_TYPE type, GNode *root);
/*************
* Functions *
*************/
+static void
+et_musicbrainz_search_in_entity (gchar *string, enum MB_ENTITY_TYPE child_type,
+ enum MB_ENTITY_TYPE parent_type,
+ gchar *parent_mbid, GNode *root)
+{
+ Mb5Query query;
+ Mb5Metadata metadata;
+ char error_message[256];
+ tQueryResult result;
+ //int httpcode;
+ char *param_values[1];
+ char *param_names[1];
+
+ param_names [0] = "inc";
+ query = mb5_query_new ("easytag", NULL, 0);
+
+ if (child_type == MB_ENTITY_TYPE_ALBUM &&
+ parent_type == MB_ENTITY_TYPE_ARTIST)
+ {
+ param_values [0] = "releases";
+ metadata = mb5_query_query (query, "artist", parent_mbid, "", 1, param_names,
+ param_values);
+ result = mb5_query_get_lastresult (query);
+ //httpcode = mb5_query_get_lasthttpcode (query);
+ if (result == eQuery_Success)
+ {
+ if (metadata)
+ {
+ int i;
+ Mb5ReleaseList list;
+ Mb5Artist artist;
+ artist = mb5_metadata_get_artist (metadata);
+ list = mb5_artist_get_releaselist (artist);
+
+ for (i = 0; i < mb5_release_list_size (list); i++)
+ {
+ Mb5Release release;
+ release = mb5_artist_list_item (list, i);
+ if (release)
+ {
+ GNode *node;
+ EtMbEntity *entity;
+ entity = g_malloc (sizeof (EtMbEntity));
+ entity->entity = release;
+ entity->type = MB_ENTITY_TYPE_ALBUM;
+ node = g_node_new (entity);
+ g_node_append (root, node);
+ }
+ }
+ }
+
+ g_free (param_values [0]);
+ }
+ else
+ {
+ goto err;
+ }
+ }
+ else if (child_type == MB_ENTITY_TYPE_TRACK &&
+ parent_type == MB_ENTITY_TYPE_ALBUM)
+ {
+
+ }
+
+ return;
+ err:
+ mb5_query_get_lasterrormessage (query, error_message,
+ sizeof(error_message));
+ printf ("Error searching MusicBrainz Database: '%s'\n", error_message);
+ mb5_query_delete (query);
+}
+
+static void
+et_musicbrainz_search (gchar *string, enum MB_ENTITY_TYPE type, GNode *root)
+{
+ /* TODO: to free metadata, first use mb5_<entity>_copy to copy that entity */
+ Mb5Query Query;
+ Mb5Metadata Metadata;
+ char ErrorMessage[256];
+ tQueryResult Result;
+ //int HTTPCode;
+ char *ParamValues[2];
+ char *ParamNames[2];
+
+ ParamNames [0] = "query";
+ ParamNames [1] = "limit";
+ ParamValues [1] = SEARCH_LIMIT_STR;
+ Query = mb5_query_new ("easytag", NULL, 0);
+
+ if (type == MB_ENTITY_TYPE_ARTIST)
+ {
+ ParamValues [0] = g_strconcat ("artist:", string, NULL);
+ Metadata = mb5_query_query (Query, "artist", "", "", 2, ParamNames,
+ ParamValues);
+ Result = mb5_query_get_lastresult (Query);
+ //HTTPCode = mb5_query_get_lasthttpcode (Query);
+ if (Result == eQuery_Success)
+ {
+ if (Metadata)
+ {
+ int i;
+ Mb5ArtistList ArtistList;
+ ArtistList = mb5_metadata_get_artistlist (Metadata);
+
+ for (i = 0; i < mb5_artist_list_size (ArtistList); i++)
+ {
+ Mb5Artist Artist;
+ Artist = mb5_artist_list_item (ArtistList, i);
+ if (Artist)
+ {
+ GNode *node;
+ EtMbEntity *entity;
+ entity = g_malloc (sizeof (EtMbEntity));
+ entity->entity = Artist;
+ entity->type = MB_ENTITY_TYPE_ARTIST;
+ node = g_node_new (entity);
+ g_node_append (root, node);
+ }
+ }
+ }
+
+ g_free (ParamValues [0]);
+ }
+ else
+ {
+ goto err;
+ }
+ }
+ else if (type == MB_ENTITY_TYPE_ALBUM)
+ {
+ ParamValues [0] = g_strconcat ("release:", string, NULL);
+ Metadata = mb5_query_query (Query, "release", "", "", 2, ParamNames,
+ ParamValues);
+ Result = mb5_query_get_lastresult (Query);
+ //HTTPCode = mb5_query_get_lasthttpcode (Query);
+ if (Result == eQuery_Success)
+ {
+ if (Metadata)
+ {
+ int i;
+ Mb5ReleaseList list;
+ list = mb5_metadata_get_releaselist (Metadata);
+
+ for (i = 0; i < mb5_release_list_size (list); i++)
+ {
+ Mb5Release release;
+ release = mb5_artist_list_item (list, i);
+ if (release)
+ {
+ GNode *node;
+ EtMbEntity *entity;
+ entity = g_malloc (sizeof (EtMbEntity));
+ entity->entity = release;
+ entity->type = MB_ENTITY_TYPE_ALBUM;
+ node = g_node_new (entity);
+ g_node_append (root, node);
+ }
+ }
+ }
+
+ g_free (ParamValues [0]);
+ }
+ else
+ {
+ goto err;
+ }
+ }
+ else if (type == MB_ENTITY_TYPE_TRACK)
+ {
+ }
+
+ return;
+ err:
+ mb5_query_get_lasterrormessage (Query, ErrorMessage,
+ sizeof(ErrorMessage));
+ printf ("Error searching MusicBrainz Database: '%s'\n", ErrorMessage);
+ mb5_query_delete (Query);
+}
+
+static void
+btn_manual_find_clicked (GtkWidget *btn, gpointer user_data)
+{
+ GtkWidget *cb_manual_search;
+ GtkWidget *cb_manual_search_in;
+ int type;
+
+ cb_manual_search = GTK_WIDGET (gtk_builder_get_object (builder,
+ "cbManualSearch"));
+ cb_manual_search_in = GTK_WIDGET (gtk_builder_get_object (builder,
+ "cbManualSearchIn"));
+ type = gtk_combo_box_get_active (GTK_COMBO_BOX (cb_manual_search_in));
+
+ if (g_node_first_child (mb_tree_root))
+ {
+ /* TODO: Clear the tree */
+ }
+
+ et_musicbrainz_search (gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (cb_manual_search)),
+ type, mb_tree_root);
+ et_mb_entity_view_set_tree_root (ET_MB_ENTITY_VIEW (entityView),
+ mb_tree_root);
+}
+
/*
* et_open_musicbrainz_dialog:
*
@@ -59,6 +268,9 @@ static GtkWidget *entityView;
void
et_open_musicbrainz_dialog ()
{
+ GtkWidget *cb_manual_search_in;
+
+ mb_tree_root = g_node_new (NULL);
entityView = et_mb_entity_view_new ();
builder = gtk_builder_new ();
/* TODO: Check the error. */
@@ -67,14 +279,23 @@ et_open_musicbrainz_dialog ()
NULL);
mbDialog = GTK_WIDGET (gtk_builder_get_object (builder, "mbDialog"));
-
gtk_box_pack_start (GTK_BOX (gtk_builder_get_object (builder, "centralBox")),
entityView, TRUE, TRUE, 2);
/* FIXME: This should not be needed. */
gtk_box_reorder_child (GTK_BOX (gtk_builder_get_object (builder, "centralBox")),
entityView, 0);
+ g_signal_connect (gtk_builder_get_object (builder, "btnManualFind"),
+ "clicked", G_CALLBACK (btn_manual_find_clicked),
+ NULL);
+ cb_manual_search_in = GTK_WIDGET (gtk_builder_get_object (builder,
+ "cbManualSearchIn"));
+
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (cb_manual_search_in), "Artist");
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (cb_manual_search_in), "Album");
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (cb_manual_search_in), "Track");
+
gtk_widget_show_all (mbDialog);
gtk_dialog_run (GTK_DIALOG (mbDialog));
gtk_widget_destroy (mbDialog);
g_object_unref (G_OBJECT (builder));
-}
+}
\ No newline at end of file
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]