aboutsummaryrefslogtreecommitdiffstats
path: root/core
AgeCommit message (Collapse)Author
2016-05-31Make 'clear_dive()' free the primary dive computer data properlyGravatar Linus Torvalds
Our primary dive computer really is special, not just because it's the first one: it's directly embedded in the "struct dive", and so if you just walk the divecomputer list, you'll miss it, because it's not _on_ the list, it is the very head _of_ the list. We had that bug in copy_dive(), and it turns out we have it in clear_dive() too: clear_dive() would free all the dive computers on the list, but not the actual primary one. This is a minor memory leak, no more, so it's not exactly critial, but let's just do it right. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-05-28Add some gas mix validation to the plannerGravatar Rick Walsh
A few basic rules for gas validation: We can't have <0%, or >100% of either O2 or He O2 + He must not be >100% Switch depth can't be <0% This places limits on user-input values Signed-off-by: Rick Walsh <rickmwalsh@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-05-28Shearwater import model name for Petrel and PredatorGravatar Miika Turkia
Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-05-28Set model on Shearwater importGravatar Miika Turkia
For starters, let's just state that this dive was downloaded from Shearwater. However, once we have information how model numbers map to names, we can use that info for the models we know about. Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-05-28Use serial as device ID on Shearwater importGravatar Miika Turkia
Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-05-21fixup: Don't confuse EAD and ENDGravatar Rick Walsh
The previous patch (Planner: add best mix EAD preference) used the term EAD (equivalent air depth) in variable names and strings, when it should have been END (equivalent narcotic depth). They're not the same thing and shouldn't be confused. Signed-off-by: Rick Walsh <rickmwalsh@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-05-21Planner: add best mix EAD preferenceGravatar Rick Walsh
Add best mix EAD preference and UI, along with a tooltip describing what it does Signed-off-by: Rick Walsh <rickmwalsh@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-05-21Add functions to calculate best mixGravatar Rick Walsh
Best mix O2 calculated based on planner Bottom O2 preference Best mix He calculated based on EAD of 30m (should be made user-configurable) Signed-off-by: Rick Walsh <rickmwalsh@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-05-16QML UI: add comboboxes to DiveDetailsEditGravatar Joakim Bygdell
This adds autocompleting text input fields for suit, buddy and divemaster. [Dirk Hohndel: some whitespace cleanup] Signed-off-by: Joakim Bygdell <j.bygdell@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-05-16Add functions to DiveObjectsHelperGravatar Joakim Bygdell
This generated the QStringLists needed to populate the combobxes in DiveDetailsEdit. Signed-off-by: Joakim Bygdell <j.bygdell@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-05-05NULL terminate the parameters arrayGravatar Miika Turkia
Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-05-05Allow parsing of .txt files on importGravatar Miika Turkia
Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-05-04Find bundled translations on iOSGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-05-03Android build: prepare and copy translations into the APKGravatar Dirk Hohndel
And then load them at runtime. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-05-03Parse date and time from on APD importGravatar Miika Turkia
This will parse the date and time information on CSV import if the file name matches the one used by APD log viewer (date and time are available in the file name). Hard coding the year to 20?? is a bit unfortunate, but as there is only 2 digits in the year, we have to invent something. And it would be quite optimistic to assume this will bite us back any time soon :D Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-05-02Print xsltproc command line on verbose modeGravatar Miika Turkia
Printed command line can be used to manually test the import function, allowing faster testing of XSLT changes, and showing debug prints that are discarded by Subsurface. Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-05-02Move the qtTranslator and ssrfTranslator pointers to qt-init.cppGravatar Thiago Macieira
No point in having it defined in each main program's .cpp. Especially since the unit tests don't define them. Signed-off-by: Thiago Macieira <thiago@macieira.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-30Only attempt to download each picture onceGravatar Robert C. Helling
Otherwise we keep downloading the same image multiple times instead of new images. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-30Fix typoGravatar Dirk Hohndel
Otherwise this code makes no sense (and has no effect). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-30Merge branch 'offlineDefault'Gravatar Dirk Hohndel
2016-04-30QML UI: make offline the defaultGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-30Don't pretend that opening git repo succeededGravatar Dirk Hohndel
Not sure why we claimed that this was successful when clearly it wasn't. There's a risk that this could break something on the desktop, but it makes no sense to me why that would be the right thing to do. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-30Only create the path to no cloud local storage onceGravatar Dirk Hohndel
This required a small change to the helper function, but this seemed totally worth it. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-29Allow switching the user from the command lineGravatar Dirk Hohndel
This is a feature that many people have asked for. This implementation is somewhat simplistic because we simply use a different name for the program settings - but interestingly enough this appears to be enough to capture a lot of the core functionality that people are looking for in multi-user support. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-29Protect access to image hash dictionaries with lockGravatar Robert C. Helling
Otherwise we step on our own feet when downloading several images, like after import from divelogs.de with many linked images. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-29Fix Qt date interfaces for times before 1970Gravatar Linus Torvalds
This seems to work around the crazy QDateTime::fromTime_t() problem in Qt. It is *very* lightly tested. In fact, the only test is that "test0.xml" change that is part of this patch. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-29Extend time parsing to before 1970Gravatar Linus Torvalds
It turns out that we are starting to have users that have logs that go back that far. It won't be common, but let's get it right anyway. NOTE! With us now supporting dates earlier in 1900, this also makes "utc_mktime()" always add the "1900" to the year field. That way we avoid ever using the fairly ambiguous two-digit shorthand. It didn't use to be all that ambiguous when we knew that any two-digit number less than 70 had to be 2000+. Now that we support going back to earlier in the last centiry, that certainty is eroding. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-27git storage: init local repositoryGravatar Dirk Hohndel
So far we didn't do that at all, we either relied on the user manually creating a local repo, or we cloned a remote repo. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-25Fix time parsing for Divesoft FreedomGravatar Miika Turkia
Divesoft uses 17 bits for time so parse accordingly. Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-25Abort git authentication attemptGravatar Miika Turkia
If we have incorrect cloud credentials, we need to return an error on git authentication call back in order to avoid endless authentication loop. This might well happen e.g. when changing the password on desktop and then on laptop Subsurface still thinks the credentials are validated and ends up in the authentication loop. The authentication call back on libgit is intended to be used to ask for user credentials, and as we handle credentials elsewhere, we just need to fail the authentication attempts. (The threshold for bail out could have been 1 attempt...) Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-25Parse date and time in DL7 importGravatar Miika Turkia
Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-25Grab the payload of DL7 fileGravatar Miika Turkia
This allows us to parse the DL7 profile data (skipping the header and footer) Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-22Fix SettingsObjectWrapper to actually use the group setGravatar Dirk Hohndel
At least for the GeneralSettings group. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-20Don't calculate the 9 minute averageGravatar Dirk Hohndel
We don't do the "smoothed" profile anymore (and haven't for years), so no need to calculate the data. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-20Only do 9 minute interval for min/max/avgGravatar Dirk Hohndel
We don't use 3 and 6 minute values anywhere, so why calculate them. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-20Fix 3-, 6- and 9-minute min/max calculationsGravatar Linus Torvalds
Make them use indices into the plot-info, fix calculation of average depth, and fix and add comments. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-18Fix broken Bluetooth supportGravatar Rick Walsh
This partially reverts Commit 39313c5 Reported-and-analyzed-by: Rick Walsh <rickmwalsh@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-17With patched Qt 5.6 for iOS correctly handle disabled GPS sourceGravatar Dirk Hohndel
Qt 5.6.0 is broken when it comes to using CoreLocationService on iOS. It doesn't even check if the location service is enabled. My patches fix that and make Qt set an error code right after service creation. Having the service creation fail is actually the wrong thing to do because then Qt switches over to GeoClue and that really isn't helpful for our needs here. Additionally, Qt 5.6.0 without my patches doesn't follow the REQUIRED flow of using the location service as it does not check the access permissions before accessing the GPS service - without doing so the GPS service will not run in the background. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-17GPS provider: change haveGPS status if GPS source returns errorGravatar Dirk Hohndel
If the GPS source returns an error that could be an indication that the user hasn't given us permission to use it, so switch our status to NOGPS. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-17GPS provider: track tristate information for GPS sourceGravatar Dirk Hohndel
Initially we don't know if we have a source. After that we may think that we have one, or not have one (but that can actually change while the program is running if the user, for example, turns the source off or switches to airplane mode). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-15QML UI: rewrite the commitChanges functionGravatar Dirk Hohndel
I couldn't figure out how to break this down into small, useful commits. Part of the problem is that I kept going while working on this and as you can see from looking at the commit, diff tries so hard to find small code fragments that moved around, that the diff overall becomes quite unreadable and it seemed impossible to recreate the sequence of steps after the fact. It all started with adding the parsing for the GPS coordinates. But while testing that code I found several issues with the rest of the function. Most importantly it seemed ridiculous that we carefully tried to match the texts that the DiveObjectHelper would create for the various fields, instead of just using the DiveObjectHelper to do just that. And once I had converted that I once again realized just how long and hard to understand that function was getting and decided to break out some of the more complex parts into their own helper functions. But of course all this didn't happen in this logical, structured, ordered way. Instead I did all of these things at the same time, testing, rearranging, etc. So in the end I went with one BIG commit that does all of this in one fell swoop. This adds four helper functions to deal with start time/date, duration, location and gps coordinates, and depth of the dive. To avoid mistakes when dealing with the GPS coordinates, there's another helper to encapsulate the creation of the dive site and we switched to a current GPS location. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-15QML UI: stop using "--" for empty stringsGravatar Dirk Hohndel
I can't remember why we started doing this, but at this point I find it just weird. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-14Make the raw timestamp available in QMLGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-14Add helper to find the dive closest to a given timeGravatar Dirk Hohndel
If we want to keep the selected dive "close" to where it was before an operation (whether a delete, or a reload, or something like that), then the most intuitive thing to do appears to be to select either the same dive again (if it still exists), or one very close to it in time. This helper allows us to identify the dive in the current dive list that is closest to the given time. We do this in the C code to ensure that we look at all dives in the dive_table - based on the id that is returned the UI can then figure out where this dive is currently shown. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-11VPM-B profile: declare CVA iteration variables within each loopGravatar Rick Walsh
The variables that control each CVA iteration should be declared at the start of each loop so that the values are carried over from one iteration to the next. Signed-off-by: Rick Walsh <rickmwalsh@gmail.com> Signed-off-by: Robert C. Helling <helling@atdotde.de>
2016-04-11Fix time of first ceiling calculationGravatar Robert C. Helling
In our verision of VPM-B for real dives, we take as the deco time the difference between the time of the deepest ceiling and the time when the ceiling clears. When the display of ceilings was set to multiples of 3m this was confused, as the maximum finder had issues: First of all, it updated the time when the ceiling was the same (which was almost always the case for stepped ceilings) but changing >= to > was not enough, since then the first time a deepest stepped ceiling was reached was used. This patch uses the actual ceiling (not rounded to the next integer multiple of 3m) for this calculation to get rid of this problem. Signed-off-by: Robert C. Helling <helling@atdotde.de>
2016-04-08git storage: only sync with remote if git_local_only isn't setGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05QML UI: more hacking around with git progress reportingGravatar Dirk Hohndel
I gave up on the magic numbers and instead report simply linear progress. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-05QML UI: don't fetch the remote twice when loadingGravatar Dirk Hohndel
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-05Simplify git tracking of git tree creationGravatar Dirk Hohndel
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>