View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000325 | Double Commander | File operations | public | 2012-02-07 14:02 | 2014-01-14 22:52 |
Reporter | Vaka2 | Assigned To | Alexx2000 | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Projection | none | ETA | none | ||
Product Version | 0.6.0 (trunk) | Product Build | 4282 | ||
Target Version | 0.5.5 | Fixed in Version | 0.5.5 | ||
Summary | 0000325: Внесите патч для uam | ||||
Description | подробнее тут http://doublecmd.sourceforge.net/forum/viewtopic.php?f=10&t=1194 Если на компе нету udisks, а вместо них используется uam и pmount. Патч немного костыльный.. но уж лучше пока так.. вот сам патч для версии 0.5.5 4282 | ||||
Tags | No tags attached. | ||||
Attached Files | udrivewatcher.pas.patch (2,676 bytes)
--- ./udrivewatcher.pas 2012-02-07 09:53:25.000000000 +0400 +++ ./udrivewatcher.pas 2012-02-07 12:30:39.000000000 +0400 @@ -708,6 +708,7 @@ DeviceFile: String; MountPoint: String; HandledByUDisks: Boolean = False; + HaveUAM: Boolean = False; begin Result := TDrivesList.Create; try @@ -717,6 +718,9 @@ if IsUDisksAvailable then HaveUDisksDevices := uUDisks.EnumerateDevices(UDisksDevices); + // fix me. If uam installed, usb and mmc mounted automatic. + HaveUAM := (fpSystemStatus('stat -c %s /lib/udev/uam/find-helper.sh > /dev/null') = 0); + // Storage devices have to be in fstab or mtab and reported by UDisks. for I:= Low(MntEntFileList) to High(MntEntFileList) do begin @@ -795,12 +799,27 @@ DriveLabel := Path; FileSystem := StrPas(pme^.mnt_type); - if IsPartOfString(['ISO9660', 'CDROM', 'CDRW', 'DVD'], UpperCase(FileSystem)) then + IsMounted:= False; // Checked via mtab below. + if IsPartOfString(['ISO9660', 'CDROM', 'CDRW', 'DVD'], UpperCase(FileSystem)) then // for external usb cdrom and dvd + begin + DriveType := dtOptical; + if HaveUAM then + IsMounted:= True; + end else + if IsPartOfString(['ISO9660', 'CDROM', 'CDRW', 'DVD'], UpperCase(DeviceFile)) then DriveType := dtOptical else if IsPartOfString(['FLOPPY'], UpperCase(FileSystem)) then DriveType := dtFloppy else + if IsPartOfString(['FLOPPY', '/DEV/FD'], UpperCase(DeviceFile)) then + DriveType := dtFloppy else if IsPartOfString(['ZIP', 'USB', 'CAMERA'], UpperCase(FileSystem)) then DriveType := dtFlash else + if IsPartOfString(['/MEDIA/'], UpperCase(MountPoint)) then + begin + DriveType := dtFlash; + if HaveUAM then + IsMounted:= True; + end else if IsPartOfString(['NFS', 'SMB', 'NETW', 'CIFS'], UpperCase(FileSystem)) then DriveType := dtNetwork else @@ -809,7 +828,6 @@ IsMediaAvailable:= True; IsMediaEjectable:= (DriveType = dtOptical); IsMediaRemovable:= DriveType in [dtFloppy, dtOptical, dtFlash]; - IsMounted:= False; // Checked via mtab below. end; end // Mark drive as mounted if found in mtab. drivewatcher.test.patch (1,965 bytes)
Index: udrivewatcher.pas =================================================================== --- udrivewatcher.pas (revision 4284) +++ udrivewatcher.pas (working copy) @@ -795,12 +795,18 @@ DriveLabel := Path; FileSystem := StrPas(pme^.mnt_type); - if IsPartOfString(['ISO9660', 'CDROM', 'CDRW', 'DVD'], UpperCase(FileSystem)) then + if IsPartOfString(['ISO9660', 'CDROM', 'CDRW', 'DVD'], UpperCase(FileSystem)) then // for external usb cdrom and dvd + DriveType := dtOptical else + if IsPartOfString(['ISO9660', 'CDROM', 'CDRW', 'DVD'], UpperCase(DeviceFile)) then DriveType := dtOptical else if IsPartOfString(['FLOPPY'], UpperCase(FileSystem)) then DriveType := dtFloppy else + if IsPartOfString(['FLOPPY', '/DEV/FD'], UpperCase(DeviceFile)) then + DriveType := dtFloppy else if IsPartOfString(['ZIP', 'USB', 'CAMERA'], UpperCase(FileSystem)) then DriveType := dtFlash else + if IsPartOfString(['/MEDIA/'], UpperCase(MountPoint)) then + DriveType := dtFlash else if IsPartOfString(['NFS', 'SMB', 'NETW', 'CIFS'], UpperCase(FileSystem)) then DriveType := dtNetwork else @@ -809,7 +815,9 @@ IsMediaAvailable:= True; IsMediaEjectable:= (DriveType = dtOptical); IsMediaRemovable:= DriveType in [dtFloppy, dtOptical, dtFlash]; - IsMounted:= False; // Checked via mtab below. + // If drive from /etc/mtab then it is mounted + // else it will be checked via mtab below + IsMounted:= (MntEntFileList[I] = _PATH_MOUNTED); end; end // Mark drive as mounted if found in mtab. | ||||
Fixed in Revision | 4288 | ||||
Operating system | Linux | ||||
Widgetset | |||||
Architecture | |||||
|
Насколько я понимаю uam не обновляет файл /etc/mtab при автомонтировании? |
|
uam прекрасно обновляет mtab при втыкании флешки и монтирует её в /media. а вот dc ищет в массиве Result, который составляется из fstab. // Mark drive as mounted if found in mtab. else if MntEntFileList[I] = _PATH_MOUNTED then begin ExistingDrive := GetDrive(Result, DeviceFile, MountPoint); здесь ExistingDrive пустой. соответственно флешка не помечается как примонтированная, хотя появляется в списке. при нажатии пкм на ней выводится "Смонтировать". можно как-то изменить функцию проверки установки uam, но я не нашел лучшего решения.. |
|
Если mtab обновляется, значит ошибка в текущей реализации, т.к. DC должен корректно определять подключенные и смонтированные устройства на основании записей в fstab и mtab, в не зависимости от используемой системы автомонтирования. А замена строки 812 с IsMounted:= False; на IsMounted:= (MntEntFileList[I] = _PATH_MOUNTED); не решит проблему? |
|
да, так считает, что уже примонтировано. но, 1. при отмонтировании не отмонтируется, пишет : umount: /media/FLASH не примонтирован (согласно mtab) 2. Иконки у дисков стали все одинаковые, как у hd. нужно оставить разбор дисков на dtOptical dtFloppy dtFlash |
|
Попробуйте модифицированную версию патча (drivewatcher.test.patch). Вот только считать диск смонтированный в '/MEDIA/' флешкой не совсем корректно, это может быть и стационарный жесткий диск. |
|
Да, проверил ваш патч. всё в порядке. 1. флешку считает примонтированной. 2. отмонтировывает. 3. иконки какие надо. коммите ! :) |
|
Добавьте ещё 'UDF' в определение дисков . это для Video-DVD чтобы иконка у dvdrom была как у cd, а не у винта. + if IsPartOfString(['ISO9660', 'CDROM', 'CDRW', 'DVD', 'UDF'], UpperCase(FileSystem)) then // for external usb cdrom and dvd |
Date Modified | Username | Field | Change |
---|---|---|---|
2012-02-07 14:02 | Vaka2 | New Issue | |
2012-02-07 14:02 | Vaka2 | File Added: udrivewatcher.pas.patch | |
2012-02-07 15:19 | Alexx2000 | Note Added: 0000343 | |
2012-02-07 15:19 | Alexx2000 | Status | new => feedback |
2012-02-07 16:05 | Vaka2 | Note Added: 0000347 | |
2012-02-07 16:05 | Vaka2 | Status | feedback => new |
2012-02-07 19:12 | Alexx2000 | Note Added: 0000348 | |
2012-02-07 19:12 | Alexx2000 | Assigned To | => Alexx2000 |
2012-02-07 19:12 | Alexx2000 | Status | new => feedback |
2012-02-07 19:54 | Vaka2 | Note Added: 0000351 | |
2012-02-07 19:54 | Vaka2 | Status | feedback => assigned |
2012-02-07 19:55 | Vaka2 | Note Edited: 0000351 | |
2012-02-07 19:58 | Vaka2 | Note Edited: 0000351 | |
2012-02-08 07:56 | Alexx2000 | File Added: drivewatcher.test.patch | |
2012-02-08 07:58 | Alexx2000 | Note Added: 0000352 | |
2012-02-08 07:58 | Alexx2000 | Status | assigned => feedback |
2012-02-08 07:59 | Alexx2000 | Target Version | => 0.5.5 |
2012-02-08 08:44 | Vaka2 | Note Added: 0000354 | |
2012-02-08 08:44 | Vaka2 | Status | feedback => assigned |
2012-02-08 19:36 | Vaka2 | Note Added: 0000358 | |
2012-02-09 07:58 | Alexx2000 | Fixed in Revision | => 4288 |
2012-02-09 07:58 | Alexx2000 | Status | assigned => resolved |
2012-02-09 07:58 | Alexx2000 | Fixed in Version | => 0.5.5 |
2012-02-09 07:58 | Alexx2000 | Resolution | open => fixed |
2014-01-14 22:52 | Alexx2000 | Status | resolved => closed |