Skip to content

Commit f139cec

Browse files
committed
Consistently use region names to search for or generate peak links
1 parent 8d74291 commit f139cec

File tree

3 files changed

+45
-24
lines changed

3 files changed

+45
-24
lines changed

src/dialogs/peak_dialog.cpp

+31-14
Original file line numberDiff line numberDiff line change
@@ -321,10 +321,10 @@ void PeakDialog::handle_openWikiLink() {
321321
* Creates a Google Maps search link based on the peak's name and sets it as the Google Maps link.
322322
*/
323323
void PeakDialog::handle_findMapsLink() {
324-
const QString sanitizedPeakName = urlSanitize(nameLineEdit->text(), "+");
325-
if (sanitizedPeakName.isEmpty()) return;
324+
const QString sanitizedSearchString = createSanitizedSearchString("+");
325+
if (sanitizedSearchString.isEmpty()) return;
326326

327-
const QString link = "https://www.google.com/maps/search/" + sanitizedPeakName;
327+
const QString link = "https://www.google.com/maps/search/" + sanitizedSearchString;
328328
mapsLineEdit->setText(link);
329329
}
330330

@@ -334,10 +334,10 @@ void PeakDialog::handle_findMapsLink() {
334334
* Creates a Google Earth search link based on the peak's name and sets it as the Google Earth link.
335335
*/
336336
void PeakDialog::handle_findEarthLink() {
337-
const QString sanitizedPeakName = urlSanitize(nameLineEdit->text(), "+");
338-
if (sanitizedPeakName.isEmpty()) return;
337+
const QString sanitizedSearchString = createSanitizedSearchString("+");
338+
if (sanitizedSearchString.isEmpty()) return;
339339

340-
const QString link = "https://earth.google.com/web/search/" + sanitizedPeakName;
340+
const QString link = "https://earth.google.com/web/search/" + sanitizedSearchString;
341341
earthLineEdit->setText(link);
342342
}
343343

@@ -355,10 +355,10 @@ void PeakDialog::handle_findWikiLink() {
355355
const QString website = tr("en") + ".wikipedia.org";
356356

357357
if (Settings::googleApiKey.get().isEmpty()) {
358-
const QString sanitizedPeakName = urlSanitize(peakName, "_");
359-
if (sanitizedPeakName.isEmpty()) return;
358+
const QString sanitizedSearchString = createSanitizedSearchString("_");
359+
if (sanitizedSearchString.isEmpty()) return;
360360

361-
const QString link = "https://" + website + "/wiki/" + sanitizedPeakName;
361+
const QString link = "https://" + website + "/wiki/" + sanitizedSearchString;
362362
wikiLineEdit->setText(link);
363363
return;
364364
}
@@ -431,6 +431,26 @@ void PeakDialog::aboutToClose()
431431

432432

433433

434+
/**
435+
* Creates a search string from currently set peak name and, if present, region name and sanitizes
436+
* it using the given replacement for spaces.
437+
*
438+
* @param spaceReplacement The string to replace spaces with.
439+
* @return The sanitized search string, containing peak and region names.
440+
*/
441+
QString PeakDialog::createSanitizedSearchString(const QString& spaceReplacement)
442+
{
443+
QString searchString = nameLineEdit->text();
444+
445+
if (regionCombo->currentIndex() > 0) {
446+
const ValidItemID regionID = selectableRegionIDs.at(regionCombo->currentIndex() - 1);
447+
const QString regionName = db.regionsTable.nameColumn.getValueFor(regionID).toString();
448+
searchString += " " + regionName;
449+
}
450+
451+
return urlSanitize(searchString, spaceReplacement);
452+
}
453+
434454
/**
435455
* Creates a URL for a Google Programmable Search Engine search for the given peak on the given
436456
* website.
@@ -445,11 +465,8 @@ QUrl PeakDialog::createLinkSearchUrl(const Database& db, const QString& website,
445465
{
446466
QString searchString = peakName;
447467
if (regionID.isValid()) {
448-
const ItemID rangeID = db.regionsTable.rangeIDColumn.getValueFor(FORCE_VALID(regionID));
449-
if (rangeID.isValid()) {
450-
const QString rangeName = db.rangesTable.nameColumn.getValueFor(FORCE_VALID(rangeID)).toString();
451-
searchString += " " + rangeName;
452-
}
468+
const QString regionName = db.regionsTable.nameColumn.getValueFor(FORCE_VALID(regionID)).toString();
469+
searchString += " " + regionName;
453470
}
454471
const QString sanitizedSearchString = urlSanitize(searchString, "+");
455472

src/dialogs/peak_dialog.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,12 @@ private slots:
7979
private:
8080
virtual void aboutToClose() override;
8181

82+
QString createSanitizedSearchString(const QString& spaceReplacement);
8283
public:
8384
static QUrl createLinkSearchUrl(const Database& db, const QString& website, const QString& peakName, ItemID regionID);
8485
static QPair<bool, QString> parseLinkSearchResponse(QNetworkReply* reply);
8586

86-
static QString urlSanitize(const QString& string, QString spaceReplacement = "+");
87+
static QString urlSanitize(const QString& string, QString spaceReplacement);
8788
};
8889

8990

src/tools/peak_link_finder_thread.cpp

+12-9
Original file line numberDiff line numberDiff line change
@@ -82,32 +82,35 @@ void PeakLinkFinderThread::run()
8282
if (abortWasCalled) break;
8383

8484
unique_ptr<Peak> peak = db.getPeakAt(index);
85-
const QString peakName = peak->name;
86-
87-
if (PeakDialog::urlSanitize(peakName, "").isEmpty()) {
85+
QString searchString = peak->name;
86+
if (peak->regionID.isValid()) {
87+
const QString regionName = db.regionsTable.nameColumn.getValueFor(FORCE_VALID(peak->regionID)).toString();
88+
searchString += " " + regionName;
89+
}
90+
if (PeakDialog::urlSanitize(searchString, "").isEmpty()) {
8891
emit callback_reportProgress(index.get() + 1);
8992
continue;
9093
}
9194

9295
QString mapsLink = QString();
9396
if (maps && (peak->mapsLink.isEmpty() || replaceExisting)) {
94-
const QString sanitizedPeakName = PeakDialog::urlSanitize(peakName, "+");
95-
mapsLink = "https://www.google.com/maps/search/" + sanitizedPeakName;
97+
const QString sanitizedSearchString = PeakDialog::urlSanitize(searchString, "+");
98+
mapsLink = "https://www.google.com/maps/search/" + sanitizedSearchString;
9699
}
97100

98101
QString earthLink = QString();
99102
if (earth && (peak->earthLink.isEmpty() || replaceExisting)) {
100-
const QString sanitizedPeakName = PeakDialog::urlSanitize(peakName, "+");
101-
earthLink = "https://earth.google.com/web/search/" + sanitizedPeakName;
103+
const QString sanitizedSearchString = PeakDialog::urlSanitize(searchString, "+");
104+
earthLink = "https://earth.google.com/web/search/" + sanitizedSearchString;
102105
}
103106

104107
QString wikiLink = QString();
105108
if (wiki && (peak->wikiLink.isEmpty() || replaceExisting)) {
106109
const QString website = tr("en") + ".wikipedia.org";
107110

108111
if (apiKey.isEmpty()) {
109-
const QString sanitizedPeakName = PeakDialog::urlSanitize(peakName, "_");
110-
wikiLink = "https://" + website + "/wiki/" + sanitizedPeakName;
112+
const QString sanitizedSearchString = PeakDialog::urlSanitize(searchString, "_");
113+
wikiLink = "https://" + website + "/wiki/" + sanitizedSearchString;
111114
}
112115
else {
113116
wikiLink = searchForLink(*peak, website);

0 commit comments

Comments
 (0)