static void rb_generic_player_source_class_init (RBGenericPlayerSourceClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); RBSourceClass *source_class = RB_SOURCE_CLASS (klass); RBRemovableMediaSourceClass *rms_class = RB_REMOVABLE_MEDIA_SOURCE_CLASS (klass); object_class->set_property = impl_set_property; object_class->get_property = impl_get_property; object_class->constructor = impl_constructor; object_class->dispose = impl_dispose; object_class->finalize = impl_finalize; source_class->impl_show_popup = impl_show_popup; source_class->impl_delete_thyself = impl_delete_thyself; source_class->impl_can_delete = impl_can_delete; source_class->impl_delete = impl_delete; source_class->impl_can_move_to_trash = impl_can_move_to_trash; source_class->impl_move_to_trash = impl_move_to_trash; source_class->impl_can_paste = impl_can_paste; source_class->impl_get_status = impl_get_status; rms_class->impl_build_dest_uri = impl_build_dest_uri; rms_class->impl_get_mime_types = impl_get_mime_types; rms_class->impl_should_paste = rb_removable_media_source_should_paste_no_duplicate; klass->impl_get_mount_path = default_get_mount_path; klass->impl_load_playlists = default_load_playlists; klass->impl_uri_from_playlist_uri = default_uri_from_playlist_uri; klass->impl_uri_to_playlist_uri = default_uri_to_playlist_uri; g_object_class_install_property (object_class, PROP_ERROR_ENTRY_TYPE, g_param_spec_boxed ("error-entry-type", "Error entry type", "Entry type to use for import error entries added by this source", RHYTHMDB_TYPE_ENTRY_TYPE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (object_class, PROP_IGNORE_ENTRY_TYPE, g_param_spec_boxed ("ignore-entry-type", "Ignore entry type", "Entry type to use for ignore entries added by this source", RHYTHMDB_TYPE_ENTRY_TYPE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (object_class, PROP_DEVICE_INFO, g_param_spec_object ("device-info", "device info", "device information object", MPID_TYPE_DEVICE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); g_type_class_add_private (klass, sizeof (RBGenericPlayerSourcePrivate)); }
static void rb_mtp_source_class_init (RBMtpSourceClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); RBSourceClass *source_class = RB_SOURCE_CLASS (klass); RBRemovableMediaSourceClass *rms_class = RB_REMOVABLE_MEDIA_SOURCE_CLASS (klass); RBBrowserSourceClass *browser_source_class = RB_BROWSER_SOURCE_CLASS (klass); object_class->constructor = rb_mtp_source_constructor; object_class->dispose = rb_mtp_source_dispose; object_class->finalize = rb_mtp_source_finalize; object_class->set_property = rb_mtp_source_set_property; object_class->get_property = rb_mtp_source_get_property; source_class->impl_can_browse = (RBSourceFeatureFunc) rb_true_function; source_class->impl_get_browser_key = impl_get_browser_key; source_class->impl_can_rename = (RBSourceFeatureFunc) rb_true_function; source_class->impl_can_delete = (RBSourceFeatureFunc) rb_true_function; source_class->impl_can_paste = (RBSourceFeatureFunc) rb_true_function; source_class->impl_can_move_to_trash = (RBSourceFeatureFunc) rb_false_function; source_class->impl_can_copy = (RBSourceFeatureFunc) rb_true_function; source_class->impl_can_cut = (RBSourceFeatureFunc) rb_false_function; source_class->impl_show_popup = impl_show_popup; source_class->impl_get_ui_actions = impl_get_ui_actions; source_class->impl_delete = impl_delete; source_class->impl_copy = impl_copy; browser_source_class->impl_get_paned_key = impl_get_paned_key; rms_class->impl_track_added = impl_track_added; rms_class->impl_build_dest_uri = impl_build_dest_uri; rms_class->impl_get_mime_types = impl_get_mime_types; rms_class->impl_should_paste = rb_removable_media_source_should_paste_no_duplicate; g_object_class_install_property (object_class, PROP_LIBMTP_DEVICE, g_param_spec_pointer ("libmtp-device", "libmtp-device", "libmtp device", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (object_class, PROP_UDI, g_param_spec_string ("udi", "udi", "udi", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); g_type_class_add_private (klass, sizeof (RBMtpSourcePrivate)); }
static gboolean impl_track_add_error (RBRemovableMediaSource *source, RhythmDBEntry *entry, const char *dest, GError *error) { RBMtpSourcePrivate *priv = MTP_SOURCE_GET_PRIVATE (source); /* we don't actually do anything with the error here, we just need to clean up the transfer map */ LIBMTP_track_t *track = g_hash_table_lookup (priv->track_transfer_map, dest); if (track != NULL) { LIBMTP_destroy_track_t (track); g_hash_table_remove (priv->track_transfer_map, dest); } else { rb_debug ("track-add-error called, but can't find a track for dest URI %s", dest); } /* chain up to parent class for sync */ RB_REMOVABLE_MEDIA_SOURCE_CLASS (rb_mtp_source_parent_class)->impl_track_add_error (source, entry, dest, error); return TRUE; }
static gboolean impl_track_added (RBRemovableMediaSource *source, RhythmDBEntry *entry, const char *dest, guint64 filesize, const char *mimetype) { LIBMTP_track_t *track = NULL; RBMtpSourcePrivate *priv = MTP_SOURCE_GET_PRIVATE (source); RhythmDB *db; RhythmDBEntry *mtp_entry; track = g_hash_table_lookup (priv->track_transfer_map, dest); if (track == NULL) { rb_debug ("track-added called, but can't find a track for dest URI %s", dest); return FALSE; } g_hash_table_remove (priv->track_transfer_map, dest); db = get_db_for_source (RB_MTP_SOURCE (source)); /* entry_map takes ownership of the track here */ mtp_entry = add_mtp_track_to_db (RB_MTP_SOURCE (source), db, track); g_object_unref (db); if (strcmp (track->album, _("Unknown")) != 0) { rb_mtp_thread_add_to_album (priv->device_thread, track, track->album); } if (priv->album_art_supported) { RequestAlbumArtData *artdata; artdata = g_new0 (RequestAlbumArtData, 1); artdata->source = g_object_ref (source); artdata->entry = rhythmdb_entry_ref (mtp_entry); g_idle_add ((GSourceFunc) request_album_art_idle, artdata); } queue_free_space_update (RB_MTP_SOURCE (source)); /* chain up to parent class for sync */ RB_REMOVABLE_MEDIA_SOURCE_CLASS (rb_mtp_source_parent_class)->impl_track_added (source, entry, dest, filesize, mimetype); return FALSE; }
static void rb_mtp_source_class_init (RBMtpSourceClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); RBSourceClass *source_class = RB_SOURCE_CLASS (klass); RBRemovableMediaSourceClass *rms_class = RB_REMOVABLE_MEDIA_SOURCE_CLASS (klass); RBBrowserSourceClass *browser_source_class = RB_BROWSER_SOURCE_CLASS (klass); RBMediaPlayerSourceClass *mps_class = RB_MEDIA_PLAYER_SOURCE_CLASS (klass); object_class->constructed = rb_mtp_source_constructed; object_class->dispose = rb_mtp_source_dispose; object_class->finalize = rb_mtp_source_finalize; object_class->set_property = rb_mtp_source_set_property; object_class->get_property = rb_mtp_source_get_property; source_class->impl_can_browse = (RBSourceFeatureFunc) rb_true_function; source_class->impl_get_browser_key = impl_get_browser_key; source_class->impl_can_rename = (RBSourceFeatureFunc) rb_true_function; source_class->impl_can_delete = (RBSourceFeatureFunc) rb_true_function; source_class->impl_can_paste = (RBSourceFeatureFunc) rb_true_function; source_class->impl_can_move_to_trash = (RBSourceFeatureFunc) rb_false_function; source_class->impl_can_copy = (RBSourceFeatureFunc) rb_true_function; source_class->impl_can_cut = (RBSourceFeatureFunc) rb_false_function; source_class->impl_show_popup = impl_show_popup; source_class->impl_get_ui_actions = impl_get_ui_actions; source_class->impl_delete = impl_delete; browser_source_class->impl_get_paned_key = impl_get_paned_key; rms_class->impl_track_added = impl_track_added; rms_class->impl_track_add_error = impl_track_add_error; rms_class->impl_build_dest_uri = impl_build_dest_uri; rms_class->impl_get_mime_types = impl_get_mime_types; rms_class->impl_should_paste = rb_removable_media_source_should_paste_no_duplicate; rms_class->impl_can_eject = impl_can_eject; rms_class->impl_eject = impl_eject; mps_class->impl_get_entries = impl_get_entries; mps_class->impl_get_capacity = impl_get_capacity; mps_class->impl_get_free_space = impl_get_free_space; mps_class->impl_delete_entries = impl_delete_entries; mps_class->impl_show_properties = impl_show_properties; g_object_class_install_property (object_class, PROP_RAW_DEVICE, g_param_spec_pointer ("raw-device", "raw-device", "libmtp raw device", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); #if defined(HAVE_GUDEV) g_object_class_install_property (object_class, PROP_UDEV_DEVICE, g_param_spec_object ("udev-device", "udev-device", "GUdev device object", G_UDEV_TYPE_DEVICE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); #else g_object_class_install_property (object_class, PROP_UDI, g_param_spec_string ("udi", "udi", "udi", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); #endif g_object_class_override_property (object_class, PROP_DEVICE_SERIAL, "serial"); g_type_class_add_private (klass, sizeof (RBMtpSourcePrivate)); }