aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorpapoteur-mga <yves.brungard_git@gadz.org>2014-05-01 20:55:21 +0200
committerpapoteur-mga <yves.brungard_git@gadz.org>2014-05-01 20:55:21 +0200
commit39db4f37bf7cf560f60629175fb6263f017c3c41 (patch)
treeca84f1b87c3353b2b8b9789ae836c4262fe0b3cb /lib
parentf3d70c61c957dee0cd4ebeb84c0651edced22565 (diff)
downloadisodumper-39db4f37bf7cf560f60629175fb6263f017c3c41.tar
isodumper-39db4f37bf7cf560f60629175fb6263f017c3c41.tar.gz
isodumper-39db4f37bf7cf560f60629175fb6263f017c3c41.tar.bz2
isodumper-39db4f37bf7cf560f60629175fb6263f017c3c41.tar.xz
isodumper-39db4f37bf7cf560f60629175fb6263f017c3c41.zip
Integration of find_devices in the main file.
Diffstat (limited to 'lib')
-rwxr-xr-xlib/isodumper.py41
1 files changed, 33 insertions, 8 deletions
diff --git a/lib/isodumper.py b/lib/isodumper.py
index f125977..e2ae2f5 100755
--- a/lib/isodumper.py
+++ b/lib/isodumper.py
@@ -24,11 +24,35 @@
import gtk
import gtk.glade
import gobject
-from subprocess import Popen,PIPE,call
import os
import io
import gettext
from gettext import gettext as _
+from subprocess import call
+
+def find_devices():
+ import dbus
+ bus = dbus.SystemBus()
+ proxy = bus.get_object("org.freedesktop.UDisks", "/org/freedesktop/UDisks")
+ iface = dbus.Interface(proxy, "org.freedesktop.UDisks")
+ devs=iface.EnumerateDevices()
+ list=[]
+
+ for dev in devs:
+ dev_obj = bus.get_object("org.freedesktop.UDisks", dev)
+ dev = dbus.Interface(dev_obj, "org.freedesktop.DBus.Properties")
+ item=[]
+ if str(dev.Get('', 'DriveConnectionInterface')) == 'usb' and not str(dev.Get('', 'PartitionType')) and str(dev.Get('', 'DeviceIsMediaAvailable')) == '1':
+ vend = str(dev.Get('', 'DriveVendor'))
+ path = str(dev.Get('', 'DeviceFile'))
+ name = str(dev.Get('', 'DriveModel'))
+ size = str(dev.Get('', 'DeviceSize'))
+ item.append(vend+" "+name)
+ item.append(path)
+ item.append(size)
+ list.append(item)
+ print list
+ return list
class IsoDumper:
@@ -93,25 +117,26 @@ class IsoDumper:
self.window.show_all()
# make sure we have a target device
self.get_devices()
+
+
def get_devices(self):
dialog = self.wTree.get_widget("nodev_dialog")
- list = Popen(["/usr/lib/isodumper/find_devices"], stdout=PIPE).communicate()[0]
- while not len(list):
+ list=find_devices()
+ while len(list)==0:
exit_dialog=dialog.run()
- list = Popen(["/usr/lib/isodumper/find_devices"], stdout=PIPE).communicate()[0]
+ list = find_devices()
if (exit_dialog==2) :
dialog.destroy()
exit(0)
self.combo = self.wTree.get_widget("device_combobox")
- list = list.strip().split('\n')
- for item in list:
- name,path,size = item.split(',')
+ for name, path, size in list:
self.deviceSize=size
- # convert in Mbytes
+ # convert in Mbytes
sizeM=str(int(size)/(1024*1024))
self.combo.append_text(name+' ('+path.lstrip()+') '+sizeM+_('Mb'))
dialog.destroy()
+
def device_selected(self, widget):
write_button = self.wTree.get_widget("write_button")
write_button.set_sensitive(True)
ipl">$!"), return $CSADeviceAvailable = 0; log::l("Compaq Smart Array controllers available"); $CSADeviceAvailable = 1; } sub scsiGetDevices { my @drives; my ($driveNum, $cdromNum, $tapeNum) = qw(0 0 0); my $err = sub { chop; log::l("unexpected line in /proc/scsi/scsi: $_"); error() }; local $_; local *F; open F, "/proc/scsi/scsi" or return &$err(); $_ = <F>; /^Attached devices:/ or return &$err(); while ($_ = <F>) { my ($id) = /^Host:.*?Id: (\d+)/ or return &$err(); $_ = <F>; my ($vendor, $model) = /^\s*Vendor:\s*(.*?)\s+Model:\s*(.*?)\s+Rev:/ or return &$err(); $_ = <F>; my ($type) = /^\s*Type:\s*(.*)/ or &$err(); my $device; if ($type =~ /Direct-Access/) { $type = 'hd'; $device = "sd" . chr($driveNum++ + ord('a')); } elsif ($type =~ /Sequential-Access/) { $type = 'tape'; $device = "st" . $tapeNum++; } elsif ($type =~ /CD-ROM/) { $type = 'cdrom'; $device = "scd" . $cdromNum++; } $device and push @drives, { device => $device, type => $type, info => "$vendor $model", id => $id, bus => 0 }; } [ @drives ]; } sub ideGetDevices { my @idi; -r "/proc/ide" or die "sorry, /proc/ide not available, seems like you have a pre-2.2 kernel\n => not handled yet :("; #- Great. 2.2 kernel, things are much easier and less error prone. foreach my $d (glob_('/proc/ide/hd*')) { my ($t) = chomp_(cat_("$d/media")); my $type = ${{ disk => 'hd', cdrom => 'cdrom', tape => 'tape', floppy => 'fd' }}{$t} or next; my ($info) = chomp_(cat_("$d/model")); $info ||= "(none)"; my $num = ord(($d =~ /(.)$/)[0]) - ord 'a'; push @idi, { type => $type, device => basename($d), info => $info, bus => $num/2, id => $num%2 }; } [ @idi ]; } sub CompaqSmartArrayGetDevices { my @idi; my $f; for (my $i = 0; -r ($f = "/proc/array/ida$i"); $i++) { local *F; open F, $f or die; local $_ = <F>; my ($name) = m|ida/(.*?):| or next; push @idi, { device => $name, info => "Compaq RAID logical disk", type => 'hd' }; } [ @idi ]; } sub dac960GetDevices { my @idi; my $file = "/var/log/dmesg"; -r $file or $file = "/tmp/syslog"; local *F; open F, $file or die "Failed to open $file: $!"; #- We are looking for lines of this format:DAC960#0: #- /dev/rd/c0d0: RAID-7, Online, 17928192 blocks, Write Thru0123456790123456789012 foreach (<F>) { my ($devicename, $info) = m|/dev/rd/(.*?): (.*?),| or next; push @idi, { info => $info, type => 'hd', devicename => $devicename }; log::l("DAC960: $devicename: $info"); } [ @idi ]; }