aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2016-04-04Don't write back dive data that hasn't changed in gitGravatar Linus Torvalds
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-04QML UI: include the new back button for iOSGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04Revert "QML UI: make sure the correct data is in the bread crumbs"Gravatar Dirk Hohndel
This reverts commit 410fd222d15dca8673606133499cefde780f163b. The change this relied on was rejected by upstream Kirigami Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04QML UI: animate showing the dive edit sheetGravatar Dirk Hohndel
This now uses the correct property to open the OverlaySheet. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04Revert "QML UI: animate showing the dive edit sheet"Gravatar Dirk Hohndel
This reverts commit faa22d5343f39f335bc281e139bc347241295ebf. Upstream Kirigami already had a property to do this. Oops. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04QML UI: rate limit git progress outputGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04Use the same format for output to stderr and AppLogGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04QML UI: keep cloud sync enabled state in settingsGravatar Dirk Hohndel
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-04QML UI: allow user to disable automatic cloud syncGravatar Dirk Hohndel
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-04QML UI: be more careful when to show us accessing the cloudGravatar Dirk Hohndel
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-04QML UI: don't immediately save data after we make changesGravatar Dirk Hohndel
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-04Instrument the git storage codeGravatar Dirk Hohndel
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-04Make accessingCloud an integer so it can convey more informationGravatar Dirk Hohndel
This will be used to simulate a progress bar eventually. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04Change the git progress update callback signatureGravatar Dirk Hohndel
This way we can include additional text. This will be used in later patches. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04Git storage: after successful merge push merged commit to upstreamGravatar Dirk Hohndel
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-02QML UI: make sure the correct data is in the bread crumbsGravatar Dirk Hohndel
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-02QML UI: remove obsolete codeGravatar Dirk Hohndel
This simply causes an error Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02QML UI: tap on the very top / title bar of dive list goes to topGravatar Dirk Hohndel
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-02QML UI: work around problem starting some actions while on the App logGravatar Dirk Hohndel
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-02QML UI: redo application log pageGravatar Dirk Hohndel
This makes things wrap and scroll correctly again for me Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02whitespace cleanup for previous commitGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02QML UI: press and hold for delete dive on dive listGravatar Dirk Hohndel
This looks a little rough, but I think it works well. I'm sure it could be prettier, though. The next patch will just do the white space cleanup for the additional indentation level. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02QML UI: don't go through manager object to show mapGravatar Dirk Hohndel
We can open URLs in the browser directly from QML. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02QML UI: don't go through manager object to open user manualGravatar Dirk Hohndel
We can open URLs in the browser directly from QML. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02SDM import: fix logic for sample importGravatar Miika Turkia
Seems that testing if BOOKMARK is empty is a bad idea. We end up not getting any samples, but the ones containing a bookmark. So we need to switch the logic to testing if BOOKMARK contains something and do those tasks first and otherwise grab a regular sample. Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02SDM import: calculate duration if neededGravatar Miika Turkia
Seems that DiveManager does not always return the dive duration in DIVETIMESEC field. In this case we can try to calculate the duration from sample count and interval. Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01QML UI: all these changes certainly deserve a new versionGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01QML UI: when on the dive list, action button now offers add diveGravatar Dirk Hohndel
This seems like a useful default action when people are looking at the dive list (and it's a request from a user to have this as a button instead of just via the menu). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01QML UI: add an "add" iconGravatar Dirk Hohndel
Again, proudly borrowing from the breeze icon set. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01QML UI: put add dive action in a functionGravatar Dirk Hohndel
This way we can call this from a button as well as the menu. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01qml white space fixesGravatar Dirk Hohndel
Left over from the merge of the Kirigami 1.0 port Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01QML UI: add space at the top of dive details viewGravatar Dirk Hohndel
With the switch to Kirigami 1.0 it seems that the top bar now overlaps the page. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01QML UI: animate showing the dive edit sheetGravatar Dirk Hohndel
This requires a change to Kirigami so that a property change (instead of calling the open() function) can trigger the animation. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01QML UI: end editing mode when edit overlay is flicked offscreenGravatar Dirk Hohndel
Just changing the state isn't quite enough. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01QML UI: fix small bug in main menuGravatar Dirk Hohndel
One Action hadn't been converted to a Kirigami.Action. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01Merge branch 'mergeKirigamiPort'Gravatar Dirk Hohndel
2016-04-01Fix cylinder end pressure fixup from samplesGravatar Linus Torvalds
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>
2016-04-01Split up fixup_dive_dc() into multiple smaller independent functionsGravatar Linus Torvalds
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>
2016-04-01QML UI: avoid having the virtual keyboard show briefly at startupGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01Minor tweak to script to pull KirigamiGravatar Dirk Hohndel
This just allows the script to be used when you are working locally on Kirigami to test changes - no point in waiting for a pull from upstream then. The only goal is to copy the files over. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01QML UI: better visual arrangement of the dive listGravatar Dirk Hohndel
Make the lines that together form one dive move closer together so the dives visually stand out more. (this also includes small white space change, oops) Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01QML UI: make the dive list font even darkerGravatar Dirk Hohndel
Still not black, though - there's an opacity setting somewhere that I must be missing. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01QML UI: use the new Kirigami option to control the title bar sizesGravatar Dirk Hohndel
I liked the default and the fact that it disappeared completely, but the big size was a bit too much... Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01Disable kirigami plugin when copying the componentsGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-31Merge branch 'kirigamiPort' of https://github.com/sebasje/subsurface into ↵Gravatar Dirk Hohndel
mergeKirigamiPort This merge was a bit more challenging given how far things had diverged, but I hope I got it mostly right. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-31Update script to pull KirigamiGravatar Dirk Hohndel
Now with it's own repository and slightly different paths. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-30QML UI: simplify the code to cancel edit / addGravatar Dirk Hohndel
This way we have one function that correctly ends both modes. As a positive side effect this fixes a bug where one could exit the add mode by tapping Dive list in the main menu which would not delete the partially created dive. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-30QML UI: scroll to top of dive list when tapping title barGravatar Dirk Hohndel
This helps you get to the latest dive when you are stuck at the bottom of a dive list. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-30QML UI: add property to reflect when dive list is shownGravatar Dirk Hohndel
This makes it easier to have actions that are only valid in this case. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-30Revert "QML UI: make dive list fold dive trips"Gravatar Dirk Hohndel
This reverts commit 83c72e7a79458826b677e82f108f3e92022c58b6. The folding as implemented is too painfully slow and buggy on devices. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>