summaryrefslogtreecommitdiffstats
path: root/qt-mobile/qmlmanager.cpp
AgeCommit message (Collapse)Author
2016-04-04Move subsurface-core to core and qt-mobile to mobile-widgetsGravatar Dirk Hohndel
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-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: 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-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-03-24QML UI: remove the checkbox for remembering the passwordGravatar Dirk Hohndel
In the context of the mobile app this simply makes no sense. If the user doesn't select this option, the app doesn't really work. So why have the option in the first place? Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-23QML UI: always convert the cloud user name to lower caseGravatar Dirk Hohndel
Mixed case user names cause the connection to the cloud storage to fail. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-13QML UI: show user manual in browser windowGravatar Dirk Hohndel
This is so obvious... and I know others asked for this before. Should definitely have been in the first version... Fixes #1026 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-13QML UI: font color isn't supported on app log pageGravatar Dirk Hohndel
So let's remove all that markup. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-13QML UI: show cloud access notification when refreshing from menuGravatar Dirk Hohndel
If the user requests a refresh we always try to access the cloud and need to show the notification accordingly. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-11QML UI: don't allow negative gas consumptionGravatar Dirk Hohndel
If end pressure is higher than start pressure, simply use the same start and end pressure. Fixes #1024 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-10QML UI: don't claim to be accessing the cloud when you are notGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-10Red error messages in QMLGravatar Tomaz Canabrava
[Dirk Hohndel: slightly changed to make it easier for translation plus added one missing string that needed to be marked] Signed-off-by: Tomaz Canabrava <tomaz.canabrava@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-10QML UI: correctly validate the gasmix enteredGravatar Dirk Hohndel
We parsed it correctly, but then compared the permille values against percent thresholds. What a stupid bug. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-10QML UI: if the date entered doesn't match the format, try harderGravatar Dirk Hohndel
This implements a bunch of standard date and time formats, hoping that what the user entered matches one of them. I guess in the end we need to find decent calendar/clock based widgets to enter the time and avoid the whole parsing hassle. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-08QMLManager: helper function for devivePixelRatioGravatar Dirk Hohndel
This allows us to use the single manager object to keep track of the dpr of the screen and to pass it on if it changes (or when it first becomes known). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-08QMLManager: fix order of initializationGravatar Dirk Hohndel
Just avoids warnings. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-05Introduce separate version number for Subsurface-mobileGravatar Dirk Hohndel
This is hard coded in version.cmake for now. The intent is to go to 1.0 in the first release version and to increment from there whenever we create an update. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-03QML UI: show notification for saving dives to cloud as wellGravatar Dirk Hohndel
Fixes #1014 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-03QML UI: ensure that cloud notification is always clearedGravatar Dirk Hohndel
All error cases need to reset it as well. And it's easier to reset it right after we come back from parse_file() instead of trying to track all the exit cases after that. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-02QML UI: new property to tell the UI that we are accessing cloud storageGravatar Dirk Hohndel
This can then be used to give the user visual feedback (instead of them just thinking the app is hung). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-02QML UI: update profile when editing duration of manually added diveGravatar Dirk Hohndel
We need to make sure that a new fake DC is created after the duration was changed. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-02QML UI: update the correct dive in the model when committing a changeGravatar Dirk Hohndel
When manually adding a dive and moving it in the dive list (by editing it's start time) we could create a situation where the dive list internally was correct, but the dive list model on screen showed an incorrect dive list with the new dive in two different spots. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-02Add helper functions to identify the position of a dive in the dive listGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-02-29QML UI: implement undeleteGravatar Dirk Hohndel
This code is very similar to the undo code in the desktop UI, but untangling that from the desktop seemed massive overkill; we don't have lists of dives to delete and undelete here - so this is actually much simpler and easier to maintain (I hope). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-02-28QML UI: we no longer use the return value of commitChanges()Gravatar Dirk Hohndel
So make it a void function. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-02-23Add helper to delete dive from QMLGravatar Dirk Hohndel
Once again we make this save the changes to the local cache without being prompted. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-02-20QML UI: further validation in the C++ codeGravatar Dirk Hohndel
Don't allow negative depth or depth beyond 500m. Additional checks that the gas mix is possible (even thought QML code SHOULD only allow valid combinations). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-02-20Add option to allocate the samples in fake_dc()Gravatar Dirk Hohndel
We (ab)use fake_dc() to create a pleasing profile for a manually added dive. Based on it's intended use, fake_dc() simply handed back a dc structure that pointed at staticly allocated samples - that's obviously (now that I think about it) going to blow up in my face if I edit a manually added dive more than once. So now we have an option for fake_dc() to actually allocate the samples - this way the rest of the code can treat these samples as we would treat samples created any other way. We can free them and replace them with a new set. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-02-20After freeing the samples, clear the pointerGravatar Dirk Hohndel
Otherwise we might end up trying to free them a second time. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-02-20QML UI: fix recreation of profile after dive editGravatar Dirk Hohndel
We only need to deal with this if the dive changed. And in that case, if we calculate a new fake DC, we need to clear out the meandepth as otherwise the algorithm will try to match both max and mean depth. Since the user potentially changed the max depth that could have very odd consequences. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-02-15QML UI: no longer change unit preferences when parsing editsGravatar Dirk Hohndel
When the user explicitly sets the units when editing or adding dives, we used to change the display preferences. This was changed for some but not all fields in commit 6252d0cd3bda ("While parsing weight and pressure we should not change the users settings") Now we do this consistently for all inputs. Also, when editing the depth of a manually added dive, we now throw away the samples (as those are certain to be inconsistent). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-02-14Remove debug outputGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-02-13QML UI: enable edit of gasmixGravatar Joakim Bygdell
First cylinder only, show warning if there are more than one cylinder defined. Signed-off-by: Joakim Bygdell <j.bygdell@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-02-13While parsing weight and pressure we should not change the users settings.Gravatar Joakim Bygdell
Now it is possible to enter a specific unit that is different from the unit stored in the preferences. If only numbers are inputed the unit will be the same as specified by the users preferences. Signed-off-by: Joakim Bygdell <j.bygdell@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-02-12QML UI: when saving edits, really only save them locallyGravatar Dirk Hohndel
This should have been obvious. Without explicitly asking for only local git activity, it will connect to the remote. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-02-12QML UI: don't even try to connect if email or password are emptyGravatar Dirk Hohndel
This way the user gets better messages on the screen. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-02-12QML UI: more progress update on start pageGravatar Dirk Hohndel
Again, to help track down where things hang. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-02-12QML UI: more progress information on the start pageGravatar Dirk Hohndel
Since some users report hangs when changing credentials it would be useful to see how far the application got. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-02-11QML UI: clear up more data when changing credentialsGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-02-10Invalidate the remembered git SHA when changing credentialsGravatar Dirk Hohndel
Otherwise, when switching back and forth between two logins, during the second switch the dive list is not loaded as the code checks against the remembered git SHA before rewriting the dive list. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-02-10Reset the authentication cache when trying new credentialsGravatar Dirk Hohndel
Otherwise Qt attempts to be smart and re-uses previously successful username (email) and password. This is an odd corner case, but it seems the right thing to do. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>