subsurface/desktop-widgets
Dirk Hohndel 7fa031b648 cloudstorage: try to pick between multiple cloud servers
The backend infrastructure will soon be able to support more than one
cloud server which automagically stay in sync with each other.

One critical requirement for that to work is that once a session was
started with one of the servers, the complete session happens with that
server - we must not switch from server to server while doing a git
transaction. To make sure that's the case, we aren't trying to use DNS
tricks to make this load balancing scheme work, but instead try to
determine at program start which server is the best one to use.

Right now this is super simplistic. Two servers, one in the US, one in
Europe. By default we use the European server (most of our users appear
to be in Europe), but if we can figure out that the client is actually
in the Americas, use the US server. We might improve that heuristic over
time, but as a first attempt it seems not entirely bogus.

The way this is implemented is a simple combination of two free
webservices that together appear to give us a very reliable estimate
which continent the user is located on.

api.ipify.org gives us our external IP address
ip-api.com gives us the continent that IP address is on

If any of this fails or takes too long to respond, we simply ignore it
since either server will work. One oddity is that if we decide to change
servers we only change the settings that are stored on disk, not the
runtime preferences. This goes back to the comment above that we have to
avoid changing servers in mid sync.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2021-04-19 12:51:01 -07:00
..
css
preferences mobile: add GF fields for ceiling calculation 2021-01-19 12:34:46 -08:00
qml statistics: convert chart to QQuickItem 2021-01-10 15:16:52 -08:00
statistics cleanup: remove empty files in desktop-widgets/statistics 2020-09-12 08:36:10 -07:00
tab-widgets desktop: query DivePlannerPointsModel for planner state 2021-04-02 13:53:23 -07:00
about.cpp cleanup: fix deprecated QFlags use 2020-10-26 19:27:03 -07:00
about.h cleanup: fix deprecated QFlags use 2020-10-26 19:27:03 -07:00
about.ui Use icons relative path. 2017-11-30 23:14:46 -08:00
addfilterpreset.ui filter: create a primitive "create filter preset" dialog 2020-09-29 16:13:03 -07:00
btdeviceselectiondialog.cpp desktop: minor tweak for dark modes 2020-11-07 15:23:53 -08:00
btdeviceselectiondialog.h cleanup: remove QPointer instances 2020-12-17 13:03:56 -08:00
btdeviceselectiondialog.ui Desktop: add checkbox to show all BT devices 2019-02-14 09:05:58 -08:00
CMakeLists.txt desktop: add statistics widget dummy and application state 2021-01-03 13:41:15 -08:00
configuredivecomputerdialog.cpp cleanup: use safe connect() in ConfigureDiveComputerDialog 2020-10-06 10:38:45 -07:00
configuredivecomputerdialog.h cleanup: use safe connect() in ConfigureDiveComputerDialog 2020-10-06 10:38:45 -07:00
configuredivecomputerdialog.ui Configure ostc3: Remove obsoleted setting 2018-04-27 21:33:47 +03:00
divecomponentselection.ui Add various enhancements to profile export and dive data copy 2019-02-07 16:06:43 +01:00
divelistview.cpp desktop: disable animation when selecting multiple dives 2021-02-10 14:33:15 -08:00
divelistview.h desktop: init dive list header actions in constructor 2020-12-12 15:52:40 -08:00
divelogexportdialog.cpp profile: remove force parameter from ProfileWidget2::plotDive() 2021-04-10 14:15:35 -07:00
divelogexportdialog.h desktop-widgets: move export functions to shared class 2019-12-03 21:30:39 -08:00
divelogexportdialog.ui Reorganise and reword divelog export panel 2020-04-18 12:08:48 -07:00
divelogimportdialog.cpp cleanup: fix deprecated role 2020-10-26 19:27:03 -07:00
divelogimportdialog.h parser: replace params[] code by new xml_params struct 2020-10-23 18:17:02 -07:00
divelogimportdialog.ui Use icons relative path. 2017-11-30 23:14:46 -08:00
divepicturewidget.cpp cleanup: remove unnecessary includes from divepicturewidget.cpp 2020-12-03 10:32:20 -08:00
divepicturewidget.h Cleanup: remove DivePictureThumbnailThread 2020-05-06 13:58:09 -07:00
diveplanner.cpp planner: remove DivePlannerPointsModel::setRecalc() 2021-04-02 13:53:23 -07:00
diveplanner.h profile: move DiveHandler to profile-widget folder 2020-12-12 15:52:40 -08:00
diveplanner.ui Choose water presets from a qcombobox in planner, custom value possible 2018-03-02 08:38:22 -08:00
diveshareexportdialog.cpp desktop-widgets: diveDiveShareExportDialog add signal handling 2019-12-11 11:08:51 -05:00
diveshareexportdialog.h desktop-widgets: diveDiveShareExportDialog add signal handling 2019-12-11 11:08:51 -05:00
diveshareexportdialog.ui
divesiteimportdialog.cpp code cleanup: add empty table structures 2020-01-10 02:37:03 +09:00
divesiteimportdialog.h Create DivesiteImportDialog to select sites to import 2019-05-06 10:48:44 +02:00
divesiteimportdialog.ui Create DivesiteImportDialog to select sites to import 2019-05-06 10:48:44 +02:00
downloadfromdivecomputer.cpp cleanup: fix deprecated QFlags use 2020-10-26 19:27:03 -07:00
downloadfromdivecomputer.h cleanup: fix deprecated QFlags use 2020-10-26 19:27:03 -07:00
downloadfromdivecomputer.ui Desktop/remember DCs: avoid highlighted button 2018-09-23 11:49:30 -07:00
filterconstraintwidget.cpp preferences: create global settingsChanged signal 2020-12-12 15:52:40 -08:00
filterconstraintwidget.h filter: add a filter constraint widget 2020-09-29 16:13:03 -07:00
filterwidget.cpp desktop: fold ApplicationState into MainWindow 2021-02-17 07:26:55 -08:00
filterwidget.h cleanup: rename FilterWidget2 to FilterWidget 2020-09-29 16:14:31 -07:00
filterwidget.ui cleanup: rename FilterWidget2 to FilterWidget 2020-09-29 16:14:31 -07:00
findmovedimagesdialog.cpp media: move picture function from dive.c to picture.c 2020-04-10 10:53:03 -07:00
findmovedimagesdialog.h Dive pictures: implement FindMovedImagesDialog 2018-07-04 02:27:36 +08:00
findmovedimagesdialog.ui UI change of "images"/"photo" to "media" or "media files" 2018-07-15 09:38:12 -07:00
groupedlineedit.cpp desktop: avoid crashes on drag&drop in GroupedLineEdit 2020-10-24 09:49:36 -07:00
groupedlineedit.h Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
importgps.cpp cleanup: move declaration of utc_mk* functions to new subsurface-time.h header 2020-05-01 09:42:31 -07:00
importgps.h core: move GPX parsing into core 2020-01-24 09:51:02 -08:00
importgps.ui Typo: UCT to UTC 2020-03-19 08:37:59 -07:00
kmessagewidget.cpp
kmessagewidget.h Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
listfilter.ui Start to implement a simplified version of the filter widget 2018-12-14 01:05:18 +08:00
locationinformation.cpp desktop: fold ApplicationState into MainWindow 2021-02-17 07:26:55 -08:00
locationinformation.h cleanup: fix compiler warning 2020-08-24 08:31:38 -07:00
locationinformation.ui Desktop: Import dive coordinates directly from GPS 2020-01-24 09:51:02 -08:00
mainwindow.cpp cloudstorage: try to pick between multiple cloud servers 2021-04-19 12:51:01 -07:00
mainwindow.h profile: remove enableToolbar() signal 2021-04-10 14:15:35 -07:00
mainwindow.ui desktop: remove the view-state 2021-02-06 10:00:39 -08:00
mapwidget.cpp desktop: do own memory management of quadrant widgets 2021-02-06 10:00:39 -08:00
mapwidget.h Cleanup: lower-case filenames in core/subsurface-qt/ 2020-02-04 02:16:46 +01:00
modeldelegates.cpp core: remove the "no-name" tank info 2020-12-13 11:49:59 -08:00
modeldelegates.h cleanup: use pointer-to-member style connect for ComboBoxDelegate 2020-05-16 10:09:35 -07:00
notificationwidget.cpp Use queued connection to thread-safe MainWindow error handling 2018-01-31 14:47:26 +01:00
notificationwidget.h Use queued connection to thread-safe MainWindow error handling 2018-01-31 14:47:26 +01:00
plannerDetails.ui
plannerSettings.ui Planner: Add option to treat O2 as narcotic 2019-10-31 00:30:38 -07:00
printdialog.cpp planner: pass in_planner down to TemplateLayout 2021-02-17 07:26:55 -08:00
printdialog.h planner: pass in_planner down to TemplateLayout 2021-02-17 07:26:55 -08:00
printer.cpp profile: remove force parameter from ProfileWidget2::plotDive() 2021-04-10 14:15:35 -07:00
printer.h planner: pass in_planner down to TemplateLayout 2021-02-17 07:26:55 -08:00
printoptions.cpp printing: move #includes from headers to source files 2020-12-17 13:03:56 -08:00
printoptions.h cleanup: make templateOptions and printOptions reference types 2020-12-17 13:03:56 -08:00
printoptions.ui Set printer resolution 2020-09-03 11:46:16 -07:00
qtwaitingspinner.cpp
qtwaitingspinner.h
renumber.ui Use icons relative path. 2017-11-30 23:14:46 -08:00
searchbar.ui Use better aliases for icons. 2017-11-30 23:14:46 -08:00
setpoint.ui Use icons relative path. 2017-11-30 23:14:46 -08:00
shiftimagetimes.ui UI change of "images"/"photo" to "media" or "media files" 2018-07-15 09:38:12 -07:00
shifttimes.ui Use icons relative path. 2017-11-30 23:14:46 -08:00
simplewidgets.cpp undo: remove invalidate_dive_cache call from MainTab 2021-01-11 08:42:17 -08:00
simplewidgets.h desktop: move MinMaxAvgWidget to TabDiveStatistics 2020-10-26 20:56:56 -07:00
starwidget.cpp cleanup: remove reference to deprecated enum value 2020-10-26 19:27:03 -07:00
starwidget.h cleanup: fix deprecated QFlags use 2020-10-26 19:27:03 -07:00
statswidget.cpp stats: fix visibility check of the statistics tab on desktop 2021-03-31 13:41:39 +02:00
statswidget.h stats: fix visibility check of the statistics tab on desktop 2021-03-31 13:41:39 +02:00
statswidget.ui statistics: implement primitive "restrict to selection" feature 2021-02-13 13:02:54 -08:00
subsurfacewebservices.cpp cleanup: fix deprecated QFlags use 2020-10-26 19:27:03 -07:00
subsurfacewebservices.h cleanup: fix deprecated QFlags use 2020-10-26 19:27:03 -07:00
tableview.cpp desktop: fix saving of column-widths of device and site tables 2020-11-07 11:37:51 -08:00
tableview.h Desktop: don't connect to remove() slot of model from TableModel 2019-12-05 10:14:25 -08:00
tableview.ui
tagwidget.cpp cleanup: SkipEmptyParts syntax has changed 2020-10-26 19:27:03 -07:00
tagwidget.h cleanup: remove TagWidget::fixPopupPosition() 2020-10-24 09:50:39 -07:00
templateedit.cpp planner: pass in_planner down to TemplateLayout 2021-02-17 07:26:55 -08:00
templateedit.h printing: move #includes from headers to source files 2020-12-17 13:03:56 -08:00
templateedit.ui
templatelayout.cpp planner: pass in_planner down to TemplateLayout 2021-02-17 07:26:55 -08:00
templatelayout.h planner: pass in_planner down to TemplateLayout 2021-02-17 07:26:55 -08:00
textedit.cpp Desktop: create new custom TextEdit widget for notes-field 2019-04-12 18:19:07 +03:00
textedit.h Desktop: create new custom TextEdit widget for notes-field 2019-04-12 18:19:07 +03:00
tripselectiondialog.cpp desktop: add trip selection dialog 2020-10-03 10:01:13 -07:00
tripselectiondialog.h desktop: add trip selection dialog 2020-10-03 10:01:13 -07:00
tripselectiondialog.ui desktop: add trip selection dialog 2020-10-03 10:01:13 -07:00
updatemanager.cpp desktop/update-check: fix logic when to ask about update check 2021-01-06 10:18:23 -08:00
updatemanager.h
urldialog.ui UI change of "images"/"photo" to "media" or "media files" 2018-07-15 09:38:12 -07:00
usermanual.cpp cleanup: don't initialize flags with just an integer 2020-10-26 19:27:03 -07:00
usermanual.h Remove partial support for QWebEngine 2019-03-20 08:45:02 -07:00
webservices.ui Use icons relative path. 2017-11-30 23:14:46 -08:00