Skip to content

Commit

Permalink
all: Remove HAL
Browse files Browse the repository at this point in the history
  • Loading branch information
hadess committed Jun 6, 2018
1 parent acdda6f commit ce78295
Show file tree
Hide file tree
Showing 7 changed files with 6 additions and 238 deletions.
25 changes: 2 additions & 23 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -147,25 +147,6 @@ else
fi
AM_CONDITIONAL(USE_GUDEV, test x"$use_gudev" = xyes)

dnl hal remnants
AC_ARG_WITH(hal,
AC_HELP_STRING([--without-hal],
[Disable HAL support]))
if test "x$with_hal" != "xno"; then
PKG_CHECK_MODULES(HAL, hal >= 0.5 hal < 0.6 dbus-glib-1, enable_hal=yes, enable_hal=no)
if test "x$enable_hal" != "xyes" -a "x$with_hal" = "xyes"; then
AC_MSG_ERROR([HAL support explicitly requested but HAL couldn't be found])
fi

if test "x$enable_hal" = "xyes"; then
AC_DEFINE(HAVE_HAL, 1, [Define if you have HAL support])
AC_SUBST(HAL_CFLAGS)
AC_SUBST(HAL_LIBS)
fi
fi
AM_CONDITIONAL(HAVE_HAL, test x"$enable_hal" = xyes)


dnl iPod support
AC_ARG_WITH(ipod,
AC_HELP_STRING([--with-ipod],
Expand Down Expand Up @@ -197,7 +178,7 @@ AC_ARG_WITH(mtp,
with_mtp=auto)
if test "x$with_mtp" != "xno"; then
can_use_mtp=no
if test x"$use_gudev" = "xyes" -o x"$enable_hal" = "xyes"; then
if test x"$use_gudev" = "xyes"; then
can_use_mtp=yes
fi

Expand All @@ -207,7 +188,7 @@ if test "x$with_mtp" != "xno"; then
AC_MSG_ERROR([MTP explicitly requested but libmtp is not available])
fi
if test x"$can_use_mtp" = "xno"; then
AC_MSG_ERROR([MTP explicitly requested but GUdev and HAL are not available])
AC_MSG_ERROR([MTP explicitly requested but GUdev is not available])
fi
fi
if test "x$have_libmtp" = "xyes" -a "x$can_use_mtp" = "xyes"; then
Expand Down Expand Up @@ -820,8 +801,6 @@ else
fi
if test x"$use_gudev" = xyes; then
AC_MSG_NOTICE([** GUdev support enabled])
elif test x"$enable_hal" = xyes; then
AC_MSG_NOTICE([** HAL support enabled])
else
AC_MSG_NOTICE([ GUdev support disabled])
fi
Expand Down
1 change: 0 additions & 1 deletion doc/reference/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,6 @@ GTKDOC_LIBS=\
$(top_builddir)/shell/librhythmbox-core.la \
$(BINDING_LIBS) \
$(TOTEM_PLPARSER_LIBS) \
$(HAL_LIBS) \
$(DBUS_LIBS) \
$(RHYTHMBOX_LIBS) \
$(MORE_GTKDOC_LIBS)
Expand Down
15 changes: 1 addition & 14 deletions lib/libmediaplayerid/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@ AM_CPPFLAGS = \
-I$(top_srcdir) \
$(RHYTHMBOX_CFLAGS)

# use the GUdev/media-player-id implementation if possible,
# otherwise HAL.
# use the GUdev/media-player-id implementation if possible.

if USE_GUDEV

Expand All @@ -29,20 +28,8 @@ libmediaplayerid_la_LIBADD = $(GUDEV_LIBS)

else

if HAVE_HAL

libmediaplayerid_la_SOURCES += mpid-hal.c
EXTRA_DIST = mpid-udev.c mpid-dummy.c

AM_CPPFLAGS += $(HAL_CFLAGS)
libmediaplayerid_la_LIBADD = $(HAL_LIBS)

else

libmediaplayerid_la_SOURCES += mpid-dummy.c
EXTRA_DIST = mpid-udev.c mpid-hal.c

endif # HAVE_HAL

endif # HAVE_GUDEV

2 changes: 1 addition & 1 deletion lib/libmediaplayerid/mpid-device.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
*
* MPID provides access to device information, such as device and vendor names,
* supported formats, and audio folder locations, for USB mass storage media
* player devices. It queries the operating system (udev or HAL) and reads
* player devices. It queries the operating system (udev) and reads
* override files from the device filesystem and provides a simple set of
* properties.
*/
Expand Down
4 changes: 2 additions & 2 deletions lib/libmediaplayerid/mpid-util.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ static gboolean debug_enabled = FALSE;
* MPIDError:
* @MPID_ERROR_NONE: Indicates no error has occurred
* @MPID_ERROR_NO_DEVICE_PATH: Unable to find the device path
* @MPID_ERROR_MECHANISM_FAILED: The device detection mechanism (e.g. udev or HAL) failed
* @MPID_ERROR_MECHANISM_FAILED: The device detection mechanism (e.g. udev) failed
* @MPID_ERROR_NOT_MEDIA_PLAYER: The device is not a media player
* @MPID_ERROR_DEVICE_INFO_MISSING: The device detection mechanism identified the device
* but was unable to locate its device information
Expand Down Expand Up @@ -61,7 +61,7 @@ mpid_error_get_type (void)
/**
* MPIDSource:
* @MPID_SOURCE_NONE: No device information is available
* @MPID_SOURCE_SYSTEM: Device information provided by the operating system (e.g. udev or HAL)
* @MPID_SOURCE_SYSTEM: Device information provided by the operating system (e.g. udev)
* @MPID_SOURCE_OVERRIDE: Device information provided by an override file on the device itself.
*/

Expand Down
2 changes: 0 additions & 2 deletions plugins/mtpdevice/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ libmtpdevice_la_LIBTOOLFLAGS = --tag=disable-static
libmtpdevice_la_LIBADD = \
$(top_builddir)/shell/librhythmbox-core.la \
$(GUDEV_LIBS) \
$(HAL_LIBS) \
$(MTP_LIBS)

AM_CPPFLAGS = \
Expand All @@ -44,7 +43,6 @@ AM_CPPFLAGS = \
-DDATADIR=\""$(datadir)"\" \
$(RHYTHMBOX_CFLAGS) \
$(GUDEV_CFLAGS) \
$(HAL_CFLAGS) \
$(MTP_CFLAGS)

plugin_in_files = mtpdevice.plugin.in
Expand Down
195 changes: 0 additions & 195 deletions plugins/mtpdevice/rb-mtp-plugin.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,8 @@
#include <glib-object.h>
#include <libmtp.h>

#if defined(HAVE_GUDEV)
#define G_UDEV_API_IS_SUBJECT_TO_CHANGE
#include <gudev/gudev.h>
#else
#include <hal/libhal.h>
#include <dbus/dbus.h>
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-lowlevel.h>
#endif

#include "rb-plugin-macros.h"
#include "rb-source.h"
Expand Down Expand Up @@ -77,11 +70,6 @@ typedef struct
guint create_device_source_id;

GList *mtp_sources;

#if !defined(HAVE_GUDEV)
LibHalContext *hal_context;
DBusConnection *dbus_connection;
#endif
} RBMtpPlugin;

typedef struct
Expand All @@ -94,14 +82,7 @@ G_MODULE_EXPORT void peas_register_types (PeasObjectModule *module);

static void rb_mtp_plugin_init (RBMtpPlugin *plugin);

#if defined(HAVE_GUDEV)
static RBSource* create_source_device_cb (RBRemovableMediaManager *rmm, GObject *device, RBMtpPlugin *plugin);
#else
static void rb_mtp_plugin_maybe_add_source (RBMtpPlugin *plugin, const char *udi, LIBMTP_raw_device_t *raw_devices, int num);
static void rb_mtp_plugin_device_added (LibHalContext *context, const char *udi);
static void rb_mtp_plugin_device_removed (LibHalContext *context, const char *udi);
static gboolean rb_mtp_plugin_setup_dbus_hal_connection (RBMtpPlugin *plugin);
#endif

GType rb_mtp_src_get_type (void);
GType rb_mtp_sink_get_type (void);
Expand All @@ -121,19 +102,13 @@ impl_activate (PeasActivatable *bplugin)
RBMtpPlugin *plugin = RB_MTP_PLUGIN (bplugin);
RBRemovableMediaManager *rmm;
RBShell *shell;
#if defined(HAVE_GUDEV)
gboolean rmm_scanned = FALSE;
#else
int num_mtp_devices;
LIBMTP_raw_device_t *mtp_devices;
#endif

g_object_get (plugin, "object", &shell, NULL);
g_object_get (shell, "removable-media-manager", &rmm, NULL);
g_object_unref (shell);

/* device detection */
#if defined(HAVE_GUDEV)
plugin->create_device_source_id =
g_signal_connect_object (rmm,
"create-source-device",
Expand All @@ -145,34 +120,6 @@ impl_activate (PeasActivatable *bplugin)
g_object_get (rmm, "scanned", &rmm_scanned, NULL);
if (rmm_scanned)
rb_removable_media_manager_scan (rmm);
#else
if (rb_mtp_plugin_setup_dbus_hal_connection (plugin) == FALSE) {
rb_debug ("not scanning for MTP devices because we couldn't get a HAL context");
g_object_unref (rmm);
return;
}

rb_profile_start ("scanning for MTP devices");
LIBMTP_Detect_Raw_Devices (&mtp_devices, &num_mtp_devices);
if (num_mtp_devices > 0) {
int num_hal_devices;
char **hal_devices;
int i;

rb_debug ("%d MTP devices found", num_mtp_devices);

hal_devices = libhal_get_all_devices (plugin->hal_context, &num_hal_devices, NULL);
for (i = 0; i < num_hal_devices; i++) {
/* should narrow this down a bit - usb only, for a start */
rb_mtp_plugin_maybe_add_source (plugin, hal_devices[i], mtp_devices, num_mtp_devices);
}
libhal_free_string_array (hal_devices);
}
if (mtp_devices != NULL) {
free (mtp_devices);
}
rb_profile_end ("scanning for MTP devices");
#endif

g_object_unref (rmm);
}
Expand All @@ -193,31 +140,13 @@ impl_deactivate (PeasActivatable *bplugin)
g_list_free (plugin->mtp_sources);
plugin->mtp_sources = NULL;

#if defined(HAVE_GUDEV)
g_signal_handler_disconnect (rmm, plugin->create_device_source_id);
plugin->create_device_source_id = 0;
#else
if (plugin->hal_context != NULL) {
DBusError error;
dbus_error_init (&error);
libhal_ctx_shutdown (plugin->hal_context, &error);
libhal_ctx_free (plugin->hal_context);
dbus_error_free (&error);

plugin->hal_context = NULL;
}

if (plugin->dbus_connection != NULL) {
dbus_connection_unref (plugin->dbus_connection);
plugin->dbus_connection = NULL;
}
#endif

g_object_unref (rmm);
g_object_unref (shell);
}

#if defined(HAVE_GUDEV)
static void
source_deleted_cb (RBMtpSource *source, RBMtpPlugin *plugin)
{
Expand Down Expand Up @@ -310,130 +239,6 @@ create_source_device_cb (RBRemovableMediaManager *rmm, GObject *device_obj, RBMt
return NULL;
}

#else

static void
source_deleted_cb (RBMtpSource *source, RBMtpPlugin *plugin)
{
plugin->mtp_sources = g_list_remove (plugin->mtp_sources, source);
}

static void
rb_mtp_plugin_maybe_add_source (RBMtpPlugin *plugin, const char *udi, LIBMTP_raw_device_t *raw_devices, int num_raw_devices)
{
int i;
int device_num = 0;
DBusError error;

rb_debug ("checking if UDI %s matches an MTP device", udi);

/* get device number */
dbus_error_init (&error);
device_num = libhal_device_get_property_int (plugin->hal_context, udi, "usb.linux.device_number", &error);
if (dbus_error_is_set (&error)) {
rb_debug ("unable to get USB device number: %s", error.message);
dbus_error_free (&error);
return;
}

rb_debug ("USB device number: %d", device_num);

for (i = 0; i < num_raw_devices; i++) {
rb_debug ("detected MTP device: device number %d (bus location %u)", raw_devices[i].devnum, raw_devices[i].bus_location);
if (raw_devices[i].devnum == device_num) {
RBSource *source;
RBShell *shell;

rb_debug ("device matched, creating a source");
g_object_get (plugin, "object", &shell, NULL);
source = RB_SOURCE (rb_mtp_source_new (shell, G_OBJECT (plugin), udi, &raw_devices[i]));

rb_shell_append_display_page (shell, RB_DISPLAY_PAGE (source), RB_DISPLAY_PAGE_GROUP_DEVICES);
plugin->mtp_sources = g_list_prepend (plugin->mtp_sources, source);
g_signal_connect_object (source,
"deleted", G_CALLBACK (source_deleted_cb),
plugin, 0);
g_object_unref (shell);
}
}
}

static void
rb_mtp_plugin_device_added (LibHalContext *context, const char *udi)
{
RBMtpPlugin *plugin = (RBMtpPlugin *) libhal_ctx_get_user_data (context);
LIBMTP_raw_device_t *mtp_devices;
int num_mtp_devices;

LIBMTP_Detect_Raw_Devices (&mtp_devices, &num_mtp_devices);
if (mtp_devices != NULL) {
rb_mtp_plugin_maybe_add_source (plugin, udi, mtp_devices, num_mtp_devices);
free (mtp_devices);
}
}

static void
rb_mtp_plugin_device_removed (LibHalContext *context, const char *udi)
{
RBMtpPlugin *plugin = (RBMtpPlugin *) libhal_ctx_get_user_data (context);
GList *list = plugin->mtp_sources;
GList *tmp;

for (tmp = list; tmp != NULL; tmp = tmp->next) {
RBSource *source = (RBSource *)tmp->data;
char *source_udi;

g_object_get (source, "udi", &source_udi, NULL);
if (strcmp (udi, source_udi) == 0) {
rb_debug ("removing device %s, %p", udi, source);
plugin->mtp_sources = g_list_remove (plugin->mtp_sources, source);
rb_display_page_delete_thyself (RB_DISPLAY_PAGE (source));
}
g_free (source_udi);
}
}

static gboolean
rb_mtp_plugin_setup_dbus_hal_connection (RBMtpPlugin *plugin)
{
DBusError error;

dbus_error_init (&error);
plugin->dbus_connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error);
if (plugin->dbus_connection == NULL) {
rb_debug ("error: dbus_bus_get: %s: %s\n", error.name, error.message);
dbus_error_free (&error);
return FALSE;
}

dbus_connection_setup_with_g_main (plugin->dbus_connection, NULL);

rb_debug ("connected to: %s", dbus_bus_get_unique_name (plugin->dbus_connection));

plugin->hal_context = libhal_ctx_new ();
if (plugin->hal_context == NULL) {
dbus_error_free (&error);
return FALSE;
}
libhal_ctx_set_dbus_connection (plugin->hal_context, plugin->dbus_connection);

libhal_ctx_set_user_data (plugin->hal_context, (void *)plugin);
libhal_ctx_set_device_added (plugin->hal_context, rb_mtp_plugin_device_added);
libhal_ctx_set_device_removed (plugin->hal_context, rb_mtp_plugin_device_removed);
libhal_device_property_watch_all (plugin->hal_context, &error);

if (!libhal_ctx_init (plugin->hal_context, &error)) {
rb_debug ("error: libhal_ctx_init: %s: %s\n", error.name, error.message);
dbus_error_free (&error);
return FALSE;
}

dbus_error_free (&error);
return TRUE;
}

#endif

G_MODULE_EXPORT void
peas_register_types (PeasObjectModule *module)
{
Expand Down

0 comments on commit ce78295

Please sign in to comment.