diff options
-rw-r--r-- | linux.c | 14 | ||||
-rw-r--r-- | macos.c | 12 | ||||
-rw-r--r-- | qt-ui/downloadfromdivecomputer.cpp | 1 | ||||
-rw-r--r-- | windows.c | 7 |
4 files changed, 23 insertions, 11 deletions
@@ -51,7 +51,7 @@ const char *system_default_filename(void) int enumerate_devices(device_callback_t callback, void *userdata, int dc_type) { - int index = -1; + int index = -1, entries = 0; DIR *dp = NULL; struct dirent *ep = NULL; size_t i; @@ -85,7 +85,8 @@ int enumerate_devices(device_callback_t callback, void *userdata, int dc_type) } callback(filename, userdata); if (is_default_dive_computer_device(filename)) - index = i; + index = entries; + entries++; break; } } @@ -93,6 +94,7 @@ int enumerate_devices(device_callback_t callback, void *userdata, int dc_type) closedir(dp); } if (dc_type != DC_TYPE_SERIAL) { + int num_uemis = 0; file = fopen("/proc/mounts", "r"); if (file == NULL) return index; @@ -114,14 +116,16 @@ int enumerate_devices(device_callback_t callback, void *userdata, int dc_type) callback(fname, userdata); if (is_default_dive_computer_device(fname)) - index = i; - i++; + index = entries; + entries++; + num_uemis++; free((void *)fname); } } - free(line); fclose(file); + if (num_uemis == 1 && entries == 1) /* if we found only one and it's a mounted Uemis, pick it */ + index = 0; } return index; } @@ -47,7 +47,7 @@ const char *system_default_filename(void) int enumerate_devices(device_callback_t callback, void *userdata, int dc_type) { - int index = -1; + int index = -1, entries = 0; DIR *dp = NULL; struct dirent *ep = NULL; size_t i; @@ -75,7 +75,8 @@ int enumerate_devices(device_callback_t callback, void *userdata, int dc_type) } callback(filename, userdata); if (is_default_dive_computer_device(filename)) - index = i; + index = entries; + entries++; break; } } @@ -84,6 +85,7 @@ int enumerate_devices(device_callback_t callback, void *userdata, int dc_type) } if (dc_type != DC_TYPE_SERIAL) { const char *dirname = "/Volumes"; + int num_uemis = 0; dp = opendir(dirname); if (dp == NULL) { return -1; @@ -99,11 +101,15 @@ int enumerate_devices(device_callback_t callback, void *userdata, int dc_type) } callback(filename, userdata); if (is_default_dive_computer_device(filename)) - index = i; + index = entries; + entries++; + num_uemis++; break; } } closedir(dp); + if (num_uemis == 1 && entries == 1) /* if we find exactly one entry and that's a Uemis, select it */ + index = 0; } return index; } diff --git a/qt-ui/downloadfromdivecomputer.cpp b/qt-ui/downloadfromdivecomputer.cpp index 0347932d5..8c0f81aa5 100644 --- a/qt-ui/downloadfromdivecomputer.cpp +++ b/qt-ui/downloadfromdivecomputer.cpp @@ -56,7 +56,6 @@ DownloadFromDCWidget::DownloadFromDCWidget(QWidget *parent, Qt::WindowFlags f) : progress_bar_text = ""; - fill_device_list(DC_TYPE_OTHER); fill_computer_list(); ui.chooseDumpFile->setEnabled(ui.dumpToFile->isChecked()); @@ -90,6 +90,7 @@ int enumerate_devices(device_callback_t callback, void *userdata, int dc_type) } if (dc_type != DC_TYPE_SERIAL) { int i; + int count_drives = 0; const int bufdef = 512; const char *dlabels[] = {"UEMISSDA", NULL}; char bufname[bufdef], bufval[bufdef], *p; @@ -110,12 +111,14 @@ int enumerate_devices(device_callback_t callback, void *userdata, int dc_type) snprintf(data, sizeof(data), "%s (%s)", p, dlabels[i]); callback(data, userdata); if (is_default_dive_computer_device(p)) - index = i; - i++; + index = count_drives; + count_drives++; } } p = &p[strlen(p) + 1]; } + if (count_drives == 1) /* we found exactly one Uemis "drive" */ + index = 0; /* make it the selected "device" */ } } return index; |