static void entry_set_string_prop (RhythmDB *db, RhythmDBEntry *entry, RhythmDBPropType propid, gboolean default_to_empty, const char *str) { GValue value = {0,}; if (!str) { if (default_to_empty) { str = ""; } else { str = _("Unknown"); } } if (!g_utf8_validate (str, -1, NULL)) { rb_debug ("Got invalid UTF-8 tag data"); str = _("<Invalid unicode>"); } g_value_init (&value, G_TYPE_STRING); g_value_set_string (&value, str); rhythmdb_entry_set (RHYTHMDB (db), entry, propid, &value); g_value_unset (&value); }
static void impl_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { RhythmDBImportJob *job = RHYTHMDB_IMPORT_JOB (object); switch (prop_id) { case PROP_DB: job->priv->db = RHYTHMDB (g_value_dup_object (value)); g_signal_connect_object (job->priv->db, "entry-added", G_CALLBACK (entry_added_cb), job, 0); break; case PROP_ENTRY_TYPE: job->priv->entry_type = g_value_get_object (value); break; case PROP_IGNORE_TYPE: job->priv->ignore_type = g_value_get_object (value); break; case PROP_ERROR_TYPE: job->priv->error_type = g_value_get_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static void impl_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { RhythmDBImportJob *job = RHYTHMDB_IMPORT_JOB (object); switch (prop_id) { case PROP_DB: job->priv->db = RHYTHMDB (g_value_dup_object (value)); g_signal_connect_object (job->priv->db, "entry-added", G_CALLBACK (entry_added_cb), job, 0); break; case PROP_ENTRY_TYPE: job->priv->entry_type = g_value_get_object (value); break; case PROP_IGNORE_TYPE: job->priv->ignore_type = g_value_get_object (value); break; case PROP_ERROR_TYPE: job->priv->error_type = g_value_get_object (value); break; case PROP_TASK_LABEL: job->priv->task_label = g_value_dup_string (value); break; case PROP_TASK_DETAIL: /* ignore */ break; case PROP_TASK_PROGRESS: /* ignore */ break; case PROP_TASK_OUTCOME: /* ignore */ break; case PROP_TASK_NOTIFY: job->priv->task_notify = g_value_get_boolean (value); break; case PROP_TASK_CANCELLABLE: /* ignore */ break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static void entry_set_string_prop (RhythmDB *db, RhythmDBEntry *entry, RhythmDBPropType propid, const char *str) { GValue value = {0,}; if (!str) str = _("Unknown"); g_value_init (&value, G_TYPE_STRING); g_value_set_static_string (&value, str); rhythmdb_entry_set (RHYTHMDB (db), entry, propid, &value); g_value_unset (&value); }
static void entry_set_string_prop (RhythmDB *db, RhythmDBEntry *entry, RhythmDBPropType propid, const char *str) { GValue value = {0,}; if (str == NULL || (g_utf8_validate (str, -1, NULL) == FALSE)) { str = _("Unknown"); } g_value_init (&value, G_TYPE_STRING); g_value_set_static_string (&value, str); rhythmdb_entry_set (RHYTHMDB (db), entry, propid, &value); g_value_unset (&value); }
static GList * impl_copy (RBSource *source) { RBMtpSourcePrivate *priv = MTP_SOURCE_GET_PRIVATE (RB_MTP_SOURCE (source)); RhythmDB *db; GList *selected_entries; GList *iter; GList *copy_entries; int ret = -1; LIBMTP_track_t *track = NULL; db = get_db_for_source (RB_MTP_SOURCE (source)); copy_entries = NULL; selected_entries = rb_entry_view_get_selected_entries (rb_source_get_entry_view (source)); for (iter = selected_entries; iter != NULL; iter = g_list_next (iter)) { RhythmDBEntry *entry; char *path; char *uri; entry = (RhythmDBEntry *)iter->data; track = g_hash_table_lookup (priv->entry_map, entry); if (track == NULL) continue; path = g_strdup_printf ("%s/%s", g_get_tmp_dir (), track->filename); uri = g_filename_to_uri (path, NULL, NULL); g_free (path); ret = rb_mtp_source_transfer_track_to_disk (priv->device, track, uri); if (ret == 0) { entry_set_string_prop (RHYTHMDB (db), entry, RHYTHMDB_PROP_LOCATION, uri); copy_entries = g_list_prepend (copy_entries, entry); } g_free (uri); } g_list_free (selected_entries); g_object_unref (G_OBJECT (db)); return copy_entries; }
static RhythmDBEntry * add_mtp_track_to_db (RBMtpSource *source, RhythmDB *db, LIBMTP_track_t *track) { RhythmDBEntry *entry = NULL; RhythmDBEntryType *entry_type; RBMtpSourcePrivate *priv = MTP_SOURCE_GET_PRIVATE (source); char *name = NULL; /* ignore everything except audio (allow audio/video types too, since they're probably pretty common) */ if (!(LIBMTP_FILETYPE_IS_AUDIO (track->filetype) || LIBMTP_FILETYPE_IS_AUDIOVIDEO (track->filetype))) { rb_debug ("ignoring non-audio item %d (filetype %s)", track->item_id, LIBMTP_Get_Filetype_Description (track->filetype)); return NULL; } /* Set URI */ g_object_get (G_OBJECT (source), "entry-type", &entry_type, NULL); name = g_strdup_printf ("xrbmtp://%i/%s", track->item_id, track->filename); entry = rhythmdb_entry_new (RHYTHMDB (db), entry_type, name); g_free (name); g_object_unref (entry_type); if (entry == NULL) { rb_debug ("cannot create entry %i", track->item_id); g_object_unref (G_OBJECT (db)); return NULL; } /* Set track number */ if (track->tracknumber != 0) { GValue value = {0, }; g_value_init (&value, G_TYPE_ULONG); g_value_set_ulong (&value, track->tracknumber); rhythmdb_entry_set (RHYTHMDB (db), entry, RHYTHMDB_PROP_TRACK_NUMBER, &value); g_value_unset (&value); } /* Set length */ if (track->duration != 0) { GValue value = {0, }; g_value_init (&value, G_TYPE_ULONG); g_value_set_ulong (&value, track->duration/1000); rhythmdb_entry_set (RHYTHMDB (db), entry, RHYTHMDB_PROP_DURATION, &value); g_value_unset (&value); } /* Set file size */ if (track->filesize != 0) { GValue value = {0, }; g_value_init (&value, G_TYPE_UINT64); g_value_set_uint64 (&value, track->filesize); rhythmdb_entry_set (RHYTHMDB (db), entry, RHYTHMDB_PROP_FILE_SIZE, &value); g_value_unset (&value); } /* Set playcount */ if (track->usecount != 0) { GValue value = {0, }; g_value_init (&value, G_TYPE_ULONG); g_value_set_ulong (&value, track->usecount); rhythmdb_entry_set (RHYTHMDB (db), entry, RHYTHMDB_PROP_PLAY_COUNT, &value); g_value_unset (&value); } /* Set rating */ if (track->rating != 0) { GValue value = {0, }; g_value_init (&value, G_TYPE_DOUBLE); g_value_set_double (&value, track->rating/20); rhythmdb_entry_set (RHYTHMDB (db), entry, RHYTHMDB_PROP_RATING, &value); g_value_unset (&value); } /* Set release date */ if (track->date != NULL && track->date[0] != '\0') { GTimeVal tv; if (g_time_val_from_iso8601 (track->date, &tv)) { GDate d; GValue value = {0, }; g_value_init (&value, G_TYPE_ULONG); g_date_set_time_val (&d, &tv); g_value_set_ulong (&value, g_date_get_julian (&d)); rhythmdb_entry_set (RHYTHMDB (db), entry, RHYTHMDB_PROP_DATE, &value); g_value_unset (&value); } } /* Set title */ entry_set_string_prop (RHYTHMDB (db), entry, RHYTHMDB_PROP_TITLE, track->title); /* Set album, artist and genre from MTP */ entry_set_string_prop (RHYTHMDB (db), entry, RHYTHMDB_PROP_ARTIST, track->artist); entry_set_string_prop (RHYTHMDB (db), entry, RHYTHMDB_PROP_ALBUM, track->album); entry_set_string_prop (RHYTHMDB (db), entry, RHYTHMDB_PROP_GENRE, track->genre); g_hash_table_insert (priv->entry_map, entry, track); rhythmdb_commit (RHYTHMDB (db)); return entry; }