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 |