summaryrefslogtreecommitdiffstats
path: root/lib/MDV/Snapshot/Hal.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/MDV/Snapshot/Hal.pm')
-rwxr-xr-xlib/MDV/Snapshot/Hal.pm60
1 files changed, 60 insertions, 0 deletions
diff --git a/lib/MDV/Snapshot/Hal.pm b/lib/MDV/Snapshot/Hal.pm
new file mode 100755
index 0000000..374f771
--- /dev/null
+++ b/lib/MDV/Snapshot/Hal.pm
@@ -0,0 +1,60 @@
+package MDV::Snapshot::Hal;
+
+################################################################################
+# Backup Configuration Tool #
+# #
+# Copyright (C) 2008 Mandriva #
+# #
+# Thierry Vignaud <tvignaud at mandriva dot com> #
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License Version 2 as #
+# published by the Free Software Foundation. #
+# #
+# This program is distributed in the hope that it will be useful, #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+# GNU General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this program; if not, write to the Free Software #
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #
+################################################################################
+
+
+use strict;
+use lib qw(/usr/lib/libDrakX);
+use MDK::Common;
+use dbus_object;
+
+use Exporter;
+our @ISA = qw(Exporter);
+our @EXPORT = qw($hal_dn $hal_manager $manager_path find_removable_volumes get_system_bus is_proper_device);
+
+our $hal_dn = 'org.freedesktop.Hal';
+our $hal_manager = "$hal_dn.Manager";
+our $manager_path = '/org/freedesktop/Hal/Manager';
+
+sub get_system_bus() {
+ eval { dbus_object::system_bus() };
+}
+
+
+sub is_proper_device {
+ my ($device, $o_is_first_check) = @_;
+ my $device_name = $device->QueryCapability('block') && $device->GetProperty('block.device');
+ return if !$device_name;
+ my $bool = $device->QueryCapability('volume') && !$device->GetProperty('volume.is_disc') &&
+ $device->GetProperty('volume.is_mounted');
+ return $o_is_first_check ? $bool && $device_name && cat_('/media/.hal-mtab') =~ m!^$device_name\s!sg : $bool;
+}
+
+sub find_removable_volumes {
+ my ($dbus) = @_;
+ my $hal = $dbus->get_service($hal_dn);
+ my $manager = $hal->get_object($manager_path, $hal_manager);
+
+ grep { is_proper_device($_, 1) } map { $hal->get_object($_, "$hal_dn.Device") } @{$manager->GetAllDevices};
+}
+
+1;