summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2019-08-12DiveObjectHelper: warn if object is generated from the null pointerGravatar Berthold Stoeger
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-12DiveObjectHelper: remove default argumentGravatar Berthold Stoeger
We don't support null-dives in DiveObjectHelper. Defaulting the dive parameter to NULL seems to send the wrong message. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-11Add CHANGELOG entry for mobile weight editingGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2019-08-11Mobile: use a default weight name when adding weight systemGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2019-08-11Mobile: support editing of dives with no weightsystemGravatar Berthold Stoeger
If a dive has no weightsystems, editing the weight system has to add a new entry in the table. Implement that. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-11Mobile: properly recognize single-weightsystem divesGravatar Berthold Stoeger
When removing the max-weightsystem restriction, the semantics of the DiveObjectHelper::singleWeightSystem() function changed: it now returned false for "no weightsystem". Change it back, to 0 or 1 weightsystems, because the mobile frontend uses this to check whether it can edit dive systems. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-11Add missing header files to macos.cGravatar Doug Junkins
Missing header files were causing errors opening cloud storage on launch on Mac OSX. Signed-off-by: Doug Junkins <junkins@foghead.com>
2019-08-10Fix potential crash when saved_git_id is NULLGravatar Dirk Hohndel
We have a safe strdup alternative. Let's just use it. Fixes #2220 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2019-08-10Android: fix potential crashGravatar Dirk Hohndel
I'm not sure about this one, as we test name at the start of the function and event->name shouldn't be NULL, but hey, we have the safe compare function, so let's use it. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2019-08-10Mobile: catch null references in DownloadDCThreadGravatar Berthold Stoeger
There are reported crashes on Android that suggest a null "tables" attribute in DownloadDCThread. This should never happen, as the table() function connected to this attribute returns the address of a subobject. Thus, even if the original DownloadThread is null, this would not return a null pointer (the subobject is not at address 0). Catch these null-object accesses and write a warning message to the console. Hopefully, this will help is localizing the problem. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-10Mobile: update dive site model if dive sites are createdGravatar Berthold Stoeger
Always keep the dive site model up to date when adding dive sites. This hopefully avoids creation of invalid indexes followed by crashes. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-10Location model: treat invalid indexes gracefullyGravatar Berthold Stoeger
There have been crash reports in DiveSiteSortedModel::allSiteNames(). The only conceivable reason that this crashes is that the core knows about more sites than the model and therefore on mapToSource() we get an invalid index, which is translated to -1. Accessing the name of that dive site will crash. Handle such invalid indexes gracefully. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-10Core: unconditionally include stdio.h in libdivecomputer.hGravatar Berthold Stoeger
Header files should compile regardless of order of inclusion. Since libdivecomputer.h uses FILE unconditional include of stdio.h is the correct thing to do. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-08iOS: address build errorGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2019-08-08Planner: pass dive to enough_gas()Gravatar Berthold Stoeger
Enough gas was checking the currently displayed dive instead of the dive to be planned. Not good in a multi-threaded context. Pass the actual dive instead. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-08Planner: pass dive / cylinder pair to track_ascent_gas()Gravatar Berthold Stoeger
Pass the dive to be planned to track_ascent_gas and don't use the displayed_dive. For convenience, pass the cylinder-id, since the function can now access the cylinder of the dive by itself. This makes the callers less verbose. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-08Planner: pass dive to analyze_gaslist()Gravatar Berthold Stoeger
Use the actual planned dive, not the displayed dive in analyze_gaslist(). Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-08Planner: fix comment for create_dive_from_plan()Gravatar Berthold Stoeger
The function comment talks about overwriting displayed_dive, when in reality the function overwrites a passed in dive. Also fix a debug-call which dumped the displayed_dive, not the actual dive to stdout. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-08Core: pass dive, cylinder-id to fill_default_cylinderGravatar Berthold Stoeger
The fill_default_cylinder() function calculated the MOD based on the currently displayed dive. This does not seem to make sense: - When importing dives, why would we care about the altitude and salinity of the currently displayed dive, possibly from a different trip. - The planner is supposed to be thread-safe and should not touch global variables. Of course this means that the importing-functions have to fill out altitude and salinity before creating the default cylinder, but this is their problem. For a freshly created dive they will get the default values, which still seems less random than the values from the displayed dive. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-08Planner: use planner's dive in interpolate_transition()Gravatar Berthold Stoeger
Instead of passing the global displayed_dive to calc_crushing_pressure(), use the dive the planner is working on. A small step in making the planner thread-safe. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-08Parser: remove global stateGravatar Berthold Stoeger
The parser had global state in the form of a linear regression and the "plot_depth" variable. Collect that in the deco_state struct and pass it down the call-chain. Move out the code to update the regression data to not bother other callers of tissue_tolerance_calc(). Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at> Signed-off-by: Robert C. Helling <helling@atdotde.de>
2019-08-08Cleanup: remove unused function printdecotableGravatar Berthold Stoeger
It is unclear where this function has ever been used. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-08Cleanup: make local functions in planner.c of static linkageGravatar Berthold Stoeger
A number of functions were not used outside of planner.c. Make them static. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-08Cleanup: move planner/deco related declarations planner/deco.hGravatar Berthold Stoeger
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-08Cleanup: move file-related function declarations to file.hGravatar Berthold Stoeger
A number of architecture-dependent functions were declared in dive.h. Move them to file.h so that not all file-manipulating translation units have to include dive.h. This is a small step in avoiding mass-recompilation on every change to dive.h Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-08Cleanup: move error reporting function declarations to errorhelper.hGravatar Berthold Stoeger
Move the declarations of the "report_error()" and "set_error_cb()" functions and the "verbose" variable to errorhelper.h. Thus, error-reporting translation units don't have to import the big dive.h header file. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-08Cleanup: replace macro by inline function in gas-model.cGravatar Berthold Stoeger
Replace a macro calculating a degree-three polynomial by an inline function. Moreover, calculate the powers 1, 2 and 3 of the pressure inside the function. The compiler will be smart enough to optimize this to the same code. The only important thing is to write "x*x*x*coeff" instead of "coeff*x*x*x". The compiler can't optimize the latter because ... wonderful floating point semantics. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-08Move the Suit text box from the Notes tab to the Equipment tabGravatar willemferguson
Sqash latest commit with previous one. Signed-off-by: willemferguson <willemferguson@zoology.up.ac.za>
2019-08-08Desktop user manual: dc managementGravatar willemferguson
The relevant text in the present manual is obsolete. Update the text dealing with dive profiles from several sive computers for one specific dive. One image is added. Deal with creating a new cylinder type. Signed-off-by: willemferguson <willemferguson@zoology.up.ac.za>
2019-08-08Desktop: display trip time on main-tabGravatar Berthold Stoeger
On the main tab, the trip time was not shown when switching to a trip. Implement showing of the trip date in a function, as the undo-code will also have to update the trip date in certain circumstances. Fixes #2207 Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-08Indicate negative cylider pressureGravatar Robert C. Helling
The planner can produce negative cylinder pressures when more gas is used than available. Let's color the pressure graph in a highly visible color to alert the user of the fact that current gas planning is insufficient. Signed-off-by: Robert C. Helling <helling@atdotde.de>
2019-08-08Fix math in valueAtGravatar Robert C. Helling
DiveCartesianAxis::valueAt() is supposed to be the inverse of posAtValue(). This fixes the math such that inverted orientations are correctly taken care of. Signed-off-by: Robert C. Helling <helling@atdotde.de>
2019-08-08Limit gas compressibility argument range to halfway sane valuesGravatar Linus Torvalds
The curve fitting for our gas compressibility was only done in the sane range of 0-500 bar, which is what a scuba cylinder can reasonably be expected to perhaps have. But the planner ends up happily using negative cylinder pressures when you run out of gas, and then the compressibility gives nonsensical results. That's clearly a planner bug, but the nonsensical gas compressibility values made it harder to see what could be wrong. So we just clamp the inpot range to the range we have verified against experimental data. If you try to get compressibility for negative pressures, you get the compressibility for an ideal and imaginary gas. And if you try to get compressibility for pressures over 500 bar, we'll just assume that it's 500 bar. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2019-08-04Cleanup: use clear_git_id() instead of setting saved_git_idGravatar Berthold Stoeger
For better encapsulation, use clear_git_id() in clear_dive_file_data() instead of setting saved_git_id directly. Thus, memory management of the saved_git_id value is encapsulated and can be modified more easily. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-04Coding style: add spaces in load-git.cGravatar Berthold Stoeger
Add spaces before and after multiplication and addition operators. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-04Git: Make parser reentrantGravatar Berthold Stoeger
The git parser was using a number of global static variables. Remove them by introducing a parser state, which is passed down to the call hierarchy. Advantages: 1) Removes global variables and makes the parser (mostly) reentrant. 2) More flexible - e.g. when parsing samples, the parser can now access the dive to check if the cylinder number is valid. 3) Less weak typing through "void *". Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-04Cleanup: make functions in core/load-git.c localGravatar Berthold Stoeger
The function get_divemode() and git_tree_entry_blob() were not used outside of load-git.c. Make them of static linkage. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-08-02[smtk-import] fix mem leaks on site/location failure managementGravatar Salvador Cuñat
Signed-off-by: Salvador Cuñat <salvador,cunat@gmail.com>
2019-08-02[smtk-import] avoid infinite loop on index failureGravatar Salvador Cuñat
As Berthold points out, a failure to match the site or location index will result in an infinite loop with previous patch. With this one the loop will end after reading the last table row even if no idx is matched. But ... If we asume this situation is possible the retrieved data would be wrong, and ending the function without filling the site structure is mandatory too. Signed-off-by: Salvador Cuñat <salvador.cunat@gmail.com>
2019-08-02fix site/location build issueGravatar Salvador Cuñat
We were assuming these tables were sorted with their indexes, but it happens to be false, under some circustances at least. Reported-by: Andreas Hagberg <scubasoft@gmail.com> Signed-off-by: Salvador Cuñat <salvador.cunat@gmail.com>
2019-08-01Prepare for 4.9.1 releasev4.9.1Gravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2019-07-29Desktop: correct tooltip for filter close buttonGravatar Dirk Hohndel
This button only closes the filter panel but doesn't clear it. Reported-by: Adric Norris <landstander668@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2019-07-27Crash fix: prevent crash in MapLocationModel::reloadGravatar Berthold Stoeger
Commit 0c387549164d7eec3ea6647c54ada2fba7f8d5e6 introduced a bug in MapLocationModel::reload() by setting an entry in the name-to-location map before the location was initialized. Move the setting of the map entry back where it was before: after the assignment of the location variable. Moreover, define the location variable directly on allocation of the location to avoid thus bugs in the future. Why did we not get a "might be used unitialized" warning anyway? Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-07-27Core: split copy_cylinders() in two functionsGravatar Berthold Stoeger
copy_cylinders() copied the cylinders of one dive onto another dive and then reset to the original gas values. Presumably, when copy and pasting cylinders from one dive to another, only the types should be copied, not the gases. Moreover, the function could either copy all or only the used cylinders. Firstly, the code was bogus: when restoring the pressures the indices were mixed up: the old indices were used. Thus, when there where uncopied cylinders, not all pressure values were restored. Secondly, it is not clear that all callers actually want to restore the pressure data. It rather appears the two (out of three) callers actually just want to copy the cylinders. Therefore, split the function in 1) copy_cylinders(): copy the cylinders with pressure data 2) copy_cylinder_types(): copy only the cylinder information Since there is only one caller of copy_cylinder_types(), the "used_only" argument can be removed. Since all cylinders are copied there is no point in storing the pressure data. Don't overwrite it in the first place. The resulting two functions should be distinctly easier to understand. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-07-27Desktop: fix index in weightsystems_equal()Gravatar Berthold Stoeger
The weightsystem_equal() function compares weightsystems of two dives to decide whether the "commit changes" message should be shown and to decide which dives are edited when changing multiple dives. Due to an index mixup the function returned wrong results for more than two weightsystems. Fix it. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-07-27Cleanup: remove TankItem::diveCylinderStoreGravatar Berthold Stoeger
The last user of this member variable was removed in commit 96ed09bf145a5e108ca8098a1a5814784bcbebd2. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-07-19Bluetooth: autodetect Shearwater NERD modelsGravatar Dirk Hohndel
This should allow it to work with Subsurface-mobile as well. Fixes #2187 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2019-07-19Android: ensure higher build number for arm64 APKGravatar Dirk Hohndel
Google Play allows uploading two APKs, but only if the arm64 one has a higher build number. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2019-07-19Cleanup: remove bogus mark_divelist_changed() callsGravatar Berthold Stoeger
The parsers / downloaders parse into a separate table and do not directly change the divelist. Therefore, they shouldn't call mark_divelist_changed(). Likewise split_dive_at() doesn't modify the dive list and therefore shouldn't call this function. Calling the function has the unwanted side-effect that undoing the change will not clear the *-symbol in the title of the main window. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-07-19Undo: make editing of dive number undoableGravatar Berthold Stoeger
When pressing F2 in the dive list, the number can be edited. Make this action undoable by implementing a EditNumber command. This command is differs from the other undo commands, as not the currently selected dives are changed. This means that the EditCommand needs an alternative constructor taking a single dive. This constructor was implemented in the base class so that all edit commands can now be called with a single dive. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>