summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2011-10-24 21:24:00 +0100
committerdakkar <dakkar@thenautilus.net>2011-10-24 21:24:00 +0100
commit4ce0ed4b826b351f1f25918c3c3f16cdcf187699 (patch)
tree6482fb171da2b56d2c721c0a54ebcd0ce60ef318
parentuse udisks instead of HAL (diff)
downloadhal-automounter-4ce0ed4b826b351f1f25918c3c3f16cdcf187699.tar.gz
hal-automounter-4ce0ed4b826b351f1f25918c3c3f16cdcf187699.tar.bz2
hal-automounter-4ce0ed4b826b351f1f25918c3c3f16cdcf187699.zip
make it work with optical drives
and other things that change their "media available" bit instead of being added / removed
-rwxr-xr-xhal-automounter.pl37
1 files changed, 27 insertions, 10 deletions
diff --git a/hal-automounter.pl b/hal-automounter.pl
index b26f998..d8c8b4e 100755
--- a/hal-automounter.pl
+++ b/hal-automounter.pl
@@ -106,15 +106,16 @@ sub safe_get_property {
}
sub device_added {
- my $dev=$udisks->get_object($_[0],'org.freedesktop.UDisks.Device');
+ my ($node,$dev) = @_;
+ $dev ||= $udisks->get_object($node,'org.freedesktop.UDisks.Device');
return unless safe_get_property($dev,'IdUsage') eq 'filesystem';
#return unless safe_get_property($dev,'DeviceIsRemovable');
return unless safe_get_property($dev,'DeviceIsMediaAvailable');
return if safe_get_property($dev,'DeviceIsMounted');
- return if exists $mounted{$_[0]};
+ return if exists $mounted{$node};
my $uuid=safe_get_property($dev,'IdUuid');
my $dev_path=safe_get_property($dev,'DeviceFile')
@@ -122,7 +123,7 @@ sub device_added {
|| 'unknown';
if ($dev_path eq 'unknown') {
- warn "unknown path for $_[0]\n";
+ warn "unknown path for $node\n";
return;
}
@@ -142,7 +143,7 @@ sub device_added {
$mountpoint=$manual_mountpoint if defined $manual_mountpoint;
- $mounted{$_[0]}=$mountpoint;
+ $mounted{$node}=$mountpoint;
mkdir $mountpoint;
chown -1,scalar(getgrnam('plugdev')),$mountpoint;
chmod 0775,$mountpoint;
@@ -151,23 +152,39 @@ sub device_added {
}
sub device_removed {
- if (exists $mounted{$_[0]}) {
- system('umount',$mounted{$_[0]});
- if (remove_from_fstab($mounted{$_[0]})) {
- rmdir $mounted{$_[0]};
+ my ($node,$dev) = @_;
+
+ if (exists $mounted{$node}) {
+ system('umount',$mounted{$node});
+ if (remove_from_fstab($mounted{$node})) {
+ rmdir $mounted{$node};
}
- delete $mounted{$_[0]};
+ delete $mounted{$node};
}
return;
}
+sub device_changed {
+ my ($node) = @_;
+
+ my $dev=$udisks->get_object($node,'org.freedesktop.UDisks.Device');
+ my $has_media = safe_get_property($dev,'DeviceIsMediaAvailable');
+
+ if ($has_media) {
+ device_added($node,$dev);
+ }
+ else {
+ device_removed($node,$dev);
+ }
+}
+
my $reactor=Net::DBus::Reactor->main();
my $manager = $udisks->get_object('/org/freedesktop/UDisks',
'org.freedesktop.UDisks');
$manager->connect_to_signal('DeviceAdded',\&device_added);
-$manager->connect_to_signal('DeviceChanged',\&device_added);
+$manager->connect_to_signal('DeviceChanged',\&device_changed);
$manager->connect_to_signal('DeviceRemoved',\&device_removed);
$reactor->run();