5cbd092e2deb2869385fc3203282ac6c91337048 chmalee Tue Apr 20 10:27:40 2021 -0700 Allow different messages for each side of a relationship in the relatedTracks section of hgc/hgTrackUi. Enforce two lines per relationship in relatedTracks.ra in order to allow this, refs #25721 diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 5db371a..29bb8dd 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -9868,52 +9868,46 @@ void printRelatedTracks(char *database, struct hash *trackHash, struct trackDb *tdb, struct cart *cart) /* Maybe print a "related track" section */ { if (!cfgOption("db.relatedTrack") || trackHubDatabase(database)) return; char *relatedTrackTable = cfgOptionDefault("db.relatedTrack","relatedTrack"); struct sqlConnection *conn = hAllocConn(database); if (!sqlTableExists(conn, relatedTrackTable)) { hFreeConn(&conn); return; } char query[256]; sqlSafef(query, sizeof(query), - "select track1, track2, why from %s where track1='%s' or track2='%s'", relatedTrackTable, tdb->track, tdb->track); + "select track2, why from %s where track1='%s'", relatedTrackTable, tdb->track); char **row; struct sqlResult *sr; sr = sqlGetResult(conn, query); row = sqlNextRow(sr); if (row != NULL) { puts("<b>Related tracks</b>\n"); puts("<ul>\n"); struct hash *otherTracksAndDesc = hashNew(0); - char *track1, *track2, *why, *otherTrack; + char *why, *otherTrack; for (; row != NULL; row = sqlNextRow(sr)) { - track1 = row[0]; - track2 = row[1]; - why = row[2]; - - if (sameWord(track1, tdb->track)) - otherTrack = track2; - else - otherTrack = track1; + otherTrack = row[0]; + why = row[1]; // hopefully relatedTracks.ra doesn't have dupes but hash them just in case hashReplace(otherTracksAndDesc, cloneString(otherTrack), cloneString(why)); } struct hashEl *hel, *helList = hashElListHash(otherTracksAndDesc); for (hel = helList; hel != NULL; hel = hel->next) { char *otherTrack = (char *)hel->name; char *why = (char *)hel->val; struct trackDb *otherTdb = hashFindVal(trackHash, otherTrack); // super tracks are not in the hash: if (!otherTdb) otherTdb = tdbForTrack(database, otherTrack, NULL); if (otherTdb) {