Commit graph

11190 commits

Author SHA1 Message Date
Dirk Hohndel
8b670c3f3f QML UI: restructure (and fix) the saveChanges logic
We first want to save any exiting unsaved changes to the local repository
(and ONLY to the local repository). After that we want to make sure that
we are syncing remotely, fetch the remote and then (possibly after a
merge) push the changes to the remote. In the end we reset the previous
"local git only" preference which we overwrote for this manual forced
sync.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 22:57:16 -07:00
Dirk Hohndel
8af4534286 QML UI: don't try to save again if we are already saving
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 21:36:15 -07:00
Dirk Hohndel
c3ab4dfc3e QML UI: simplify code for loading data from the cloud
We had a redundant check of the server reply hidden in there, and the
logic which values were set where didn't really make much sense. This
seems clearer to me.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 21:32:28 -07:00
Dirk Hohndel
a1332ce361 Simplify git tracking of git tree creation
With Linus' changes to the tree creation saving the dives is no longer
the dominant part of that process, so simplify the output (which also
removes the hacky buggy code to show the percentages that is of course
totally bogus).

(apparently a couple of white space cleanups snuck into this patch)

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 21:23:48 -07:00
Dirk Hohndel
afb5bb8b06 QML UI: simplify git tracking output
And don't waste quite as much time on updating the UI.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 21:20:33 -07:00
Dirk Hohndel
1634c62b9a DiveListModel: don't add the dives one at a time
Most of the time we are adding all the dives, so do this in a single model
operation. This makes the case when adding a single dive (in the undo delete
function) slightly more complicated, but that seems totally worth it for the
speedup in the common case.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 21:17:37 -07:00
Dirk Hohndel
f16a3a1709 Keep the instance in static variable
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 21:16:25 -07:00
Dirk Hohndel
f869ce51b4 git storage: add explanation for fast forward to remote
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 21:13:27 -07:00
Dirk Hohndel
092d0478c3 git storage: compare with correct SHA when checking if cache is current
Otherwise by the time we make the comparison the saved_git_id has already
been updated.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 21:10:41 -07:00
Linus Torvalds
485c5a4ebd Fix per-cylinder SAC rate calculations when cylinder use isn't known
John Van Ostrand reports that when he dives using two cylinders using
sidemounts, the per-cylinder SAC rate display is very misleading.

What happens is that since the two cylinders are used together (but
without a manifold), John is alternating between the two but not
actually adding gas switches in the profile.  As a result, the profile
looks like only one cylinder is used, even though clearly the other
cylinder gets breathed down too.

The per-cylinder SAC rate calculations would entirely ignore the
cylinder that didn't have gas switch events to it, and looking at the
info window it would look like John had a truly exceptional SAC rate.

But then in the general statistics panel that actually takes the whole
gas use into account, the very different real SAC rate would show up.

The basic issue is that if we don't have full use information for the
different cylinders, we would account the whole dive to just a partial
set.  We did have a special case for this, but that special case only
really worked if the first cylinder truly was the only cylinder used.

This patch makes us see the difference between "only one cylinder was
used, and I can use the overall mean depth for it" and "more than one
cylinder was used, but I don't know what the mean depths might be".

Reported-by: John Van Ostrand <john@vanostrand.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 16:53:02 -07:00
Linus Torvalds
ff8392da54 Remove unused and buggy get_cylinder_used_gas_string() function
It's good that this is unused, because it does the calculations wrong.

Due to the gas compressibility the gas use calculations should subtract
the gas_volume() values at the differing pressures, not the pressures
themselves.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 16:52:58 -07:00
Dirk Hohndel
6d1effe886 QML UI: more theme information
The fonts on my Nexus 6p are way too big (especially when compared
to the fonts of the same build on an iPhone 6plus that has very
similar screen size). Simply trying to get more data...

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 16:50:43 -07:00
Dirk Hohndel
65696e1eb5 Don't set the window size on iOS, either
Not that it appears to have been an issue, it just seemed wrong for this
to be Android only...

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 16:49:29 -07:00
Dirk Hohndel
8afdb665cd QML UI: dive list: smaller header above dives that aren't in a trip
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 16:02:47 -07:00
Dirk Hohndel
7101cc8c02 QML UI: remove redundant dive log title
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 15:54:01 -07:00
Dirk Hohndel
3c1d8ec291 remove code that is no longer used
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 15:53:25 -07:00
Dirk Hohndel
5dab95b364 QML UI: use Kirigami default padding
The issue with needing extra space at the top of the page has been
fixed upstream.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 15:49:31 -07:00
Tomaz Canabrava
21e8b1e363 Fix compilation with the new folder architecture
A few more fixes for things that broke in commit 7be962bfc2 ("Move
subsurface-core to core and qt-mobile to mobile-widgets").

[Dirk Hohndel: slightly edited and overlap with Linus' patch removed]

Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 12:32:36 -07:00
Dirk Hohndel
6d6ba8b54a QML UI: better trip header
This tries to give the best information about the trip that we have.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 12:27:51 -07:00
Dirk Hohndel
3472f20354 QML UI: dynamic page title for the root page
Subsurface-mobile is the name of the app, but not a good title for
the Dive list / Cloud credential page

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 09:52:09 -07:00
Dirk Hohndel
77e83e8843 QML UI: keep the title bar larger on iOS
This is where the back button is located on iOS.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 09:42:42 -07:00
Linus Torvalds
ad2ac58ea2 Fix include paths
As expected, commit 7be962bfc2 ("Move subsurface-core to core and qt-mobile
to mobile-widgets") caused some breakage.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 09:40:58 -07:00
Dirk Hohndel
0a4b246421 Small cleanup of helper functions to remove unused arguments
Also removes an unused variable.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 07:40:52 -07:00
Dirk Hohndel
710e2150c8 Add another Kirigami file and sort the private ones
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 07:32:53 -07:00
Linus Torvalds
eff4059802 Start using the actual cylinder data for gas switch events
Now that gas switch events always have indices into the cylinder table,
start using that to look up the gas mix from the cylinders rather than
from the gas switch event itself.  In other words, the cylinder index is
now the primary data for gas switch events.

This means that now as you change the cylinder information, the gas
switch events will automatically update to reflect those changes.

Note that on loading data from the outside (either from a xml file, from
a git/cloud account, or from a dive computer), we may or may not
initially have an index for the gas change event.  The external data may
be from an older version of subsurface, or it may be from a
libdivecomputer download that just doesn't give index data at all.

In that case, we will do:

 - if there is no index, but there is explicit gas mix information, we
   will look up the index based on that gas mix, picking the cylinder
   that has the closest mix.

 - if there isn't even explicit gas mix data, so we only have the event
   value from libdivecomputer, we will turn that value into a gasmix,
   and use that to look up the cylinder index as above.

 - if no valid cylinder information is available at all, gas switch
   events will just be dropped.

When saving the data, we now always save the cylinder index, and the gas
mix associated with that cylinder (that gas mix will be ignored on load,
since the index is the primary, but it makes the event much easier to
read).

It is worth noting we do not modify the libdivecomputer value, even if
the gasmix has changed, so that remains as a record of the original
download.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 22:37:18 -07:00
Linus Torvalds
e0824ef9f3 Make gas change events always have a cylinder index
In commit df4e26c875 ("Start sanitizing gaschange event information")
back about a year and a half ago, I started sanitizing the gas switch
event data, allowing gas switches to be associated with a particular
cylinder index rather than just the gas mix that is switched to.

But that initial step only _allowed_ a gas switch event to be associated
with a particular cylinder, the primary model was still to just specify
the mix.

This finally takes the next step, and *always* associates a gas switch
event with a particular cylinder.  Instead of then looking up the
cylinder by trying to match gas mixes at runtime, subsurface now looks
it up when loading the dive initially as part of the dive fixup code.

The switch event still has an a separate gas mix associated with it, but
this patch also starts preparing for entirely relying on the gas mix in
the cylinder itself, by starting to pass in not just the event but also
the dive pointer to the routines that look up gas mix details.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 22:37:18 -07:00
Linus Torvalds
7a444c0210 Make cylinder_nodata() take a const cylinder pointer
Some of the gas mix cleanups I'm doing are in code that uses const
pointers, and wants to use this.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 22:37:18 -07:00
Linus Torvalds
9005274986 Make "is_gasmix_redundant()" more robust
The gas switch event handling is somewhat fragile, mostly because the
legacy event encoding for gas switches is odd.  It's also limited to
whole percentages, unlike our internal gas mix model.

In addition, it also ends up comparing the values to the raw permille
values, which is wrong for air, and wouldn't match our O2_IN_AIR which
is 209 permille (closest approximation to 20.946%).

So handle air separately, since "21" really is a valid oxygen value for
air, and should match 20.9%.  And use the proper accessor functions to
get the gasmix values.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 22:37:18 -07:00
Linus Torvalds
eb5907ab3b Remove linear pressure interpolation detection code
Dirk says that divinglog hasn't been doing the linear pressure
interpolation for a long while, so we're doing extra dive fixups that
really aren't needed any more.

Also, the code is actually buggy: it only ever worked on the first
cylinder anyway (because only the first cylinder pressure_delta[] would
be initialized).  That was probably perfectly fine in practice, since
it's unlikely that many tech divers used old versions of divinglog
anyway, so the bug per se isn't a reason to remove it - but it is a sign
that the code was a bit hard to read, so let's get rid of it if there is
no reason to maintain it or fix it.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 22:37:18 -07:00
Dirk Hohndel
7be962bfc2 Move subsurface-core to core and qt-mobile to mobile-widgets
Having subsurface-core as a directory name really messes with
autocomplete and is obviously redundant. Simmilarly, qt-mobile caused an
autocomplete conflict and also was inconsistent with the desktop-widget
name for the directory containing the "other" UI.

And while cleaning up the resulting change in the path name for include
files, I decided to clean up those even more to make them consistent
overall.

This could have been handled in more commits, but since this requires a
make clean before the build, it seemed more sensible to do it all in one.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 22:33:58 -07:00
Linus Torvalds
2d760a7bff Don't write back dive data that hasn't changed in git
This caches the git ID for the dive on load, and avoids building the
dive directory and hashing it on save as long as nothing has invalidated
the git ID cache.

That should make it much faster to write back data to the git
repository, since the dive tree structure and the divecomputer blobs in
particular are the bulk of it (due to all the sample data).  It's not
actually the git operations that are all that expensive, it's literally
generating the big blob with all the snprintf() calls for the data.

The git save used to be a fairly expensive with large data sets,
especially noticeable on mobile with much weaker CPU's.  This should
speed things up by at least a factor of two.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 17:27:10 -07:00
Dirk Hohndel
2b36091599 QML UI: include the new back button for iOS
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:55:14 -07:00
Dirk Hohndel
1bbf6ab8a8 Revert "QML UI: make sure the correct data is in the bread crumbs"
This reverts commit 410fd222d1.

The change this relied on was rejected by upstream Kirigami

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:24:19 -07:00
Dirk Hohndel
e0ad3c85d1 QML UI: animate showing the dive edit sheet
This now uses the correct property to open the OverlaySheet.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:23:07 -07:00
Dirk Hohndel
d8ec9597fa Revert "QML UI: animate showing the dive edit sheet"
This reverts commit faa22d5343.

Upstream Kirigami already had a property to do this. Oops.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:22:16 -07:00
Dirk Hohndel
e50a3470c1 QML UI: rate limit git progress output
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:19:24 -07:00
Dirk Hohndel
9283332b95 Use the same format for output to stderr and AppLog
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:19:13 -07:00
Dirk Hohndel
f7564c2b77 QML UI: keep cloud sync enabled state in settings
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>
2016-04-04 14:18:51 -07:00
Dirk Hohndel
bb74144860 QML UI: allow user to disable automatic cloud sync
This is useful if you are in an area with slow or spotty network and if
you are fine with just saving to the phone. In order to sync to the cloud
you either have to manually sync via the menu or turn this back on and
hide the application.

The commit also removes the old refresh from the Manage dives menu as the
semantic of that was possibly destructive now that we no longer
immediately save changes to git - those could be thrown away by selecting
refresh before the app had a chance to save them.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:18:41 -07:00
Dirk Hohndel
616842c8c0 QML UI: be more careful when to show us accessing the cloud
There may be other paths where we potentially show the wrong status to
the user... but at least with this it times out eventually; there
shouldn't be any single operation that isn't broken down with progress
markers that takes more than 10 seconds, so keeping the notification
around for 30 seconds seems very conservative.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:18:32 -07:00
Dirk Hohndel
4af9ee5dea QML UI: don't immediately save data after we make changes
Much as this felt like the prudent thing to do, it makes the UI painful
to use.  In bad network conditions, with a large dive log, on a phone,
the save operation can take more than a minute - which is just completely
ludicrous.

So instead we mark the dive list changed when we make changes and wait
for the app to not be in the foreground. Once the OS tells us that we are
hidden (on the desktop that generally means we don't have focus, on a
mobile device it usually does mean that the app is not on the screen), we
check if there are data to be saved and do so.

There is of course a major problem with this logic. If the user switches
away from Subsurface-mobile but comes back fairly quickly (just reacting
to a notification or briefly checking something, changing a song,
something... then the app may still be non-responsive for quite a while.

So we need to do something about the time it takes us to save the git
tree locally, and then figure out if we can move at least some of the
network traffic to another thread.

And we need to make sure the user immediately notices that the app is not
crashed but is actually saving their data. But that's for another commit.

tl;dr: CAREFUL, don't kill Subsurface-mobile before it had time to save
your data or your changes may be gone. In typical use that shouldn't be
an issue, but it is something that we need to tell the user about.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:18:22 -07:00
Dirk Hohndel
5821c56da2 Instrument the git storage code
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>
2016-04-04 14:18:11 -07:00
Dirk Hohndel
904539024e Make accessingCloud an integer so it can convey more information
This will be used to simulate a progress bar eventually.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:17:57 -07:00
Dirk Hohndel
eea1ff6a83 Change the git progress update callback signature
This way we can include additional text. This will be used in later
patches.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:17:45 -07:00
Dirk Hohndel
8b710f4d6c Git storage: after successful merge push merged commit to upstream
Otherwise a merge will only make it to cloud storage the second time we
connect.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:17:30 -07:00
Dirk Hohndel
410fd222d1 QML UI: make sure the correct data is in the bread crumbs
Once again this requires changes that aren't upstream in Kirigami.
But with this the bread crumbs update when the user swipes from dive
to dive.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02 17:59:59 -05:00
Dirk Hohndel
162d07086b QML UI: remove obsolete code
This simply causes an error

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02 17:59:32 -05:00
Dirk Hohndel
d95805e90b QML UI: tap on the very top / title bar of dive list goes to top
This requires changes to Kirigami that aren't upstream, yet. So there's
a chance that this commit will have to be changed or reverted / redone.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02 17:01:37 -05:00
Dirk Hohndel
09856b4546 QML UI: work around problem starting some actions while on the App log
If you show the App log and then start "Add dive manually" or "Show GPS
fixes" you get this odd behavior that the page stack returns to the App
log for some reason. A simple workaround is of course to return to the
dive list, first. Not ideal (because there shouldn't be a reason not to
have the All log in the stack as well, but not really a big problem,
either, since the App log is mainly intended for developers.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02 12:47:00 -05:00
Dirk Hohndel
254ea5accb QML UI: redo application log page
This makes things wrap and scroll correctly again for me

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02 12:46:59 -05:00