Age | Commit message (Collapse) | Author |
|
So if the app gets closed and restarted, it will continue to not sync (or
sync) over the network.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
This allows fairly fine grained analysis on what part of loading from
and saving to git we are spending our time. Compute performance and
network speed play a significant role in how all this plays out.
The routine to check if we can reach the cloud server is modified to
send updates every second so we don't hang without any feedback for five
seconds when there is network but we can't reach the cloud server (not
an unlikely scenario in many dive locations with poor network quality)
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
This way we can include additional text. This will be used in later
patches.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Otherwise a merge will only make it to cloud storage the second time we
connect.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
This bug admittedly hits almost nobody, but if you had multiple cylinder
pressure sensors on the same cylinder (attached to multiple dive
computers, of course), we would take the beginning pressure from the
first dive computer, and the ending pressure from the last dive
computer.
That came about because we'd just walk all the dive computer samples in
order, and the first time we see a relevant sample and we don't have a
beginning pressure, we'd take that pressure. So the beginning pressure
was from the first dive computer, and once we'd seen a valid beginning
pressure, that would never change.
But as we're walking along, we'd continue to update the ending pressure
from the last relevant sample we see, which means that as we go on to
look at the other dive computers, we'd continue to update the ending
pressure with data from them.
And mixing beginning/ending pressures from two different sensors just
does not make sense.
This changes the logic to be the same for beginning and ending
pressures: we only update it once, with the first relevant sample we
see. But we walk the samples twice: forwards from the beginning to
find the first beginning pressure, and backwards from the end to find
the ending pressure.
That means that as we move on to the second dive computer, we've now
filled in the ending pressure from the first one, and will no longer
update it any more.
NOTE! We don't stop scanning the samples (or the dive computers) just
because we've found a valid pressure value. We'll always walk all the
samples because there might be multiple different cylinders that get
pressure data from different samples (and different dive computers).
We could have some early-out logic when we've filled in all relevant
cylinders, but since this just runs once per dive it's not worth it.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
fixup_dive_dc() is called for each dive computer when we add a new dive.
It does various housekeeping functions, cleaning up the sample data, and
fixing up dive details as a result of the sample data.
The function has grown to be a monster over time, and particularly the
central "walk every sample" loop has become an unreadable mess.
And the thing is, this isn't even all that performance-critical: it's
only done once per dive and dc, and there is no reason to have a single
illegible and complex loop.
So split up that loop into several smaller pieces that each will loop
individually over the sample data, and do just one thing. So now we
have separate functions for
- fixing up the depth samples with interpolation
- fixing up dive temperature data
- correcting the cylinder pressure sensor index
- cleaning up the actual sample pressures
Yes, this way we walk the samples multiple times, but the end result is
that the code is much easier to understand. There should be no actual
behavioral differences from this cleanup, except for the fact that since
the code is much more understandable, this cleanup also fixed a bug:
In the temperature fixup, we would fix up the overall dive temperatures
based on the dive computer temperatures. But we would then fix up the
overall dive computer temperature based on the sample temperature
*afterwards*, which wouldn't then be reflected in the overall dive
temperatures.
There was another non-symptomatic bug that became obvious when doing
this cleanup: the code used to calculate a 'depthtime' over the dive
that was never actually used. That's a historical artifact of old code
that had become dead when the average depth calculations were moved to a
function of their own earlier.
This is preparatory for fixing the overall cylinder pressure stats,
which are currently wrong for dives with multiple dive computers: we
currently take the starting cylinder pressure from the *first* dive
computer that has cylinder pressure information, but we take the ending
cylinder pressure from the *last* dive computer with cylinder pressure
information.
This does not fix that bug, but without this cleanup fixing that would
be a nightmare due to the previous complicated "do everything in one
single loop" model.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
We really have two different cases for merging dives:
(a) downloading a new dive from a dive computer, and merging it with an
existing dive that we had already created using a different dive
computer. This is the "try_to_merge()" case, called from
"process_dives()
(b) merging two different dives into one longer dive. This is the
"merge_two_dives()" case when you explicitly merge dives using the
divelist.
While a lot of the issues are the same, many details differ, and one of
the details is how dive numbering should be handled.
In particular, when you download from a dive computer and merge with an
existing dive, you want too take the *maximum* dive number, because the
dive computer notion of which dive it is may well not match what the
user dive number is.
On the other hand, when you explicitly merge in the dive list, you end
up renumbering not just the dive you are merging, but also all
subsequent dives, since you now have one fewer dives overall. So that
case already has to be handled by the caller.
Now, the simpler "download from dive computer" case was broken by commit
ce3a78efcac2 ("Assign lower number to a merged dive instead of higher
one"). It fixed the numbering for the divelist case, but broke the
download case.
So this commit reverts commit ce3a78efcac2, and instead extends and
clarifies the dive renumbering that "merge_two_dives()" already did. It
now explicitly renumbers not just the following dives, but also
renumbers the merged dive itself, so now we can go back to the old "take
the bigger dive number" for the core merging, which fixes the download
case.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
This is embarrassing. I should have done this in the first place instead
of trying to hack around it.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
This was exactly backwards. If there already are changes we do NOT want to
reload - that would overwrite those changes for no good reason; after all, the
starting point was correct, so why throw the changes away?
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
This way warning icons and tank change icons and other event markers are no
longer ridiculously tiny on retina screens. Oddly this doesn't appear to be
needed on Android, only on iOS.
Fixes #1033
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Some users try to run Subsurface as root for example to get around
permission problems with dive computer devices. This is a bad idea
since config files get touched as root and then cannot be read
as normal user anymore.
This patch allows running as root only with verbose option on. We can
assume if somebody manages to start subsurface as root this happens
from the command line.
For some reason, I couldn't get translation working at this stage.
Windows version is a stub.
Signed-off-by: Robert C. Helling <helling@atdotde.de>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
I've seen iPads without GPS report that they support satellite positioning.
Seems like a Qt bug to me.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
We used to faithfully save them, but not restore them at start.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
On iOS it seems that I get a fix every second. Even though the
QGeoPositionInfoSource is set up with an update interval of 5 minutes...
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
This is in the Mac support file that wasn't compiled on Linux when I tried to
finish the cleanup.
Now this compiles without warnings on Mac and iOS as well.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
The old expression wass correct because if dive_table.dives[j]->number is != 0,
then !dive_table.dives[j]->number is 0 and vice versa. But come on...
The new code seems much more natural and easier to read.
And of course the Apple compilers by default gave a warning because they
suspected a precedence bug with the old code.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
The saved_git_id could be updated in is_git_repository() under certain
circumstances, so we need to make sure we compare to the sha that was
current as we entered this function. Since the pointer is just to a static
buffer we need to actually copy it (and then free it later).
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Otherwise parse_file() thinks that this data has already been loaded and
doesn't re-read it, even though our internal data structures have been
erased - so a subsequent parse_file after clear_dive_file_data() that
opens the same git repository finishes successfully, but leaves the
dive_table empty which is of course incorrect.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
This time we err on the side of signed variables most of the time.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Trying to clean up the signed vs. unsigned issues it becomes clear that
forcing depth to be unsigned causes way too many problems in the code.
So this commit goes the opposite direction; since we clearly aren't
limited INT_MAX vs UINT_MAX, simply make more of the depth related
variables signed.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
This reverts commit 59299f0ab34ca4d75e0b02d9a83f23ec6348e1df.
Doing this oversimplified "fix" actually breaks the planner.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Add a symbol to each line of output table indicating whether a segment is an
ascent, descent, constant depth (user entered) or deco stop
Signed-off-by: Rick Walsh <rickmwalsh@gmail.com>
Signed-off-by: Robert C. Helling <helling@atdotde.de>
|
|
This was broken when introducing loading images from the server. Now it first tries the
server and if that fails tries the actual URL.
Still, the image does not show up immediately, since the DivePictureModel is
unavailable to the image downloader to be told to update the images.
This needs to be fixed but in the mean time, the image is shown when the dive
is reselected (possibly on the next run) since it is then loaded from the cache.
Signed-off-by: Robert C. Helling <helling@atdotde.de>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
as otherwise we crash when the picture is freed before the
worker thread (to load from the net or to compute hashes)
is finished
Signed-off-by: Robert C. Helling <helling@atdotde.de>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
While on the desktop we show the error to the user, in Subsurface-mobile
it's only appended to the log; so in order to improve debuggability it
makes sense to show the full error there.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
This updates the gas model to use the new virial coefficients from the R
script, and simplifies the expression a tiny bit by avoiding the
division by 1000 for the gas fractions, and replacing it with a multiply
by 0.001 at the end.
The virial coefficients for Oxygen and Nitrogen changed in the last
digits due to the use of a different tool for the least-square fitting.
That also accounts for the change in format (the coefficients are not
using scientific notation).
The coefficients for Helium changed noticeably more, since they are now
based on the new least-squares fit from the raw data.
But the actual end result does not change appreciably, the main
advantage is that now the numbers are easily reproducible.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Lubomir pointed to exactly where he got his data from, so I added that
raw Helium data to the R script, and let the least-squares fit just take
care of the interpolation between 273K and 323K.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
It annoyed me that we hand-waved a bit about how the virial factors were
actually computed in the gas-model.c file, so here's an actual R script
that computes them and plots the results.
You can run it with (for example):
R --vanilla < compressibility.r
and it will generate a Rplots.pdf of the plots, and the coefficients
will be shown on stdout.
The result actually differs in insignificant ways from the values that
Lubomir computed, which is likely just due to tools. I used R, Lubomir
seems to have used
http://polynomialregression.drque.net/online.php
but the actual curve is pretty much the same.
NOTE! R is not entirely happy about the non-linear fit of the Helium
curve: the fit is *so* precise that it failes the R relative-offset
convergence criterion. That is apparently generally a sign of
artificial data.
That is probably because Lubomir generated them from the linear mix of
two polynomial fits, rather than a linear mix of the original data. But
maybe the original data was artificial?
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
This reverts commit 7d1c2a142fcae4e4085a9f04d0c7a02d4089b6c7.
Another one.
|
|
This reverts commit 7f2ad93396091edd58b4e0930b5e62d2f6a066c7.
Idiot maintainer to do cleanup like this right before a release
|
|
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Mostly signedness issues, but also removing useless code that didn't have
any effect.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
This started out as cleaning up warnings - but it actually turned into a
matter of semantics and correctness. Which lead to changes in .h files
which will have a ton of ripple effects.
A lot more of this to come.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Signed-off-by: Tomaz Canabrava <tomaz.canabrava@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Signed-off-by: Tomaz Canabrava <tomaz.canabrava@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|
|
Signed-off-by: Tomaz Canabrava <tomaz.canabrava@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
|