summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2018-12-11Invalidate git cache when removing dive from tripGravatar Robert C. Helling
... otherwise this change is not saved when saving to git. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-12-06Dive list: fix off-by-two bug in DiveTripModelGravatar Berthold Stoeger
Commit 911edfca712a046944de6d033cc4b8dd50cedfc3 changed the dive list on desktop to update positions of trips when adding/removing dives. A very unlikely case, but necessary for consistency. For a trip to be moveable down, its index has to be one-less than the maximum index, which is "items - 1". The code was doubly wrong: it forget the "1" and checked for less-or-equal instead less-than. Thus this was effectively an off-by-two error. Fix it. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-12-06Android build: explicitly install using sdkmanagerGravatar Jan Mulder
Make sure all required Android SDK components are explicitly installed before starting the actual build. Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
2018-12-06Android build: buildtools version is automatically detectedGravatar Jan Mulder
With commit 0d8fc7ef970e of qt-android-cmake, the buildtools version is automatically detected. So do not try to pass it any more, as this breaks the build. Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
2018-11-24Cleanup: remove EMPTY_DIVE_STRINGGravatar Berthold Stoeger
EMPTY_DIVE_STRING used to be a string-literal representing missing information ("--"). In 6985c123d412d3223618247e2fcc733cd99bb842 it was replaced by the actual empty string. Using a literal to represent the empty string seems a bit pointless, therefore remove it completely. Notably: QString(EMPTY_DIVE_STRING) -> QString() if (temp.isEmpty()) temp = EMPTY_DIVE_STRING; -> noop if (s == EMPTY_DIVE_STRING) -> if (s.isEmpty()) Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-23Cleanup: remove redundant 'extern "C"' in dive.hGravatar Berthold Stoeger
In dive.h there was a redundant 'extern "C"' block defined inside another 'extern "C"' block. Remove. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-23Filter: use hidden_by_filter also on mobileGravatar Berthold Stoeger
Desktop used the hidden_in_filter flag in struct dive, mobile used its own vector plus a new showndives member in struct dive_trip. Unifiy these to use the same core-facility, viz. hidden_by_filter. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-23Core: move is-single-day-trip and count-shown functions into coreGravatar Berthold Stoeger
These functionality was used by the desktop filter. To unify desktop and mobile, move it into two new functions in divelist.c Since one of them is the only caller of is_same_day() move that likewise into divelist.c and make it of static linkage. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-23Mobile: don't format trip heading for all divesGravatar Berthold Stoeger
QML's ListView uses the "section" property to test if items belong to the same section. Apparently, this must be a string and therefore we can't pass e.g. a dive-trip object. Therefore a specially formatted string was passed in, which was guaranteed to be unique (contained the dive-trip pointer value) and the fully formatted trip-title and short-date. The disadvantage of that approach is that the formatting is performed for every dive and not every trip. Perhaps not a problem now, but it makes it for example necessary to cache the number of filtered dives. To be more flexible, pass in only the pointer value formatted as hexadecimal string and provide a function to convert that string back to a trip-pointer (in the form of a QVariant, so that it can be passed to QML). Moreover provide two functions for formatting the title and the short-date. The three new functions are members of DiveListSortModel. This might not be the perfect place, but it is easy to reach from the DiveListView. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-23Cleanup: remove DiveObjectHelper::trip() functionGravatar Berthold Stoeger
The DiveObjectHelper::trip() function was 1) Misnamed: it returned the *location* of the trip 2) Not used outside of DiveObjectHelper Remove it. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-23Cleanup: make "struct dive *" and "struct dive_trip *" Qt metatypesGravatar Berthold Stoeger
Just as we did for pointer to struct dive_site, make pointers to struct dive and struct dive_trip "Qt metatypes". This means that they can be passed through QVariants without taking a detour via void *. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-22Improve OTU calculationsGravatar willemferguson
Implement the protocol in Erik Baker's document "Oxygen Toxicity Calculations". This code uses a third-order polynomial approximation of Baker's equation 2. Provision is made for PSCR and CCR dive logs and dive plans. In the case of dive logs, the values of o2 sensors are used if there are data from such sensors. For CCR only the data from the first O2 sensor is used even if there are more than one sensor. This is a potential weakness, but this function is probably NOT the place to calculate mean o2 values accross all sensors and to emulate voting logic to reject info from aberrant sensors. Signed-off-by: willemferguson <willemferguson@zoology.up.ac.za> Signed-off-by: Robert C. Helling <helling@atdotde.de>
2018-11-21Git parser: don't produce user-visible error on git parsingGravatar Berthold Stoeger
In 64e6e435f82801f4f440ef5b1caf58a91a7c9929 the when field of struct trip was removed. Accordingly it was not read from git repositories. This produced a large amount of user-visible error messages. Reinstate the trip-date and time parsing functions, but ignore the value. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-21Core: fix crash concerning removal of dives from tripsGravatar Berthold Stoeger
Commit 6b283e598a3a08c6133d66b5d5617370296e7d0e replaced the linked list of dives in a trip by a table. Embarassingly, on dive deletion the index of the dive in the table was compared for "!= 0" instead of ">= 0". Thus, the first dive of a trip wouldn't be deleted, which ultimately led to a crash, as different parts of the code were now in disagreement over whether the trip is empty or not. Fix the comparison. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-21Desktop: don't refresh display on autogroupGravatar Berthold Stoeger
The whole point of the undo-command system is that the divelist doesn't have to be refreshed. Therefore, don't do it for autogrouping / deautogrouping. Moreover, the divelist-changed flag is also set by the command and doesn't have to be set explicitly. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-20Core: replace tripflag by notrip booleanGravatar Berthold Stoeger
The only remaining use of the tripflag was to mark dives that were removed explicitly from a trip, i.e. shouldn't be autogrouped. Therefore replace the enum by a simple boolean. Currently, there is no way of unsetting the notrip flag. But this shouldn't result in a user-visible change. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-20Core: remove ASSIGNED_TRIP trip flagGravatar Berthold Stoeger
The distinction between ASSIGNED_TRIP and IN_TRIP was used to prefer non-autogenerated trips on merging of dives. But owing to bit rot this seem to have worked only partially anyway: The IN_TRIP field was set in create_and_hookup_trip_from_dive() and immediately overwritten in add_dive_to_trip() called in the next line. Instead, use the trip->autogen flag to check for priority and remove the ASSIGNED_TRIP flag alltogether. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-20Core: remove two unused macrosGravatar Berthold Stoeger
The UNGROUPED_DIVE and DIVE_IN_TRIP were never used. Remove them. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-19Uemis downloader: free ans_path on errorGravatar Berthold Stoeger
In a few instances, the ans_path was not freed on error. Fix them. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-19Warnings: replace memcpy by assignmentGravatar Berthold Stoeger
New gcc (v8.2) complains about memcpy()ing an object with non-POD members. Even though this seems not to be an issue for template_options, the warning has some merrit. The compiler will recognize when to do a memcpy() anyway. Moreover, the assignment is easier to read and also more secure, as a-priory we can't know if Qt's QColor copy-constructor does some strange things (hopefully not). Thus, replace memcpy() by simple assignment. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-19Warnings: silence new gcc warnings in uemis-downloader.cGravatar Berthold Stoeger
Since upgrading to gcc 8.2 it produces noisy warnings about potentially truncated strings. It doesn't recognize that filenr can never become >4000. So clamp it down explicitly. Do this by adding a function that does the assembly of the filename path. Adding unnecessary code to silence compiler warnings is dubious, but in this case it might be reasonable. Fix a second instance by increasing the stack-allocated buffer to 32 bytes. Hopefully nobody has more divespots than would fit in a 9-decimal digit number! Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-18Parser: add dive to trip at end of dive-parsingGravatar Berthold Stoeger
When adding the dive to its trip before having filled out "when", the dive gets added at the first position (when=0), which is usually not correct. Instead, add the dive to its trip when all fields are correctly filled out. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-18Dive list: update position of trip if data changedGravatar Berthold Stoeger
If the date of a dive changed, it might be necessary to reorder the trips, as the date of the trip changed. Although this seems like an odd usecase, move the trip if necessary, for consistency's sake. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-18Core: remove "when" field of struct dive_tripGravatar Berthold Stoeger
The when field gives the time of the first dive. Instead of keeping this field in sync, replace it by a function that determines the time of the first dive. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-18Coding style: fix indentation in addDivesToTrip()Gravatar Berthold Stoeger
addDivesToTrip() had one level of indentation too much owing to a copy-and-paste error. Remove. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-18Dive list: move sort-functionality into coreGravatar Berthold Stoeger
To make sorting more controlled, move all sorting functions into the core. For this, introduce a "dive_or_trip" structure, which represents a top-level item. Adapt the DiveTripModel accordingly. There are now three sorting functions: 1) dive_less_than 2) trip_less_than 3) dive_or_trip_less_than These should be used by all sorting code. By moving them to a single place, the mess can hopefully be cleaned up. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-18Dive list: keep dives-in-trip list ordered after shift-timesGravatar Berthold Stoeger
On shift-times, the list of dives in a trip may become disordered. Reestablish order with sort_table(). Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-18Dive list: implement trip_less_than functionGravatar Berthold Stoeger
As a step towards proper sorting, introduce a trip_less_than() function in core. It simply sorts by the first dive, which should be unique as dives may belong to only one trip. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-18Dive list: replace dive-list of trips by a tableGravatar Berthold Stoeger
The dives of each trip were kept in a list. Replace this by a struct dive_table. This will make it significantly easier to keep the dives of a trip in sorted state. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-18Core: add add_dive_to_table() functionGravatar Berthold Stoeger
Up to now, dives were added to the global dive table with add_single_dive(). Split out the funtionality to add a dive to an arbitrary dive in the add_dive_to_table_function(). The difference compared to record_dive_to_table is that dives are added at a specific position or the sort-criterion given by dive_less_than(). This will allow to use a dive tabe for trips instead of a linked list. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-18Core: unify insert_trip() and insert_trip_dont_merge()Gravatar Berthold Stoeger
There were two versions of the insert_trip() function: one would merge trips if a trip with the same date already existed, the other wouldn't. The latter was introduced with the dive-list undo work. The problem is that the "date" of a trip (i.e. the first dive) seems ill-defined as this is a volatile value. Moreover in the context of making dive-import undoable this is a very dangerous notion, as the caller needs control over when the dives are added to a trip. Therefore, unify these two functions and never merge trips. The decision on merging dives now has to made by the caller. This will be implemented in a future commit. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-18Fix Cressi interface ftdi opening bugGravatar Daniel Krupp
The Cressi specific PID was not used when serial_ftdi_open_device tried to open the device. Reported-by: Daniel Krupp Signed-off-by: Daniel Krupp <daniel.krupp@gmail.com>
2018-11-18Mobile: visual indication for copy and paste operationsGravatar Miika Turkia
Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
2018-11-18Mobile manual: section about copy-pasteGravatar Miika Turkia
Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
2018-11-18Add symlink for Documentation/mobile-imagesGravatar Miika Turkia
Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
2018-11-18Changleog entry for mobile copy-pasteGravatar Miika Turkia
Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
2018-11-18Mark cache invalid to get data savedGravatar Miika Turkia
Seems that we need to invalidate the cache to get the modifications actually saved. Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
2018-11-18delete-copy-paste buttons layed out properlyGravatar Miika Turkia
Now these buttons are finally shown with long press and seem to be working more-or-less as intended. Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
2018-11-18Verify that copy is doneGravatar Miika Turkia
Naturally the paste button should be disabled, if this is the case, but it still makes sense to do this check. Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
2018-11-18Support for copy-pasting specific fields on mobileGravatar Miika Turkia
Initial implementation/prototype of copy-paste support for Subsurface-mobile. The UI part is really lacking; right now the copy button is initially visible and paste is achieved by long press on a dive and clicking the paste button when it appears. Delete is currently not possible at all, as I just failed to layout the buttons properly using QML. It just sounds so simple, to put all the copy-paste-delete buttons next to each other... The data to be copied is currently hard-coded. A dialog to choose inteded fields would be nice, but it'll take quite a bit effort to get used to QML enough to be able to hack something together. Anyway, this seems to work, even though the UI is not always reflecting the paste without switching dives (when testing on laptop). Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
2018-11-16Dive list: use dive trip time as additional sort criterionGravatar Berthold Stoeger
The DiveTripModel places dives after trips in chronologically ascending mode if the dive and the trip start at the same instant. But in the core the sort order was undefined. This could lead to a discrepancy. Therefore, implement the same sort-criterion in the core code. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-16Dive list: invert sort-direction to reflect coreGravatar Berthold Stoeger
Traditionally, the DiveTripModel has its data sorted in opposite direction to the core-data (chronologically descending vs. ascending). This bring a number of subtle problems. For example, when filling the model, trips are filled according to the *last* dive, whereas later insertion points are according to the ->when value from the core, which depends on the *first* dive. As a start of fixing these subtleties, change the sort direction to reflect the core-data. Ideally, this should lead to a removal of the redundant data-representation. Since the model is now sorted in ascending order, sorting has to be enabled in the DiveListView constructor to reflect the default-descending order. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-16More accurate CNS calculations (following comments on github)Gravatar willemferguson
Update table of maximum oxygen exposure durations, used in CNS calulations. This table shows the official NOAA maximum O2 exposure limits (in seconds) for different PO2 values. It also gives slope values for linear interpolation for intermediate PO2 values between the tabulated PO2 values in the 1st column. Top & bottom rows are inserted that are not in the NOAA table: (1) For PO2 > 1.6 the same slope value as between 1.5 & 1.6 is used. This exptrapolation for PO2 > 1.6 likely gives an underestimate above 1.6 but is better than the value for PO2=1.6 (45 min). (2) The NOAA table only tabulates values for PO2 >= 0.6. Since O2-uptake occurs down to PO2=0.5, the same slope is used as for 0.7 > PO2 > 0.6. This gives a conservative estimate for 0.6 > PO2 > 0.5. To preserve the integer structure of the table, all slopes are given as slope*10: divide by 10 to get the valid slope. The columns below are: po2 (mbar), Maximum Single Exposure (seconds), single_slope, Maximum 24 hour Exposure (seconds), 24h_slope */ Then update Calculations of the CNS for a single dive - this only takes the first divecomputer into account. The previous version of the code did a table lookup and used the max O2 exposure for the next-higher PO2 category. This gave a shorter max O2 exposure time and a higher CNS contribution for a specific dive segment, resulting in a slightly conservative value of CNS, often some 2 - 3 % too high. This code does an interpolation for PO2 values inbetween PO2 entries in the lookup table and therefore results in a more accurate maximum O2 exposure time for that PO2. The maximum O2 exposure duration for each segment is also calculated based on the mean depth of the two samples (start & end) that define each segment. The CNS contribution of each segment is found by dividing the time duration of the segment by its maximum exposure duration. The contributions of all segments of the dive are summed to get the total CNS% value. This is a partial implementation of the proposals in Erik Baker's document "Oxygen Toxicity Calculations" */ Overall, this PR does not radically alter the existing CNS calculation, it only makes it more accurate and more consistent by doing interpolation and by using mean segment depth to find PO2. Signed-off-by: willemferguson <willemferguson@zoology.up.ac.za>
2018-11-16Dive list: correctly translate trip dateGravatar Berthold Stoeger
Adapt get_trip_date_string() to use the same logic as get_dive_date_string(): Use the static "loc" object to translate date. Before, the trip date was shown in C locale. Reported-by: Philippe Massart <philippe@philmassart.net> Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-11-15Update README and ReleaseNotes for 4.8.4v4.8.4Gravatar Dirk Hohndel
Trim back CHANGELOG Add entry for recent fix for multiple dive master in mobile. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2018-11-15Latest translationsGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2018-11-15Update list of supported dive computersGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2018-11-15Update libdivecomputerGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2018-11-15Mobile: Allow multiple divemastersGravatar Jocke
While not something that many will use, editing a dive on Subsurface-mobile should not result in data loss. This makes the divemaster field behave in the same way as the buddy field with regards to multiple entries. Fixes #1853 Signed-off-by: Joakim Bygdell <j.bygdell@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2018-11-14MXE: respect an MXE build type already definedGravatar Dirk Hohndel
And use that to have our Travis build still work with the existing MXE build container as well as the even older, pre-compiled MXE binaries used in the windows build. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>