core: don't consider dives with many samples as manually added

This causes UI confusion. Notably we go into edit mode and
reduce the number of samples, leading to loss of information.

If someone really manually adds a dive with more than 50
samples, they should still be able to explicitly open the
dive in the planner.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2022-10-21 00:39:30 +02:00 committed by Dirk Hohndel
parent 9ced3a3a4d
commit f687e51d4b
7 changed files with 15 additions and 8 deletions

View file

@ -2333,8 +2333,8 @@ static int likely_same_dive(const struct dive *a, const struct dive *b)
int match, fuzz = 20 * 60;
/* don't merge manually added dives with anything */
if (same_string(a->dc.model, "manually added dive") ||
same_string(b->dc.model, "manually added dive"))
if (is_manually_added_dc(&a->dc) ||
is_manually_added_dc(&b->dc))
return 0;
/*

View file

@ -548,3 +548,9 @@ void free_dc(struct divecomputer *dc)
free_dc_contents(dc);
free(dc);
}
bool is_manually_added_dc(const struct divecomputer *dc)
{
return dc && dc->samples <= 50 &&
same_string(dc->model, "manually added dive");
}

View file

@ -69,6 +69,7 @@ extern void remove_event_from_dc(struct divecomputer *dc, struct event *event);
extern void add_extra_data(struct divecomputer *dc, const char *key, const char *value);
extern bool is_dc_planner(const struct divecomputer *dc);
extern uint32_t calculate_string_hash(const char *str);
extern bool is_manually_added_dc(const struct divecomputer *dc);
/* Check if two dive computer entries are the exact same dive (-1=no/0=maybe/1=yes) */
extern int match_one_dc(const struct divecomputer *a, const struct divecomputer *b);

View file

@ -192,7 +192,7 @@ void ProfileWidget::plotCurrentDive()
if (current_dive && !editedDive &&
DivePlannerPointsModel::instance()->currentMode() == DivePlannerPointsModel::NOTHING) {
struct divecomputer *dc = get_dive_dc(current_dive, dc_number);
if (dc && same_string(dc->model, "manually added dive") && dc->samples)
if (dc && is_manually_added_dc(dc) && dc->samples)
editDive();
}

View file

@ -210,7 +210,7 @@ void TabDiveInformation::updateData()
}
int salinity_value;
manualDive = same_string(current_dive->dc.model, "manually added dive");
manualDive = is_manually_added_dc(&current_dive->dc);
updateWaterTypeWidget();
updateProfile();
updateWhen();

View file

@ -251,7 +251,7 @@ void TabDiveNotes::updateData()
ui.LocationLabel->setText(tr("Location"));
ui.NotesLabel->setText(tr("Notes"));
ui.tagWidget->setText(get_taglist_string(current_dive->tag_list));
bool isManual = same_string(current_dive->dc.model, "manually added dive");
bool isManual = is_manually_added_dc(&current_dive->dc);
ui.depth->setVisible(isManual);
ui.depthLabel->setVisible(isManual);
ui.duration->setVisible(isManual);

View file

@ -1127,7 +1127,7 @@ bool QMLManager::checkDuration(struct dive *d, QString duration)
m = m6.captured(1).toInt();
}
d->dc.duration.seconds = d->duration.seconds = h * 3600 + m * 60 + s;
if (same_string(d->dc.model, "manually added dive"))
if (is_manually_added_dc(&d->dc))
free_samples(&d->dc);
else
appendTextToLog("Cannot change the duration on a dive that wasn't manually added");
@ -1145,7 +1145,7 @@ bool QMLManager::checkDepth(dive *d, QString depth)
// the depth <= 500m
if (0 <= depthValue && depthValue <= 500000) {
d->maxdepth.mm = depthValue;
if (same_string(d->dc.model, "manually added dive")) {
if (is_manually_added_dc(&d->dc)) {
d->dc.maxdepth.mm = d->maxdepth.mm;
free_samples(&d->dc);
}
@ -1351,7 +1351,7 @@ void QMLManager::commitChanges(QString diveId, QString number, QString date, QSt
if (diveChanged) {
if (d->maxdepth.mm == d->dc.maxdepth.mm &&
d->maxdepth.mm > 0 &&
same_string(d->dc.model, "manually added dive") &&
is_manually_added_dc(&d->dc) &&
d->dc.samples == 0) {
// so we have depth > 0, a manually added dive and no samples
// let's create an actual profile so the desktop version can work it