05eb41c63af8ccd369f76b022d3cf1faab5543c2 braney Thu May 26 16:25:07 2022 -0700 changes to support curated hubs diff --git src/hg/lib/hubConnect.c src/hg/lib/hubConnect.c index 574c319..07dd2ae 100644 --- src/hg/lib/hubConnect.c +++ src/hg/lib/hubConnect.c @@ -956,34 +956,75 @@ genome->name = cloneString(buffer); // if our new database is an undecorated db, decorate it if (*newDatabase && sameString(*newDatabase, name)) *newDatabase = cloneString(buffer); } } } } hDisconnectCentral(&conn); return added; } +char *dbOveride; // communicate with the web front end if we load a hub to support db cgivar. */ + +static char * lookForCuratedHubs(struct cart *cart, char *db, char *curatedHubPrefix) +/* Check to see if db is a curated hub which will require the hub to be attached. + * The variable curatedHubPrefix has the release to use (alpha, beta, public, or a user name ) */ +{ +struct sqlConnection *conn = hConnectCentral(); +char query[4096]; +sqlSafef(query, sizeof query, "SELECT nibPath from %s where name = '%s' AND nibPath like '%s%%'", + dbDbTable(), db, hubCuratedPrefix); + +char *dir = sqlQuickString(conn, query); +if (!isEmpty(dir)) + { + char *path = &dir[sizeof hubCuratedPrefix - 1]; + char url[4096]; + safef(url, sizeof url, "%s/%s/hub.txt", path, curatedHubPrefix); + + struct hubConnectStatus *status = getAndSetHubStatus( cart, url, TRUE); + + if (status) + { + char buffer[4096]; + safef(buffer, sizeof buffer, "hub_%d_%s", status->id, db); + dbOveride = cloneString(buffer); + + return cloneString(buffer); + } + } +return NULL; +} + + char *hubConnectLoadHubs(struct cart *cart) /* load the track data hubs. Set a static global to remember them */ { +char *newCuratedHub = NULL; +char *dbSpec = cartOptionalString(cart, "db"); +char *curatedHubPrefix = cfgOption("curatedHubPrefix"); +if (curatedHubPrefix && (dbSpec != NULL) ) + newCuratedHub = lookForCuratedHubs(cart, dbSpec, curatedHubPrefix); + char *newDatabase = checkForNew( cart); +if (newCuratedHub) + newDatabase = newCuratedHub; cartSetString(cart, hgHubConnectRemakeTrackHub, "on"); struct hubConnectStatus *hubList = hubConnectStatusListFromCart(cart); char *genarkPrefix = cfgOption("genarkHubPrefix"); if (genarkPrefix && lookForLonelyHubs(cart, hubList, &newDatabase, genarkPrefix)) hubList = hubConnectStatusListFromCart(cart); globalHubList = hubList; return newDatabase; } char *hubNameFromUrl(char *hubUrl) /* Given the URL for a hub, return its hub_# name. */ {