void xmms_sample_converter_to_medialib (xmms_sample_converter_t *conv, xmms_medialib_entry_t entry) { #if 0 xmms_medialib_session_t *session; session = xmms_medialib_begin_write (); xmms_medialib_entry_property_set_str (session, entry, XMMS_MEDIALIB_ENTRY_PROPERTY_FMT_SAMPLEFMT_IN, xmms_sample_name_get (conv->from->format)); xmms_medialib_entry_property_set_int (session, entry, XMMS_MEDIALIB_ENTRY_PROPERTY_FMT_SAMPLERATE_IN, conv->from->samplerate); xmms_medialib_entry_property_set_int (session, entry, XMMS_MEDIALIB_ENTRY_PROPERTY_FMT_CHANNELS_IN, conv->from->channels); xmms_medialib_entry_property_set_str (session, entry, XMMS_MEDIALIB_ENTRY_PROPERTY_FMT_SAMPLEFMT_OUT, xmms_sample_name_get (conv->to->format)); xmms_medialib_entry_property_set_int (session, entry, XMMS_MEDIALIB_ENTRY_PROPERTY_FMT_SAMPLERATE_OUT, conv->to->samplerate); xmms_medialib_entry_property_set_int (session, entry, XMMS_MEDIALIB_ENTRY_PROPERTY_FMT_CHANNELS_OUT, conv->to->channels); xmms_medialib_end (session); #endif }
static void xmms_xform_metadata_collect (xmms_xform_t *start, GString *namestr, gboolean rehashing) { metadata_festate_t info; gint times_played; gint last_started; GTimeVal now; info.entry = start->entry; info.session = xmms_medialib_begin_write (); times_played = xmms_medialib_entry_property_get_int (info.session, info.entry, XMMS_MEDIALIB_ENTRY_PROPERTY_TIMESPLAYED); /* times_played == -1 if we haven't played this entry yet. so after initial * metadata collection the mlib would have timesplayed = -1 if we didn't do * the following */ if (times_played < 0) { times_played = 0; } last_started = xmms_medialib_entry_property_get_int (info.session, info.entry, XMMS_MEDIALIB_ENTRY_PROPERTY_LASTSTARTED); xmms_medialib_entry_cleanup (info.session, info.entry); xmms_xform_metadata_collect_r (start, &info, namestr); xmms_medialib_entry_property_set_str (info.session, info.entry, XMMS_MEDIALIB_ENTRY_PROPERTY_CHAIN, namestr->str); xmms_medialib_entry_property_set_int (info.session, info.entry, XMMS_MEDIALIB_ENTRY_PROPERTY_TIMESPLAYED, times_played + (rehashing ? 0 : 1)); if (!rehashing || (rehashing && last_started)) { g_get_current_time (&now); xmms_medialib_entry_property_set_int (info.session, info.entry, XMMS_MEDIALIB_ENTRY_PROPERTY_LASTSTARTED, (rehashing ? last_started : now.tv_sec)); } xmms_medialib_entry_status_set (info.session, info.entry, XMMS_MEDIALIB_ENTRY_STATUS_OK); xmms_medialib_end (info.session); xmms_medialib_entry_send_update (info.entry); }
xmms_medialib_entry_t xmms_mock_entry (xmms_medialib_t *medialib, gint tracknr, const gchar *artist, const gchar *album, const gchar *title) { xmms_medialib_session_t *session; xmms_medialib_entry_t entry; xmms_error_t err; gchar *path; xmms_error_reset (&err); path = g_strconcat (artist, album, title, NULL); session = xmms_medialib_session_begin (medialib); entry = xmms_medialib_entry_new (session, path, &err); xmms_medialib_entry_property_set_int (session, entry, XMMS_MEDIALIB_ENTRY_PROPERTY_TRACKNR, tracknr); xmms_medialib_entry_property_set_str (session, entry, XMMS_MEDIALIB_ENTRY_PROPERTY_ARTIST, artist); xmms_medialib_entry_property_set_str (session, entry, XMMS_MEDIALIB_ENTRY_PROPERTY_ALBUM, album); xmms_medialib_entry_property_set_str (session, entry, XMMS_MEDIALIB_ENTRY_PROPERTY_TITLE, title); xmms_medialib_entry_property_set_int (session, entry, XMMS_MEDIALIB_ENTRY_PROPERTY_STATUS, XMMS_MEDIALIB_ENTRY_STATUS_OK); xmms_medialib_session_commit (session); g_free (path); return entry; }
/** * TODO: Should check for '/' in the key, and set source if found. */ static void populate_medialib (xmms_medialib_t *medialib, xmmsv_t *content) { xmms_medialib_session_t *session; xmms_medialib_entry_t entry = 0; xmmsv_list_iter_t *lit; session = xmms_medialib_session_begin (medialib); xmmsv_get_list_iter (content, &lit); while (xmmsv_list_iter_valid (lit)) { xmmsv_dict_iter_t *dit; xmms_error_t err; xmmsv_t *dict; xmms_error_reset (&err); xmmsv_list_iter_entry (lit, &dict); if (xmmsv_dict_has_key (dict, "url")) { const gchar *url; xmmsv_dict_entry_get_string (dict, "url", &url); entry = xmms_medialib_entry_new (session, url, &err); } else { gchar *url; url = g_strdup_printf ("file://%d.mp3", entry + 1); entry = xmms_medialib_entry_new (session, url, &err); g_free (url); } xmmsv_get_dict_iter (dict, &dit); while (xmmsv_dict_iter_valid (dit)) { const gchar *key, *source; gchar **parts; xmmsv_t *container; xmmsv_dict_iter_pair (dit, &key, &container); parts = g_strsplit (key, "/", 2); key = (parts[1] != NULL) ? parts[1] : key; source = (parts[1] != NULL) ? parts[0] : NULL; if (xmmsv_is_type (container, XMMSV_TYPE_STRING)) { const gchar *value; xmmsv_get_string (container, &value); if (source != NULL) { xmms_medialib_entry_property_set_str_source (session, entry, key, value, source); } else { xmms_medialib_entry_property_set_str (session, entry, key, value); } } else { gint32 value; xmmsv_get_int (container, &value); if (source != NULL) { xmms_medialib_entry_property_set_int_source (session, entry, key, value, source); } else { xmms_medialib_entry_property_set_int (session, entry, key, value); } } g_strfreev (parts); xmmsv_dict_iter_next (dit); } xmmsv_list_iter_next (lit); } xmms_medialib_session_commit (session); }
static gpointer xmms_mediainfo_reader_thread (gpointer data) { GList *goal_format; GTimeVal timeval; xmms_stream_type_t *f; guint num = 0; xmms_mediainfo_reader_t *mrt = (xmms_mediainfo_reader_t *) data; xmms_object_emit_f (XMMS_OBJECT (mrt), XMMS_IPC_SIGNAL_MEDIAINFO_READER_STATUS, XMMSV_TYPE_INT32, XMMS_MEDIAINFO_READER_STATUS_RUNNING); f = _xmms_stream_type_new (NULL, XMMS_STREAM_TYPE_MIMETYPE, "audio/pcm", XMMS_STREAM_TYPE_END); goal_format = g_list_prepend (NULL, f); while (mrt->running) { xmms_medialib_session_t *session; xmmsc_medialib_entry_status_t prev_status; guint lmod = 0; xmms_medialib_entry_t entry; xmms_xform_t *xform; session = xmms_medialib_begin_write (); entry = xmms_medialib_entry_not_resolved_get (session); XMMS_DBG ("got %d as not resolved", entry); if (!entry) { xmms_medialib_end (session); xmms_object_emit_f (XMMS_OBJECT (mrt), XMMS_IPC_SIGNAL_MEDIAINFO_READER_STATUS, XMMSV_TYPE_INT32, XMMS_MEDIAINFO_READER_STATUS_IDLE); g_mutex_lock (mrt->mutex); g_cond_wait (mrt->cond, mrt->mutex); g_mutex_unlock (mrt->mutex); num = 0; xmms_object_emit_f (XMMS_OBJECT (mrt), XMMS_IPC_SIGNAL_MEDIAINFO_READER_STATUS, XMMSV_TYPE_INT32, XMMS_MEDIAINFO_READER_STATUS_RUNNING); continue; } prev_status = xmms_medialib_entry_property_get_int (session, entry, XMMS_MEDIALIB_ENTRY_PROPERTY_STATUS); xmms_medialib_entry_status_set (session, entry, XMMS_MEDIALIB_ENTRY_STATUS_RESOLVING); lmod = xmms_medialib_entry_property_get_int (session, entry, XMMS_MEDIALIB_ENTRY_PROPERTY_LMOD); if (num == 0) { xmms_object_emit_f (XMMS_OBJECT (mrt), XMMS_IPC_SIGNAL_MEDIAINFO_READER_UNINDEXED, XMMSV_TYPE_INT32, xmms_medialib_num_not_resolved (session)); num = 10; } else { num--; } xmms_medialib_end (session); xform = xmms_xform_chain_setup (entry, goal_format, TRUE); if (!xform) { if (prev_status == XMMS_MEDIALIB_ENTRY_STATUS_NEW) { xmms_medialib_entry_remove (entry); } else { session = xmms_medialib_begin_write (); xmms_medialib_entry_status_set (session, entry, XMMS_MEDIALIB_ENTRY_STATUS_NOT_AVAILABLE); xmms_medialib_end (session); xmms_medialib_entry_send_update (entry); } continue; } xmms_object_unref (xform); g_get_current_time (&timeval); session = xmms_medialib_begin_write (); xmms_medialib_entry_status_set (session, entry, XMMS_MEDIALIB_ENTRY_STATUS_OK); xmms_medialib_entry_property_set_int (session, entry, XMMS_MEDIALIB_ENTRY_PROPERTY_ADDED, timeval.tv_sec); xmms_medialib_end (session); xmms_medialib_entry_send_update (entry); } g_list_free (goal_format); xmms_object_unref (f); return NULL; }