Commit graph

12211 commits

Author SHA1 Message Date
Dirk Hohndel
18b7ee3875 QML UI: try to do the right thing for changes on all platforms
On Android we can save locally right away, but we don't want to make the user
wait for a network sync. Sadly, on Android currently the saving in the
background doesn't work and the save will run when the user comes back.
Definitely not ideal.

On iOS the situation is different - a save to the local git cache takes
surprisingly long. Must be the shitty file system they use or something.
Because of that we only mark the dive list changed and instead save the next
time the app is not in the foreground (which works on iOS but not on Android -
go figure).

On all the other OSs (I guess that would be desktop builds of
Subsurface-mobile? But there may be other mobile OSs that people might want to
build it on) we save both locally and to the cloud right away.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-10 19:22:16 -07:00
Dirk Hohndel
4ed369b975 QML UI: only force network access when user asks us to
So when the user taps on the manual cloud sync, we always force access to
the cloud server. Otherwise we only access the cloud server if
git_local_only isn't set.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-08 12:37:17 -07:00
Dirk Hohndel
685d31cd4f Simplify code - we now can rely on git_local_only to do the right thing
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-08 12:34:29 -07:00
Dirk Hohndel
eefda2b090 QML UI: reformat the warning message when turning off auto sync
This is silly - it should be set up so it wraps by itself...

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-08 12:29:52 -07:00
Dirk Hohndel
a1ec0d6724 git storage: only sync with remote if git_local_only isn't set
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-08 12:29:17 -07:00
Dirk Hohndel
e2e4bb6c2a QML UI: change order of cloud backend accesses
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-08 12:28:05 -07:00
Dirk Hohndel
829369c18a QML UI: make readonly fields more obvious in dive edit
Remove the border and make them look more like labels. This adds a
StyledTextField for that purpose. And while we are at it, we can make that
StyledTextField a little prettier.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-08 11:14:10 -07:00
Dirk Hohndel
df2e7c052b QML UI: make gas mix validator case insensitive
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-07 22:57:02 -07:00
Dirk Hohndel
069cb8f6c5 remove reference to non-existing object
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-07 22:57:01 -07:00
Dirk Hohndel
1004ced285 avoid dereferencing undefined object
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-07 22:57:01 -07:00
Dirk Hohndel
12f0af19cb QML UI: remove redundant heading
This makes the start page look a bit more natural

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-07 22:57:01 -07:00
Dirk Hohndel
41ab12533b QML UI: more fixes to correctly calculate page widths
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-07 22:57:01 -07:00
Dirk Hohndel
0e49d6965c QML UI: fix page width calculation for dive details
Fixes #1049

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-07 11:22:44 -07:00
Dirk Hohndel
9f7e509f9a QML UI: break the sync into explicit save local and save cloud
This makes the code much cleaner and easier to understand and should allow
us to then switch back to doing at least the local save right after we make
any changes to the data.

This commit also tries to make sure that the accessingCloud status stays
correct and consistent throughout all the various success and error paths.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-06 11:47:12 -07:00
Dirk Hohndel
3bafc2a4e6 QML UI: close the drawer right when the user taps sync manually
Having a short delay before the menu closes looks bad.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-06 11:46:09 -07:00
Dirk Hohndel
961b80ec20 QML UI: after successfully opening storage, store the filename
We rely on the filename being valid elsewhere in the code.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-06 11:44:58 -07:00
Dirk Hohndel
6a23e0ef66 QML UI: save with unchanged credentials returns to dive list
If the user is on the credentials page, doesn't change the credentials
but simply taps on save, they now get back to the dive list.

Fixes #1047

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-06 11:42:38 -07:00
Dirk Hohndel
f21b36d9ba QML UI: hide keyboard before saving credentials
This way the user gets to see the git notifications.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-06 11:40:34 -07:00
Dirk Hohndel
6725d54db2 Desktop UI: make sure that git progress is actually shown
This updates the got progress indicator to the changed interface where we don't
pass in an explicit percentage.

It also finally fixes an old problem: If we don't allow the Qt main loop to
process the events, we'll never see a decent progress indicator...

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 23:43:17 -07:00
Dirk Hohndel
922c945f5a QML UI: more hacking around with git progress reporting
I gave up on the magic numbers and instead report simply linear progress.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 23:39:54 -07:00
Dirk Hohndel
3555cadb77 QML UI: don't fetch the remote twice when loading
We first check the sha to see if we want to load at all. But at that
point we already have the repository and the branch and we have synced
with the remote. So when we decide that we need to reload from storage,
we don't need to repeat those steps, instead we can go directly to the
git load.

For that to work we need to pass the repository pointer and the branch
name back to the caller so that we can directly call git_load_dives().

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05 22:57:16 -07:00
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