mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
core: include divesite table directly in divelog
Having this as a pointer is an artifact from the C/C++ split. The divesitetable header is small enough so that we can include it directly. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
7792f54a73
commit
5af9d28291
29 changed files with 90 additions and 91 deletions
|
@ -309,8 +309,8 @@ std::vector<const dive_site *> getDiveSitesToExport(bool selectedOnly)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
res.reserve(divelog.sites->size());
|
res.reserve(divelog.sites.size());
|
||||||
for (const auto &ds: *divelog.sites) {
|
for (const auto &ds: divelog.sites) {
|
||||||
if (ds->is_empty())
|
if (ds->is_empty())
|
||||||
continue;
|
continue;
|
||||||
if (selectedOnly && !ds->is_selected())
|
if (selectedOnly && !ds->is_selected())
|
||||||
|
@ -319,7 +319,7 @@ std::vector<const dive_site *> getDiveSitesToExport(bool selectedOnly)
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
/* walk the dive site list */
|
/* walk the dive site list */
|
||||||
for (const auto &ds: *divelog.sites)
|
for (const auto &ds: divelog.sites)
|
||||||
res.push_back(ds.get());
|
res.push_back(ds.get());
|
||||||
#endif
|
#endif
|
||||||
return res;
|
return res;
|
||||||
|
|
|
@ -132,7 +132,7 @@ DivesAndTripsToAdd DiveListBase::removeDives(DivesAndSitesToRemove &divesAndSite
|
||||||
divesAndSitesToDelete.dives.clear();
|
divesAndSitesToDelete.dives.clear();
|
||||||
|
|
||||||
for (dive_site *ds: divesAndSitesToDelete.sites) {
|
for (dive_site *ds: divesAndSitesToDelete.sites) {
|
||||||
auto res = divelog.sites->pull(ds);
|
auto res = divelog.sites.pull(ds);
|
||||||
sitesToAdd.push_back(std::move(res.ptr));
|
sitesToAdd.push_back(std::move(res.ptr));
|
||||||
emit diveListNotifier.diveSiteDeleted(ds, res.idx);
|
emit diveListNotifier.diveSiteDeleted(ds, res.idx);
|
||||||
}
|
}
|
||||||
|
@ -207,7 +207,7 @@ DivesAndSitesToRemove DiveListBase::addDives(DivesAndTripsToAdd &toAdd)
|
||||||
|
|
||||||
// Finally, add any necessary dive sites
|
// Finally, add any necessary dive sites
|
||||||
for (std::unique_ptr<dive_site> &ds: toAdd.sites) {
|
for (std::unique_ptr<dive_site> &ds: toAdd.sites) {
|
||||||
auto res = divelog.sites->register_site(std::move(ds));
|
auto res = divelog.sites.register_site(std::move(ds));
|
||||||
sites.push_back(res.ptr);
|
sites.push_back(res.ptr);
|
||||||
emit diveListNotifier.diveSiteAdded(sites.back(), res.idx);
|
emit diveListNotifier.diveSiteAdded(sites.back(), res.idx);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ static std::vector<dive_site *> addDiveSites(std::vector<std::unique_ptr<dive_si
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add dive site to core, but remember a non-owning pointer first.
|
// Add dive site to core, but remember a non-owning pointer first.
|
||||||
auto add_res = divelog.sites->put(std::move(ds)); // Return ownership to backend.
|
auto add_res = divelog.sites.put(std::move(ds)); // Return ownership to backend.
|
||||||
res.push_back(add_res.ptr);
|
res.push_back(add_res.ptr);
|
||||||
emit diveListNotifier.diveSiteAdded(res.back(), add_res.idx); // Inform frontend of new dive site.
|
emit diveListNotifier.diveSiteAdded(res.back(), add_res.idx); // Inform frontend of new dive site.
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ static std::vector<std::unique_ptr<dive_site>> removeDiveSites(std::vector<dive_
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove dive site from core and take ownership.
|
// Remove dive site from core and take ownership.
|
||||||
auto pull_res = divelog.sites->pull(ds);
|
auto pull_res = divelog.sites.pull(ds);
|
||||||
res.push_back(std::move(pull_res.ptr));
|
res.push_back(std::move(pull_res.ptr));
|
||||||
emit diveListNotifier.diveSiteDeleted(ds, pull_res.idx); // Inform frontend of removed dive site.
|
emit diveListNotifier.diveSiteDeleted(ds, pull_res.idx); // Inform frontend of removed dive site.
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@ ImportDiveSites::ImportDiveSites(dive_site_table sites, const QString &source)
|
||||||
for (auto &new_ds: sites) {
|
for (auto &new_ds: sites) {
|
||||||
// Don't import dive sites that already exist.
|
// Don't import dive sites that already exist.
|
||||||
// We might want to be smarter here and merge dive site data, etc.
|
// We might want to be smarter here and merge dive site data, etc.
|
||||||
if (divelog.sites->get_same(*new_ds))
|
if (divelog.sites.get_same(*new_ds))
|
||||||
continue;
|
continue;
|
||||||
sitesToAdd.push_back(std::move(new_ds));
|
sitesToAdd.push_back(std::move(new_ds));
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,7 @@ void DeleteDiveSites::undo()
|
||||||
PurgeUnusedDiveSites::PurgeUnusedDiveSites()
|
PurgeUnusedDiveSites::PurgeUnusedDiveSites()
|
||||||
{
|
{
|
||||||
setText(Command::Base::tr("purge unused dive sites"));
|
setText(Command::Base::tr("purge unused dive sites"));
|
||||||
for (const auto &ds: *divelog.sites) {
|
for (const auto &ds: divelog.sites) {
|
||||||
if (ds->dives.empty())
|
if (ds->dives.empty())
|
||||||
sitesToRemove.push_back(ds.get());
|
sitesToRemove.push_back(ds.get());
|
||||||
}
|
}
|
||||||
|
@ -382,7 +382,7 @@ ApplyGPSFixes::ApplyGPSFixes(const std::vector<DiveAndLocation> &fixes)
|
||||||
siteLocations.push_back({ ds, dl.location });
|
siteLocations.push_back({ ds, dl.location });
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ds = divelog.sites->create(dl.name.toStdString());
|
ds = divelog.sites.create(dl.name.toStdString());
|
||||||
ds->location = dl.location;
|
ds->location = dl.location;
|
||||||
ds->add_dive(dl.d);
|
ds->add_dive(dl.d);
|
||||||
dl.d->dive_site = nullptr; // This will be set on redo()
|
dl.d->dive_site = nullptr; // This will be set on redo()
|
||||||
|
|
|
@ -400,7 +400,7 @@ EditDiveSiteNew::EditDiveSiteNew(const QString &newName, bool currentDiveOnly) :
|
||||||
void EditDiveSiteNew::undo()
|
void EditDiveSiteNew::undo()
|
||||||
{
|
{
|
||||||
EditDiveSite::undo();
|
EditDiveSite::undo();
|
||||||
auto res = divelog.sites->pull(diveSiteToRemove);
|
auto res = divelog.sites.pull(diveSiteToRemove);
|
||||||
diveSiteToAdd = std::move(res.ptr);
|
diveSiteToAdd = std::move(res.ptr);
|
||||||
emit diveListNotifier.diveSiteDeleted(diveSiteToRemove, res.idx); // Inform frontend of removed dive site.
|
emit diveListNotifier.diveSiteDeleted(diveSiteToRemove, res.idx); // Inform frontend of removed dive site.
|
||||||
diveSiteToRemove = nullptr;
|
diveSiteToRemove = nullptr;
|
||||||
|
@ -408,7 +408,7 @@ void EditDiveSiteNew::undo()
|
||||||
|
|
||||||
void EditDiveSiteNew::redo()
|
void EditDiveSiteNew::redo()
|
||||||
{
|
{
|
||||||
auto res = divelog.sites->register_site(std::move(diveSiteToAdd)); // Return ownership to backend.
|
auto res = divelog.sites.register_site(std::move(diveSiteToAdd)); // Return ownership to backend.
|
||||||
diveSiteToRemove = res.ptr;
|
diveSiteToRemove = res.ptr;
|
||||||
emit diveListNotifier.diveSiteAdded(diveSiteToRemove, res.idx); // Inform frontend of new dive site.
|
emit diveListNotifier.diveSiteAdded(diveSiteToRemove, res.idx); // Inform frontend of new dive site.
|
||||||
EditDiveSite::redo();
|
EditDiveSite::redo();
|
||||||
|
@ -1394,7 +1394,7 @@ EditDive::EditDive(dive *oldDiveIn, dive *newDiveIn, dive_site *createDs, dive_s
|
||||||
void EditDive::undo()
|
void EditDive::undo()
|
||||||
{
|
{
|
||||||
if (siteToRemove) {
|
if (siteToRemove) {
|
||||||
auto res = divelog.sites->pull(siteToRemove);
|
auto res = divelog.sites.pull(siteToRemove);
|
||||||
siteToAdd = std::move(res.ptr);
|
siteToAdd = std::move(res.ptr);
|
||||||
emit diveListNotifier.diveSiteDeleted(siteToRemove, res.idx); // Inform frontend of removed dive site.
|
emit diveListNotifier.diveSiteDeleted(siteToRemove, res.idx); // Inform frontend of removed dive site.
|
||||||
}
|
}
|
||||||
|
@ -1406,7 +1406,7 @@ void EditDive::undo()
|
||||||
void EditDive::redo()
|
void EditDive::redo()
|
||||||
{
|
{
|
||||||
if (siteToAdd) {
|
if (siteToAdd) {
|
||||||
auto res = divelog.sites->register_site(std::move(siteToAdd)); // Return ownership to backend.
|
auto res = divelog.sites.register_site(std::move(siteToAdd)); // Return ownership to backend.
|
||||||
siteToRemove = res.ptr;
|
siteToRemove = res.ptr;
|
||||||
emit diveListNotifier.diveSiteAdded(siteToRemove, res.idx); // Inform frontend of new dive site.
|
emit diveListNotifier.diveSiteAdded(siteToRemove, res.idx); // Inform frontend of new dive site.
|
||||||
}
|
}
|
||||||
|
|
|
@ -217,7 +217,7 @@ void AddPictures::undo()
|
||||||
|
|
||||||
// Remove dive sites
|
// Remove dive sites
|
||||||
for (dive_site *siteToRemove: sitesToRemove) {
|
for (dive_site *siteToRemove: sitesToRemove) {
|
||||||
auto res = divelog.sites->pull(siteToRemove);
|
auto res = divelog.sites.pull(siteToRemove);
|
||||||
sitesToAdd.push_back(std::move(res.ptr));
|
sitesToAdd.push_back(std::move(res.ptr));
|
||||||
emit diveListNotifier.diveSiteDeleted(siteToRemove, res.idx); // Inform frontend of removed dive site.
|
emit diveListNotifier.diveSiteDeleted(siteToRemove, res.idx); // Inform frontend of removed dive site.
|
||||||
}
|
}
|
||||||
|
@ -228,7 +228,7 @@ void AddPictures::redo()
|
||||||
{
|
{
|
||||||
// Add dive sites
|
// Add dive sites
|
||||||
for (std::unique_ptr<dive_site> &siteToAdd: sitesToAdd) {
|
for (std::unique_ptr<dive_site> &siteToAdd: sitesToAdd) {
|
||||||
auto res = divelog.sites->register_site(std::move(siteToAdd)); // Return ownership to backend.
|
auto res = divelog.sites.register_site(std::move(siteToAdd)); // Return ownership to backend.
|
||||||
sitesToRemove.push_back(res.ptr);
|
sitesToRemove.push_back(res.ptr);
|
||||||
emit diveListNotifier.diveSiteAdded(sitesToRemove.back(), res.idx); // Inform frontend of new dive site.
|
emit diveListNotifier.diveSiteAdded(sitesToRemove.back(), res.idx); // Inform frontend of new dive site.
|
||||||
}
|
}
|
||||||
|
|
|
@ -211,9 +211,9 @@ static char *dt_dive_parser(unsigned char *runner, struct dive *dt_dive, struct
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
std::string buffer2 = std::string((char *)locality) + " " + (char *)dive_point;
|
std::string buffer2 = std::string((char *)locality) + " " + (char *)dive_point;
|
||||||
struct dive_site *ds = log->sites->get_by_name(buffer2);
|
struct dive_site *ds = log->sites.get_by_name(buffer2);
|
||||||
if (!ds)
|
if (!ds)
|
||||||
ds = log->sites->create(buffer2);
|
ds = log->sites.create(buffer2);
|
||||||
ds->add_dive(dt_dive);
|
ds->add_dive(dt_dive);
|
||||||
}
|
}
|
||||||
free(locality);
|
free(locality);
|
||||||
|
|
|
@ -931,7 +931,7 @@ void add_imported_dives(struct divelog &import_log, int flags)
|
||||||
|
|
||||||
/* Add new dive sites */
|
/* Add new dive sites */
|
||||||
for (auto &ds: dive_sites_to_add)
|
for (auto &ds: dive_sites_to_add)
|
||||||
divelog.sites->register_site(std::move(ds));
|
divelog.sites.register_site(std::move(ds));
|
||||||
|
|
||||||
/* Add new devices */
|
/* Add new devices */
|
||||||
for (auto &dev: devices_to_add)
|
for (auto &dev: devices_to_add)
|
||||||
|
@ -1047,13 +1047,13 @@ process_imported_dives_result process_imported_dives(struct divelog &import_log,
|
||||||
autogroup_dives(import_log.dives, *import_log.trips);
|
autogroup_dives(import_log.dives, *import_log.trips);
|
||||||
|
|
||||||
/* If dive sites already exist, use the existing versions. */
|
/* If dive sites already exist, use the existing versions. */
|
||||||
for (auto &new_ds: *import_log.sites) {
|
for (auto &new_ds: import_log.sites) {
|
||||||
/* Check if it dive site is actually used by new dives. */
|
/* Check if it dive site is actually used by new dives. */
|
||||||
if (std::none_of(import_log.dives.begin(), import_log.dives.end(), [ds=new_ds.get()]
|
if (std::none_of(import_log.dives.begin(), import_log.dives.end(), [ds=new_ds.get()]
|
||||||
(auto &d) { return d->dive_site == ds; }))
|
(auto &d) { return d->dive_site == ds; }))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
struct dive_site *old_ds = divelog.sites->get_same(*new_ds);
|
struct dive_site *old_ds = divelog.sites.get_same(*new_ds);
|
||||||
if (!old_ds) {
|
if (!old_ds) {
|
||||||
/* Dive site doesn't exist. Add it to list of dive sites to be added. */
|
/* Dive site doesn't exist. Add it to list of dive sites to be added. */
|
||||||
new_ds->dives.clear(); /* Caller is responsible for adding dives to site */
|
new_ds->dives.clear(); /* Caller is responsible for adding dives to site */
|
||||||
|
@ -1066,7 +1066,7 @@ process_imported_dives_result process_imported_dives(struct divelog &import_log,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
import_log.sites->clear();
|
import_log.sites.clear();
|
||||||
|
|
||||||
/* Merge overlapping trips. Since both trip tables are sorted, we
|
/* Merge overlapping trips. Since both trip tables are sorted, we
|
||||||
* could be smarter here, but realistically not a whole lot of trips
|
* could be smarter here, but realistically not a whole lot of trips
|
||||||
|
|
|
@ -12,7 +12,6 @@ struct divelog divelog;
|
||||||
|
|
||||||
divelog::divelog() :
|
divelog::divelog() :
|
||||||
trips(std::make_unique<trip_table>()),
|
trips(std::make_unique<trip_table>()),
|
||||||
sites(std::make_unique<dive_site_table>()),
|
|
||||||
filter_presets(std::make_unique<filter_preset_table>()),
|
filter_presets(std::make_unique<filter_preset_table>()),
|
||||||
autogroup(false)
|
autogroup(false)
|
||||||
{
|
{
|
||||||
|
@ -67,7 +66,7 @@ void divelog::delete_multiple_dives(const std::vector<dive *> &dives_to_delete)
|
||||||
void divelog::clear()
|
void divelog::clear()
|
||||||
{
|
{
|
||||||
dives.clear();
|
dives.clear();
|
||||||
sites->clear();
|
sites.clear();
|
||||||
trips->clear();
|
trips->clear();
|
||||||
devices.clear();
|
devices.clear();
|
||||||
filter_presets->clear();
|
filter_presets->clear();
|
||||||
|
|
|
@ -4,19 +4,19 @@
|
||||||
#define DIVELOG_H
|
#define DIVELOG_H
|
||||||
|
|
||||||
#include "divelist.h"
|
#include "divelist.h"
|
||||||
|
#include "divesitetable.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
struct trip_table;
|
struct trip_table;
|
||||||
class dive_site_table;
|
|
||||||
struct device;
|
struct device;
|
||||||
struct filter_preset_table;
|
struct filter_preset_table;
|
||||||
|
|
||||||
struct divelog {
|
struct divelog {
|
||||||
dive_table dives;
|
dive_table dives;
|
||||||
std::unique_ptr<trip_table> trips;
|
std::unique_ptr<trip_table> trips;
|
||||||
std::unique_ptr<dive_site_table> sites;
|
dive_site_table sites;
|
||||||
std::vector<device> devices;
|
std::vector<device> devices;
|
||||||
std::unique_ptr<filter_preset_table> filter_presets;
|
std::unique_ptr<filter_preset_table> filter_presets;
|
||||||
bool autogroup;
|
bool autogroup;
|
||||||
|
|
|
@ -181,7 +181,7 @@ static int cobalt_dive(void *param, int, char **data, char **)
|
||||||
|
|
||||||
if (location && location_site) {
|
if (location && location_site) {
|
||||||
std::string tmp = std::string(location) + " / " + location_site;
|
std::string tmp = std::string(location) + " / " + location_site;
|
||||||
state->log->sites->find_or_create(tmp)->add_dive(state->cur_dive.get());
|
state->log->sites.find_or_create(tmp)->add_dive(state->cur_dive.get());
|
||||||
}
|
}
|
||||||
free(location);
|
free(location);
|
||||||
free(location_site);
|
free(location_site);
|
||||||
|
|
|
@ -276,7 +276,7 @@ static int divinglog_dive(void *param, int, char **data, char **)
|
||||||
state->cur_dive->when = (time_t)(atol(data[1]));
|
state->cur_dive->when = (time_t)(atol(data[1]));
|
||||||
|
|
||||||
if (data[2])
|
if (data[2])
|
||||||
state->log->sites->find_or_create(std::string(data[2]))->add_dive(state->cur_dive.get());
|
state->log->sites.find_or_create(std::string(data[2]))->add_dive(state->cur_dive.get());
|
||||||
|
|
||||||
if (data[3])
|
if (data[3])
|
||||||
utf8_string_std(data[3], &state->cur_dive->buddy);
|
utf8_string_std(data[3], &state->cur_dive->buddy);
|
||||||
|
|
|
@ -617,7 +617,7 @@ static void parse_string_field(device_data_t *devdata, struct dive *dive, dc_fie
|
||||||
|
|
||||||
if (location.lat.udeg && location.lon.udeg) {
|
if (location.lat.udeg && location.lon.udeg) {
|
||||||
unregister_dive_from_dive_site(dive);
|
unregister_dive_from_dive_site(dive);
|
||||||
devdata->log->sites->create(std::string(str->value), location)->add_dive(dive);
|
devdata->log->sites.create(std::string(str->value), location)->add_dive(dive);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -437,7 +437,7 @@ int try_to_open_liquivision(const char *, std::string &mem, struct divelog *log)
|
||||||
}
|
}
|
||||||
ptr += 4;
|
ptr += 4;
|
||||||
|
|
||||||
parse_dives(log_version, buf + ptr, buf_size - ptr, log->dives, *log->sites);
|
parse_dives(log_version, buf + ptr, buf_size - ptr, log->dives, log->sites);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -175,9 +175,9 @@ static void parse_dive_gps(char *line, struct git_parser_state *state)
|
||||||
|
|
||||||
parse_location(line, &location);
|
parse_location(line, &location);
|
||||||
if (!ds) {
|
if (!ds) {
|
||||||
ds = state->log->sites->get_by_gps(&location);
|
ds = state->log->sites.get_by_gps(&location);
|
||||||
if (!ds)
|
if (!ds)
|
||||||
ds = state->log->sites->create(std::string(), location);
|
ds = state->log->sites.create(std::string(), location);
|
||||||
ds->add_dive(state->active_dive.get());
|
ds->add_dive(state->active_dive.get());
|
||||||
} else {
|
} else {
|
||||||
if (dive_site_has_gps_location(ds) && ds->location != location) {
|
if (dive_site_has_gps_location(ds) && ds->location != location) {
|
||||||
|
@ -221,9 +221,9 @@ static void parse_dive_location(char *, struct git_parser_state *state)
|
||||||
std::string name = get_first_converted_string(state);
|
std::string name = get_first_converted_string(state);
|
||||||
struct dive_site *ds = get_dive_site_for_dive(state->active_dive.get());
|
struct dive_site *ds = get_dive_site_for_dive(state->active_dive.get());
|
||||||
if (!ds) {
|
if (!ds) {
|
||||||
ds = state->log->sites->get_by_name(name);
|
ds = state->log->sites.get_by_name(name);
|
||||||
if (!ds)
|
if (!ds)
|
||||||
ds = state->log->sites->create(name);
|
ds = state->log->sites.create(name);
|
||||||
ds->add_dive(state->active_dive.get());
|
ds->add_dive(state->active_dive.get());
|
||||||
} else {
|
} else {
|
||||||
// we already had a dive site linked to the dive
|
// we already had a dive site linked to the dive
|
||||||
|
@ -252,7 +252,7 @@ static void parse_dive_notes(char *, struct git_parser_state *state)
|
||||||
{ state->active_dive->notes = get_first_converted_string(state); }
|
{ state->active_dive->notes = get_first_converted_string(state); }
|
||||||
|
|
||||||
static void parse_dive_divesiteid(char *line, struct git_parser_state *state)
|
static void parse_dive_divesiteid(char *line, struct git_parser_state *state)
|
||||||
{ state->log->sites->get_by_uuid(get_hex(line))->add_dive(state->active_dive.get()); }
|
{ state->log->sites.get_by_uuid(get_hex(line))->add_dive(state->active_dive.get()); }
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We can have multiple tags.
|
* We can have multiple tags.
|
||||||
|
@ -1698,7 +1698,7 @@ static int parse_site_entry(struct git_parser_state *state, const git_tree_entry
|
||||||
if (*suffix == '\0')
|
if (*suffix == '\0')
|
||||||
return report_error("Dive site without uuid");
|
return report_error("Dive site without uuid");
|
||||||
uint32_t uuid = strtoul(suffix, NULL, 16);
|
uint32_t uuid = strtoul(suffix, NULL, 16);
|
||||||
state->active_site = state->log->sites->alloc_or_get(uuid);
|
state->active_site = state->log->sites.alloc_or_get(uuid);
|
||||||
git_blob *blob = git_tree_entry_blob(state->repo, entry);
|
git_blob *blob = git_tree_entry_blob(state->repo, entry);
|
||||||
if (!blob)
|
if (!blob)
|
||||||
return report_error("Unable to read dive site file");
|
return report_error("Unable to read dive site file");
|
||||||
|
|
|
@ -560,7 +560,7 @@ static void dive_site(const char *buffer, struct dive *d, struct parser_state *s
|
||||||
{
|
{
|
||||||
uint32_t uuid;
|
uint32_t uuid;
|
||||||
hex_value(buffer, &uuid);
|
hex_value(buffer, &uuid);
|
||||||
state->log->sites->get_by_uuid(uuid)->add_dive(d);
|
state->log->sites.get_by_uuid(uuid)->add_dive(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void get_notrip(const char *buffer, bool *notrip)
|
static void get_notrip(const char *buffer, bool *notrip)
|
||||||
|
@ -977,9 +977,9 @@ static void divinglog_place(const char *place, struct dive *d, struct parser_sta
|
||||||
!state->city.empty() ? state->city.c_str() : "",
|
!state->city.empty() ? state->city.c_str() : "",
|
||||||
!state->country.empty() ? ", " : "",
|
!state->country.empty() ? ", " : "",
|
||||||
!state->country.empty() ? state->country.c_str() : "");
|
!state->country.empty() ? state->country.c_str() : "");
|
||||||
ds = state->log->sites->get_by_name(buffer);
|
ds = state->log->sites.get_by_name(buffer);
|
||||||
if (!ds)
|
if (!ds)
|
||||||
ds = state->log->sites->create(buffer);
|
ds = state->log->sites.create(buffer);
|
||||||
ds->add_dive(d);
|
ds->add_dive(d);
|
||||||
|
|
||||||
// TODO: capture the country / city info in the taxonomy instead
|
// TODO: capture the country / city info in the taxonomy instead
|
||||||
|
@ -1147,7 +1147,7 @@ static void gps_lat(const char *buffer, struct dive *dive, struct parser_state *
|
||||||
|
|
||||||
location.lat = parse_degrees(buffer, &end);
|
location.lat = parse_degrees(buffer, &end);
|
||||||
if (!ds) {
|
if (!ds) {
|
||||||
state->log->sites->create(std::string(), location)->add_dive(dive);
|
state->log->sites.create(std::string(), location)->add_dive(dive);
|
||||||
} else {
|
} else {
|
||||||
if (ds->location.lat.udeg && ds->location.lat.udeg != location.lat.udeg)
|
if (ds->location.lat.udeg && ds->location.lat.udeg != location.lat.udeg)
|
||||||
report_info("Oops, changing the latitude of existing dive site id %8x name %s; not good", ds->uuid,
|
report_info("Oops, changing the latitude of existing dive site id %8x name %s; not good", ds->uuid,
|
||||||
|
@ -1164,7 +1164,7 @@ static void gps_long(const char *buffer, struct dive *dive, struct parser_state
|
||||||
|
|
||||||
location.lon = parse_degrees(buffer, &end);
|
location.lon = parse_degrees(buffer, &end);
|
||||||
if (!ds) {
|
if (!ds) {
|
||||||
state->log->sites->create(std::string(), location)->add_dive(dive);
|
state->log->sites.create(std::string(), location)->add_dive(dive);
|
||||||
} else {
|
} else {
|
||||||
if (ds->location.lon.udeg && ds->location.lon.udeg != location.lon.udeg)
|
if (ds->location.lon.udeg && ds->location.lon.udeg != location.lon.udeg)
|
||||||
report_info("Oops, changing the longitude of existing dive site id %8x name %s; not good", ds->uuid,
|
report_info("Oops, changing the longitude of existing dive site id %8x name %s; not good", ds->uuid,
|
||||||
|
@ -1195,14 +1195,14 @@ static void gps_in_dive(const char *buffer, struct dive *dive, struct parser_sta
|
||||||
parse_location(buffer, &location);
|
parse_location(buffer, &location);
|
||||||
if (!ds) {
|
if (!ds) {
|
||||||
// check if we have a dive site within 20 meters of that gps fix
|
// check if we have a dive site within 20 meters of that gps fix
|
||||||
ds = state->log->sites->get_by_gps_proximity(location, 20);
|
ds = state->log->sites.get_by_gps_proximity(location, 20);
|
||||||
|
|
||||||
if (ds) {
|
if (ds) {
|
||||||
// found a site nearby; in case it turns out this one had a different name let's
|
// found a site nearby; in case it turns out this one had a different name let's
|
||||||
// remember the original coordinates so we can create the correct dive site later
|
// remember the original coordinates so we can create the correct dive site later
|
||||||
state->cur_location = location;
|
state->cur_location = location;
|
||||||
} else {
|
} else {
|
||||||
ds = state->log->sites->create(std::string(), location);
|
ds = state->log->sites.create(std::string(), location);
|
||||||
}
|
}
|
||||||
ds->add_dive(dive);
|
ds->add_dive(dive);
|
||||||
} else {
|
} else {
|
||||||
|
@ -2226,7 +2226,7 @@ int parse_dlf_buffer(unsigned char *buffer, size_t size, struct divelog *log)
|
||||||
/* Measure GPS */
|
/* Measure GPS */
|
||||||
state.cur_location.lat.udeg = (int)((ptr[7] << 24) + (ptr[6] << 16) + (ptr[5] << 8) + (ptr[4] << 0));
|
state.cur_location.lat.udeg = (int)((ptr[7] << 24) + (ptr[6] << 16) + (ptr[5] << 8) + (ptr[4] << 0));
|
||||||
state.cur_location.lon.udeg = (int)((ptr[11] << 24) + (ptr[10] << 16) + (ptr[9] << 8) + (ptr[8] << 0));
|
state.cur_location.lon.udeg = (int)((ptr[11] << 24) + (ptr[10] << 16) + (ptr[9] << 8) + (ptr[8] << 0));
|
||||||
state.log->sites->create("DLF imported"s, state.cur_location)->add_dive(state.cur_dive.get());
|
state.log->sites.create("DLF imported"s, state.cur_location)->add_dive(state.cur_dive.get());
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -184,7 +184,7 @@ void dive_site_end(struct parser_state *state)
|
||||||
if (!state->cur_dive_site)
|
if (!state->cur_dive_site)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
struct dive_site *ds = state->log->sites->alloc_or_get(state->cur_dive_site->uuid);
|
struct dive_site *ds = state->log->sites.alloc_or_get(state->cur_dive_site->uuid);
|
||||||
ds->merge(*state->cur_dive_site);
|
ds->merge(*state->cur_dive_site);
|
||||||
|
|
||||||
if (verbose > 3)
|
if (verbose > 3)
|
||||||
|
@ -428,7 +428,7 @@ void add_dive_site(const char *ds_name, struct dive *dive, struct parser_state *
|
||||||
struct dive_site *ds = dive->dive_site;
|
struct dive_site *ds = dive->dive_site;
|
||||||
if (!ds) {
|
if (!ds) {
|
||||||
// if the dive doesn't have a dive site, check if there's already a dive site by this name
|
// if the dive doesn't have a dive site, check if there's already a dive site by this name
|
||||||
ds = state->log->sites->get_by_name(trimmed);
|
ds = state->log->sites.get_by_name(trimmed);
|
||||||
}
|
}
|
||||||
if (ds) {
|
if (ds) {
|
||||||
// we have a dive site, let's hope there isn't a different name
|
// we have a dive site, let's hope there isn't a different name
|
||||||
|
@ -439,12 +439,12 @@ void add_dive_site(const char *ds_name, struct dive *dive, struct parser_state *
|
||||||
// but wait, we could have gotten this one based on GPS coords and could
|
// but wait, we could have gotten this one based on GPS coords and could
|
||||||
// have had two different names for the same site... so let's search the other
|
// have had two different names for the same site... so let's search the other
|
||||||
// way around
|
// way around
|
||||||
struct dive_site *exact_match = state->log->sites->get_by_gps_and_name(trimmed, ds->location);
|
struct dive_site *exact_match = state->log->sites.get_by_gps_and_name(trimmed, ds->location);
|
||||||
if (exact_match) {
|
if (exact_match) {
|
||||||
unregister_dive_from_dive_site(dive);
|
unregister_dive_from_dive_site(dive);
|
||||||
exact_match->add_dive(dive);
|
exact_match->add_dive(dive);
|
||||||
} else {
|
} else {
|
||||||
struct dive_site *newds = state->log->sites->create(trimmed.c_str());
|
struct dive_site *newds = state->log->sites.create(trimmed.c_str());
|
||||||
unregister_dive_from_dive_site(dive);
|
unregister_dive_from_dive_site(dive);
|
||||||
newds->add_dive(dive);
|
newds->add_dive(dive);
|
||||||
if (has_location(&state->cur_location)) {
|
if (has_location(&state->cur_location)) {
|
||||||
|
@ -462,7 +462,7 @@ void add_dive_site(const char *ds_name, struct dive *dive, struct parser_state *
|
||||||
ds->add_dive(dive);
|
ds->add_dive(dive);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
state->log->sites->create(trimmed)->add_dive(dive);
|
state->log->sites.create(trimmed)->add_dive(dive);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -886,8 +886,8 @@ static void save_divesites(git_repository *repo, struct dir *tree)
|
||||||
put_format(&dirname, "01-Divesites");
|
put_format(&dirname, "01-Divesites");
|
||||||
subdir = new_directory(repo, tree, &dirname);
|
subdir = new_directory(repo, tree, &dirname);
|
||||||
|
|
||||||
divelog.sites->purge_empty();
|
divelog.sites.purge_empty();
|
||||||
for (const auto &ds: *divelog.sites) {
|
for (const auto &ds: divelog.sites) {
|
||||||
membuffer b;
|
membuffer b;
|
||||||
membuffer site_file_name;
|
membuffer site_file_name;
|
||||||
put_format(&site_file_name, "Site-%08x", ds->uuid);
|
put_format(&site_file_name, "Site-%08x", ds->uuid);
|
||||||
|
|
|
@ -653,7 +653,7 @@ static void save_dives_buffer(struct membuffer *b, bool select_only, bool anonym
|
||||||
|
|
||||||
/* save the dive sites */
|
/* save the dive sites */
|
||||||
put_format(b, "<divesites>\n");
|
put_format(b, "<divesites>\n");
|
||||||
for (const auto &ds: *divelog.sites) {
|
for (const auto &ds: divelog.sites) {
|
||||||
/* Don't export empty dive sites */
|
/* Don't export empty dive sites */
|
||||||
if (ds->is_empty())
|
if (ds->is_empty())
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -918,7 +918,7 @@ static bool process_raw_buffer(device_data_t *devdata, uint32_t deviceid, std::s
|
||||||
} else if (non_owned_dive && tag == "divespot_id") {
|
} else if (non_owned_dive && tag == "divespot_id") {
|
||||||
int divespot_id;
|
int divespot_id;
|
||||||
if (from_chars(val, divespot_id).ec != std::errc::invalid_argument) {
|
if (from_chars(val, divespot_id).ec != std::errc::invalid_argument) {
|
||||||
struct dive_site *ds = devdata->log->sites->create("from Uemis"s);
|
struct dive_site *ds = devdata->log->sites.create("from Uemis"s);
|
||||||
unregister_dive_from_dive_site(non_owned_dive);
|
unregister_dive_from_dive_site(non_owned_dive);
|
||||||
ds->add_dive(non_owned_dive);
|
ds->add_dive(non_owned_dive);
|
||||||
uemis_obj.mark_divelocation(non_owned_dive->dcs[0].diveid, divespot_id, ds);
|
uemis_obj.mark_divelocation(non_owned_dive->dcs[0].diveid, divespot_id, ds);
|
||||||
|
@ -1094,19 +1094,19 @@ static void get_uemis_divespot(device_data_t *devdata, const std::string &mountp
|
||||||
* we search all existing divesites if we have one with the same name already. The function
|
* we search all existing divesites if we have one with the same name already. The function
|
||||||
* returns the first found which is luckily not the newly created.
|
* returns the first found which is luckily not the newly created.
|
||||||
*/
|
*/
|
||||||
struct dive_site *ods = devdata->log->sites->get_by_name(nds->name);
|
struct dive_site *ods = devdata->log->sites.get_by_name(nds->name);
|
||||||
if (ods && nds->uuid != ods->uuid) {
|
if (ods && nds->uuid != ods->uuid) {
|
||||||
/* if the uuid's are the same, the new site is a duplicate and can be deleted */
|
/* if the uuid's are the same, the new site is a duplicate and can be deleted */
|
||||||
unregister_dive_from_dive_site(dive);
|
unregister_dive_from_dive_site(dive);
|
||||||
ods->add_dive(dive);
|
ods->add_dive(dive);
|
||||||
devdata->log->sites->pull(nds);
|
devdata->log->sites.pull(nds);
|
||||||
}
|
}
|
||||||
divespot_mapping[divespot_id] = dive->dive_site;
|
divespot_mapping[divespot_id] = dive->dive_site;
|
||||||
} else {
|
} else {
|
||||||
/* if we can't load the dive site details, delete the site we
|
/* if we can't load the dive site details, delete the site we
|
||||||
* created in process_raw_buffer
|
* created in process_raw_buffer
|
||||||
*/
|
*/
|
||||||
devdata->log->sites->pull(dive->dive_site);
|
devdata->log->sites.pull(dive->dive_site);
|
||||||
dive->dive_site = nullptr;
|
dive->dive_site = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,7 +97,7 @@ void DiveSiteListView::diveSiteAdded(struct dive_site *, int idx)
|
||||||
|
|
||||||
void DiveSiteListView::diveSiteChanged(struct dive_site *ds, int field)
|
void DiveSiteListView::diveSiteChanged(struct dive_site *ds, int field)
|
||||||
{
|
{
|
||||||
size_t idx = divelog.sites->get_idx(ds);
|
size_t idx = divelog.sites.get_idx(ds);
|
||||||
if (idx == std::string::npos)
|
if (idx == std::string::npos)
|
||||||
return;
|
return;
|
||||||
QModelIndex globalIdx = LocationInformationModel::instance()->index(static_cast<int>(idx), field);
|
QModelIndex globalIdx = LocationInformationModel::instance()->index(static_cast<int>(idx), field);
|
||||||
|
|
|
@ -388,8 +388,8 @@ bool DiveLocationFilterProxyModel::lessThan(const QModelIndex &source_left, cons
|
||||||
// If there is a current location, sort by that - otherwise use the provided column
|
// If there is a current location, sort by that - otherwise use the provided column
|
||||||
if (has_location(¤tLocation)) {
|
if (has_location(¤tLocation)) {
|
||||||
// The dive sites are -2 because of the first two items.
|
// The dive sites are -2 because of the first two items.
|
||||||
auto loc1 = (*divelog.sites)[source_left.row() - 2]->location;
|
auto loc1 = (divelog.sites)[source_left.row() - 2]->location;
|
||||||
auto loc2 = (*divelog.sites)[source_right.row() - 2]->location;
|
auto loc2 = (divelog.sites)[source_right.row() - 2]->location;
|
||||||
return get_distance(loc1, currentLocation) < get_distance(loc2, currentLocation);
|
return get_distance(loc1, currentLocation) < get_distance(loc2, currentLocation);
|
||||||
}
|
}
|
||||||
return source_left.data().toString().compare(source_right.data().toString(), Qt::CaseInsensitive) < 0;
|
return source_left.data().toString().compare(source_right.data().toString(), Qt::CaseInsensitive) < 0;
|
||||||
|
@ -411,7 +411,7 @@ QVariant DiveLocationModel::data(const QModelIndex &index, int role) const
|
||||||
static const QIcon plusIcon(":list-add-icon");
|
static const QIcon plusIcon(":list-add-icon");
|
||||||
static const QIcon geoCode(":geotag-icon");
|
static const QIcon geoCode(":geotag-icon");
|
||||||
|
|
||||||
if (index.row() < 0 || index.row() >= (int)divelog.sites->size() + 2)
|
if (index.row() < 0 || index.row() >= (int)divelog.sites.size() + 2)
|
||||||
return QVariant();
|
return QVariant();
|
||||||
|
|
||||||
if (index.row() <= 1) { // two special cases.
|
if (index.row() <= 1) { // two special cases.
|
||||||
|
@ -431,7 +431,7 @@ QVariant DiveLocationModel::data(const QModelIndex &index, int role) const
|
||||||
}
|
}
|
||||||
|
|
||||||
// The dive sites are -2 because of the first two items.
|
// The dive sites are -2 because of the first two items.
|
||||||
const auto &ds = (*divelog.sites)[index.row() - 2];
|
const auto &ds = (divelog.sites)[index.row() - 2];
|
||||||
return LocationInformationModel::getDiveSiteData(*ds, index.column(), role);
|
return LocationInformationModel::getDiveSiteData(*ds, index.column(), role);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -442,7 +442,7 @@ int DiveLocationModel::columnCount(const QModelIndex&) const
|
||||||
|
|
||||||
int DiveLocationModel::rowCount(const QModelIndex&) const
|
int DiveLocationModel::rowCount(const QModelIndex&) const
|
||||||
{
|
{
|
||||||
return (int)divelog.sites->size() + 2;
|
return (int)divelog.sites.size() + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
Qt::ItemFlags DiveLocationModel::flags(const QModelIndex &index) const
|
Qt::ItemFlags DiveLocationModel::flags(const QModelIndex &index) const
|
||||||
|
@ -563,7 +563,7 @@ void DiveLocationLineEdit::refreshDiveSiteCache()
|
||||||
|
|
||||||
static struct dive_site *get_dive_site_name_start_which_str(const QString &str)
|
static struct dive_site *get_dive_site_name_start_which_str(const QString &str)
|
||||||
{
|
{
|
||||||
for (const auto &ds: *divelog.sites) {
|
for (const auto &ds: divelog.sites) {
|
||||||
QString dsName = QString::fromStdString(ds->name);
|
QString dsName = QString::fromStdString(ds->name);
|
||||||
if (dsName.toLower().startsWith(str.toLower()))
|
if (dsName.toLower().startsWith(str.toLower()))
|
||||||
return ds.get();
|
return ds.get();
|
||||||
|
|
|
@ -1408,12 +1408,12 @@ void MainWindow::on_actionImportDiveSites_triggered()
|
||||||
parse_file(fileNamePtr.data(), &log);
|
parse_file(fileNamePtr.data(), &log);
|
||||||
}
|
}
|
||||||
// The imported dive sites still have pointers to imported dives - remove them
|
// The imported dive sites still have pointers to imported dives - remove them
|
||||||
for (const auto &ds: *log.sites)
|
for (const auto &ds: log.sites)
|
||||||
ds->dives.clear();
|
ds->dives.clear();
|
||||||
|
|
||||||
QString source = fileNames.size() == 1 ? fileNames[0] : tr("multiple files");
|
QString source = fileNames.size() == 1 ? fileNames[0] : tr("multiple files");
|
||||||
|
|
||||||
DivesiteImportDialog divesiteImport(std::move(*log.sites), source, this);
|
DivesiteImportDialog divesiteImport(std::move(log.sites), source, this);
|
||||||
divesiteImport.exec();
|
divesiteImport.exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1070,7 +1070,7 @@ bool QMLManager::checkLocation(DiveSiteChange &res, struct dive *d, QString loca
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
QString oldLocation = QString::fromStdString(get_dive_location(d));
|
QString oldLocation = QString::fromStdString(get_dive_location(d));
|
||||||
if (oldLocation != location) {
|
if (oldLocation != location) {
|
||||||
ds = divelog.sites->get_by_name(location.toStdString());
|
ds = divelog.sites.get_by_name(location.toStdString());
|
||||||
if (!ds && !location.isEmpty()) {
|
if (!ds && !location.isEmpty()) {
|
||||||
res.createdDs = std::make_unique<dive_site>(qPrintable(location));
|
res.createdDs = std::make_unique<dive_site>(qPrintable(location));
|
||||||
res.changed = true;
|
res.changed = true;
|
||||||
|
@ -1808,7 +1808,7 @@ QString QMLManager::getVersion() const
|
||||||
|
|
||||||
QString QMLManager::getGpsFromSiteName(const QString &siteName)
|
QString QMLManager::getGpsFromSiteName(const QString &siteName)
|
||||||
{
|
{
|
||||||
struct dive_site *ds = divelog.sites->get_by_name(siteName.toStdString());
|
struct dive_site *ds = divelog.sites.get_by_name(siteName.toStdString());
|
||||||
if (!ds)
|
if (!ds)
|
||||||
return QString();
|
return QString();
|
||||||
return printGPSCoords(&ds->location);
|
return printGPSCoords(&ds->location);
|
||||||
|
|
|
@ -37,7 +37,7 @@ int LocationInformationModel::columnCount(const QModelIndex &) const
|
||||||
|
|
||||||
int LocationInformationModel::rowCount(const QModelIndex &) const
|
int LocationInformationModel::rowCount(const QModelIndex &) const
|
||||||
{
|
{
|
||||||
return (int)divelog.sites->size();
|
return (int)divelog.sites.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant LocationInformationModel::headerData(int section, Qt::Orientation orientation, int role) const
|
QVariant LocationInformationModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||||
|
@ -119,10 +119,10 @@ QVariant LocationInformationModel::getDiveSiteData(const struct dive_site &ds, i
|
||||||
|
|
||||||
QVariant LocationInformationModel::data(const QModelIndex &index, int role) const
|
QVariant LocationInformationModel::data(const QModelIndex &index, int role) const
|
||||||
{
|
{
|
||||||
if (!index.isValid() || index.row() >= (int)divelog.sites->size())
|
if (!index.isValid() || index.row() >= (int)divelog.sites.size())
|
||||||
return QVariant();
|
return QVariant();
|
||||||
|
|
||||||
const auto &ds = (*divelog.sites)[index.row()].get();
|
const auto &ds = (divelog.sites)[index.row()].get();
|
||||||
return getDiveSiteData(*ds, index.column(), role);
|
return getDiveSiteData(*ds, index.column(), role);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,7 +134,7 @@ void LocationInformationModel::update()
|
||||||
|
|
||||||
void LocationInformationModel::diveSiteDiveCountChanged(dive_site *ds)
|
void LocationInformationModel::diveSiteDiveCountChanged(dive_site *ds)
|
||||||
{
|
{
|
||||||
size_t idx = divelog.sites->get_idx(ds);
|
size_t idx = divelog.sites.get_idx(ds);
|
||||||
if (idx != std::string::npos)
|
if (idx != std::string::npos)
|
||||||
dataChanged(createIndex(idx, NUM_DIVES), createIndex(idx, NUM_DIVES));
|
dataChanged(createIndex(idx, NUM_DIVES), createIndex(idx, NUM_DIVES));
|
||||||
}
|
}
|
||||||
|
@ -159,7 +159,7 @@ void LocationInformationModel::diveSiteDeleted(struct dive_site *, int idx)
|
||||||
|
|
||||||
void LocationInformationModel::diveSiteChanged(struct dive_site *ds, int field)
|
void LocationInformationModel::diveSiteChanged(struct dive_site *ds, int field)
|
||||||
{
|
{
|
||||||
size_t idx = divelog.sites->get_idx(ds);
|
size_t idx = divelog.sites.get_idx(ds);
|
||||||
if (idx == std::string::npos)
|
if (idx == std::string::npos)
|
||||||
return;
|
return;
|
||||||
dataChanged(createIndex(idx, field), createIndex(idx, field));
|
dataChanged(createIndex(idx, field), createIndex(idx, field));
|
||||||
|
@ -167,7 +167,7 @@ void LocationInformationModel::diveSiteChanged(struct dive_site *ds, int field)
|
||||||
|
|
||||||
void LocationInformationModel::diveSiteDivesChanged(struct dive_site *ds)
|
void LocationInformationModel::diveSiteDivesChanged(struct dive_site *ds)
|
||||||
{
|
{
|
||||||
size_t idx = divelog.sites->get_idx(ds);
|
size_t idx = divelog.sites.get_idx(ds);
|
||||||
if (idx == std::string::npos)
|
if (idx == std::string::npos)
|
||||||
return;
|
return;
|
||||||
dataChanged(createIndex(idx, NUM_DIVES), createIndex(idx, NUM_DIVES));
|
dataChanged(createIndex(idx, NUM_DIVES), createIndex(idx, NUM_DIVES));
|
||||||
|
@ -178,9 +178,9 @@ bool DiveSiteSortedModel::filterAcceptsRow(int sourceRow, const QModelIndex &sou
|
||||||
if (fullText.isEmpty())
|
if (fullText.isEmpty())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (sourceRow < 0 || sourceRow > (int)divelog.sites->size())
|
if (sourceRow < 0 || sourceRow > (int)divelog.sites.size())
|
||||||
return false;
|
return false;
|
||||||
const auto &ds = (*divelog.sites)[sourceRow];
|
const auto &ds = (divelog.sites)[sourceRow];
|
||||||
QString text = QString::fromStdString(ds->name + ds->description + ds->notes);
|
QString text = QString::fromStdString(ds->name + ds->description + ds->notes);
|
||||||
return text.contains(fullText, Qt::CaseInsensitive);
|
return text.contains(fullText, Qt::CaseInsensitive);
|
||||||
}
|
}
|
||||||
|
@ -192,13 +192,13 @@ bool DiveSiteSortedModel::lessThan(const QModelIndex &i1, const QModelIndex &i2)
|
||||||
// Kind of dirty, but less effort.
|
// Kind of dirty, but less effort.
|
||||||
|
|
||||||
// Be careful to respect proper ordering when sites are invalid.
|
// Be careful to respect proper ordering when sites are invalid.
|
||||||
bool valid1 = i1.row() >= 0 && i1.row() < (int)divelog.sites->size();
|
bool valid1 = i1.row() >= 0 && i1.row() < (int)divelog.sites.size();
|
||||||
bool valid2 = i2.row() >= 0 && i2.row() < (int)divelog.sites->size();
|
bool valid2 = i2.row() >= 0 && i2.row() < (int)divelog.sites.size();
|
||||||
if (!valid1 || !valid2)
|
if (!valid1 || !valid2)
|
||||||
return valid1 < valid2;
|
return valid1 < valid2;
|
||||||
|
|
||||||
const auto &ds1 = (*divelog.sites)[i1.row()];
|
const auto &ds1 = (divelog.sites)[i1.row()];
|
||||||
const auto &ds2 = (*divelog.sites)[i2.row()];
|
const auto &ds2 = (divelog.sites)[i2.row()];
|
||||||
switch (i1.column()) {
|
switch (i1.column()) {
|
||||||
case LocationInformationModel::NAME:
|
case LocationInformationModel::NAME:
|
||||||
default:
|
default:
|
||||||
|
@ -232,11 +232,11 @@ QStringList DiveSiteSortedModel::allSiteNames() const
|
||||||
// This shouldn't happen, but if model and core get out of sync,
|
// This shouldn't happen, but if model and core get out of sync,
|
||||||
// (more precisely: the core has more sites than the model is aware of),
|
// (more precisely: the core has more sites than the model is aware of),
|
||||||
// we might get an invalid index.
|
// we might get an invalid index.
|
||||||
if (idx < 0 || idx > (int)divelog.sites->size()) {
|
if (idx < 0 || idx > (int)divelog.sites.size()) {
|
||||||
report_info("DiveSiteSortedModel::allSiteNames(): invalid index");
|
report_info("DiveSiteSortedModel::allSiteNames(): invalid index");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
locationNames << QString::fromStdString((*divelog.sites)[idx]->name);
|
locationNames << QString::fromStdString((divelog.sites)[idx]->name);
|
||||||
}
|
}
|
||||||
return locationNames;
|
return locationNames;
|
||||||
}
|
}
|
||||||
|
@ -244,7 +244,7 @@ QStringList DiveSiteSortedModel::allSiteNames() const
|
||||||
struct dive_site *DiveSiteSortedModel::getDiveSite(const QModelIndex &idx_source)
|
struct dive_site *DiveSiteSortedModel::getDiveSite(const QModelIndex &idx_source)
|
||||||
{
|
{
|
||||||
auto idx = mapToSource(idx_source).row();
|
auto idx = mapToSource(idx_source).row();
|
||||||
return idx >= 0 && idx < (int)divelog.sites->size() ? (*divelog.sites)[idx].get() : NULL;
|
return idx >= 0 && idx < (int)divelog.sites.size() ? (divelog.sites)[idx].get() : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef SUBSURFACE_MOBILE
|
#ifndef SUBSURFACE_MOBILE
|
||||||
|
|
|
@ -11,7 +11,7 @@ DivesiteImportedModel::DivesiteImportedModel(dive_site_table &table, QObject *o)
|
||||||
{
|
{
|
||||||
checkStates.resize(importedSitesTable.size());
|
checkStates.resize(importedSitesTable.size());
|
||||||
for (const auto &[row, item]: enumerated_range(importedSitesTable))
|
for (const auto &[row, item]: enumerated_range(importedSitesTable))
|
||||||
checkStates[row] = !divelog.sites->get_by_gps(&item->location);
|
checkStates[row] = !divelog.sites.get_by_gps(&item->location);
|
||||||
}
|
}
|
||||||
|
|
||||||
int DivesiteImportedModel::columnCount(const QModelIndex &) const
|
int DivesiteImportedModel::columnCount(const QModelIndex &) const
|
||||||
|
@ -69,7 +69,7 @@ QVariant DivesiteImportedModel::data(const QModelIndex &index, int role) const
|
||||||
case NEAREST: {
|
case NEAREST: {
|
||||||
// 40075000 is circumference of the earth in meters
|
// 40075000 is circumference of the earth in meters
|
||||||
struct dive_site *nearest_ds =
|
struct dive_site *nearest_ds =
|
||||||
divelog.sites->get_by_gps_proximity(ds->location, 40075000);
|
divelog.sites.get_by_gps_proximity(ds->location, 40075000);
|
||||||
if (nearest_ds)
|
if (nearest_ds)
|
||||||
return QString::fromStdString(nearest_ds->name);
|
return QString::fromStdString(nearest_ds->name);
|
||||||
else
|
else
|
||||||
|
@ -78,7 +78,7 @@ QVariant DivesiteImportedModel::data(const QModelIndex &index, int role) const
|
||||||
case DISTANCE: {
|
case DISTANCE: {
|
||||||
unsigned int distance = 0;
|
unsigned int distance = 0;
|
||||||
struct dive_site *nearest_ds =
|
struct dive_site *nearest_ds =
|
||||||
divelog.sites->get_by_gps_proximity(ds->location, 40075000);
|
divelog.sites.get_by_gps_proximity(ds->location, 40075000);
|
||||||
if (nearest_ds)
|
if (nearest_ds)
|
||||||
distance = get_distance(ds->location, nearest_ds->location);
|
distance = get_distance(ds->location, nearest_ds->location);
|
||||||
return distance_string(distance);
|
return distance_string(distance);
|
||||||
|
|
|
@ -162,7 +162,7 @@ void MapLocationModel::reload(QObject *map)
|
||||||
if (diveSiteMode)
|
if (diveSiteMode)
|
||||||
m_selectedDs = DiveFilter::instance()->filteredDiveSites();
|
m_selectedDs = DiveFilter::instance()->filteredDiveSites();
|
||||||
#endif
|
#endif
|
||||||
for (const auto &ds: *divelog.sites) {
|
for (const auto &ds: divelog.sites) {
|
||||||
QGeoCoordinate dsCoord;
|
QGeoCoordinate dsCoord;
|
||||||
|
|
||||||
// Don't show dive sites of hidden dives, unless we're in dive site edit mode.
|
// Don't show dive sites of hidden dives, unless we're in dive site edit mode.
|
||||||
|
|
|
@ -403,12 +403,12 @@ static void smtk_build_location(MdbHandle *mdb, char *idx, struct dive_site **lo
|
||||||
concat(str, ", ", table.get_string_view(1)); // Locality
|
concat(str, ", ", table.get_string_view(1)); // Locality
|
||||||
concat(str, ", ", site);
|
concat(str, ", ", site);
|
||||||
|
|
||||||
ds = log->sites->get_by_name(str);
|
ds = log->sites.get_by_name(str);
|
||||||
if (!ds) {
|
if (!ds) {
|
||||||
if (!has_location(&loc))
|
if (!has_location(&loc))
|
||||||
ds = log->sites->create(str);
|
ds = log->sites.create(str);
|
||||||
else
|
else
|
||||||
ds = log->sites->create(str, loc);
|
ds = log->sites.create(str, loc);
|
||||||
}
|
}
|
||||||
*location = ds;
|
*location = ds;
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ void TestDiveSiteDuplication::testReadV2()
|
||||||
{
|
{
|
||||||
prefs.cloud_base_url = strdup(default_prefs.cloud_base_url);
|
prefs.cloud_base_url = strdup(default_prefs.cloud_base_url);
|
||||||
QCOMPARE(parse_file(SUBSURFACE_TEST_DATA "/dives/TwoTimesTwo.ssrf", &divelog), 0);
|
QCOMPARE(parse_file(SUBSURFACE_TEST_DATA "/dives/TwoTimesTwo.ssrf", &divelog), 0);
|
||||||
QCOMPARE(divelog.sites->size(), 2);
|
QCOMPARE(divelog.sites.size(), 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
QTEST_GUILESS_MAIN(TestDiveSiteDuplication)
|
QTEST_GUILESS_MAIN(TestDiveSiteDuplication)
|
||||||
|
|
|
@ -92,7 +92,7 @@ int TestParse::parseCSV(int units, std::string file)
|
||||||
int TestParse::parseDivingLog()
|
int TestParse::parseDivingLog()
|
||||||
{
|
{
|
||||||
// Parsing of DivingLog import from SQLite database
|
// Parsing of DivingLog import from SQLite database
|
||||||
struct dive_site *ds = divelog.sites->alloc_or_get(0xdeadbeef);
|
struct dive_site *ds = divelog.sites.alloc_or_get(0xdeadbeef);
|
||||||
ds->name = "Suomi - - Hälvälä";
|
ds->name = "Suomi - - Hälvälä";
|
||||||
|
|
||||||
int ret = sqlite3_open(SUBSURFACE_TEST_DATA "/dives/TestDivingLog4.1.1.sql", &_sqlite3_handle);
|
int ret = sqlite3_open(SUBSURFACE_TEST_DATA "/dives/TestDivingLog4.1.1.sql", &_sqlite3_handle);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue