]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Ignore Nitrox/He seetings when editing cylinders for multiple dives
authorDirk Hohndel <dirk@hohndel.org>
Sun, 26 Aug 2012 19:25:51 +0000 (12:25 -0700)
committerDirk Hohndel <dirk@hohndel.org>
Sun, 26 Aug 2012 19:29:58 +0000 (12:29 -0700)
When figuring out which cylinders to change in a multi-dive edit, we
already ignored the beginning and end pressures. But it turns out to make
more sense to also ignore the Nitrox / Helium settings.

Imagine you do a number of dives - for some reason your dive computer
records the wrong cylinder size in the downloaded logfile (like my uemis
does all the time). Dives will likely have different Nitrox percentage,
but you should still be able to simply fix the cylinder size for all dives
at once.

Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
dive.h
equipment.c
info.c

diff --git a/dive.h b/dive.h
index ab854e37e6c6d49bfe43b6533322cd9facd11c4f..f1df0e2258df592b0e97ac23efe970fd3fc03146 100644 (file)
--- a/dive.h
+++ b/dive.h
@@ -95,6 +95,7 @@ typedef struct {
 extern gboolean cylinder_none(void *_data);
 extern gboolean no_cylinders(cylinder_t *cyl);
 extern gboolean cylinders_equal(cylinder_t *cyl1, cylinder_t *cyl2);
+extern void copy_cylinders(cylinder_t *cyl1, cylinder_t *cyl2);
 extern gboolean no_weightsystems(weightsystem_t *ws);
 extern gboolean weightsystems_equal(weightsystem_t *ws1, weightsystem_t *ws2);
 
index 43bb29d593ae6009d81db0e291adf60af2f26a1c..d676fc05d60513469514a7f601161ac0f7eb109a 100644 (file)
@@ -461,13 +461,11 @@ gboolean description_equal(const char *desc1, const char *desc2)
 }
 
 /* when checking for the same cylinder we want the size and description to match
-   but don't compare the start and end pressures */
+   but don't compare the start and end pressures, nor the Nitrox/He values */
 static gboolean one_cylinder_equal(cylinder_t *cyl1, cylinder_t *cyl2)
 {
        return cyl1->type.size.mliter == cyl2->type.size.mliter &&
                cyl1->type.workingpressure.mbar == cyl2->type.workingpressure.mbar &&
-               cyl1->gasmix.o2.permille == cyl2->gasmix.o2.permille &&
-               cyl1->gasmix.he.permille == cyl2->gasmix.he.permille &&
                description_equal(cyl1->type.description, cyl2->type.description);
 }
 
@@ -481,6 +479,21 @@ gboolean cylinders_equal(cylinder_t *cyl1, cylinder_t *cyl2)
        return TRUE;
 }
 
+/* copy size and description of all cylinders from cyl1 to cyl2 */
+void copy_cylinders(cylinder_t *cyl1, cylinder_t *cyl2)
+{
+       int i;
+
+       for (i = 0; i < MAX_CYLINDERS; i++) {
+               cyl2[i].type.size.mliter = cyl1[i].type.size.mliter;
+               cyl2[i].type.workingpressure.mbar = cyl1[i].type.workingpressure.mbar;
+               if (cyl1[i].type.description)
+                       cyl2[i].type.description = strdup(cyl1[i].type.description);
+               else
+                       cyl2[i].type.description = NULL;
+       }
+}
+
 static gboolean weightsystem_none(void *_data)
 {
        weightsystem_t *ws = _data;
diff --git a/info.c b/info.c
index 8db606344e7394ecbe44d5dbc961788d669c0dce..17667a87bfad98f728b114297056a20053f6caf4 100644 (file)
--- a/info.c
+++ b/info.c
@@ -482,7 +482,7 @@ void update_equipment_data(struct dive *dive, struct dive *master)
        if ( ! cylinders_equal(remember_cyl, master->cylinder) &&
                (no_cylinders(dive->cylinder) ||
                        cylinders_equal(dive->cylinder, remember_cyl)))
-               memcpy(dive->cylinder, master->cylinder, CYL_BYTES);
+               copy_cylinders(master->cylinder, dive->cylinder);
        if (! weightsystems_equal(remember_ws, master->weightsystem) &&
                (no_weightsystems(dive->weightsystem) ||
                        weightsystems_equal(dive->weightsystem, remember_ws)))