d1bc57639309864bb2665bd46eddfe75863f76e4 braney Tue Apr 23 16:42:54 2024 -0700 rearrange how we're doing hub groups. diff --git src/hg/inc/hubConnect.h src/hg/inc/hubConnect.h index 39e7f02..59fe87c 100644 --- src/hg/inc/hubConnect.h +++ src/hg/inc/hubConnect.h @@ -1,208 +1,211 @@ /* hubConnect - stuff to manage connections to track hubs. Most of this is mediated through * the hubStatus table in the hgcentral database. Here there are routines to translate between * hub symbolic names and hub URLs, to see if a hub is up or down or sideways (up but badly * formatted) etc. Note that there is no C structure corresponding to a row in the hubStatus * table by design. We just want field-by-field access to this. */ /* Copyright (C) 2014 The Regents of the University of California * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */ #ifndef HUBCONNECT_H #define HUBCONNECT_H #define hubCuratedPrefix "hub:" /* Prefix to hub path in dbDb.nibPath */ #define defaultHubPublicTableName "hubPublic" /* Name of our table with list of public hubs. read only */ #define hubPublicTableConfVariable "hub.publicTableName" /* the name of the hg.conf variable to use something other than the default */ #define defaultHubStatusTableName "hubStatus" /* Name of table that maintains status of hubs read/write. */ #define hubStatusTableConfVariable "hub.statusTableName" /* the name of the hg.conf variable to use something other than the default */ #define hgHubCheckUrl "hubCheckUrl" /* name of cgi variable containing hub name to check */ #define hgHubDataText "hubUrl" /* name of cgi variable containing new hub name */ #define hgHubGenome "genome" /* name of the cgi variable to specify a db within an assembly hub */ #define hgHubDataClearText "hubClear" /* name of cgi variable containing new hub name */ #define hubTrackPrefix "hub_" /* The names of all hub tracks begin with this. Use in cart. */ #define hgHubSearchTerms "hubSearchTerms" /* name of cart/cgi variable containing the current search terms */ #define hgHubDbFilter "hubDbFilter" /* name of cart/cgi variable containing text for filtering hubs by assembly */ #define hgHub "hgHub_" /* prefix for all control variables */ #define hgHubDo hgHub "do_" /* prefix for all commands */ #define hgHubDoClear hgHubDo "clear" #define hgHubDoRefresh hgHubDo "refresh" #define hgHubDoSearch hgHubDo "search" #define hgHubDoDeleteSearch hgHubDo "deleteSearch" #define hgHubDoFilter hgHubDo "filter" #define hgHubDoDisconnect hgHubDo "disconnect" #define hgHubDoFirstDb hgHubDo "firstDb" #define hgHubDoDecorateDb hgHubDo "decorateDb" #define hgHubDoRedirect hgHubDo "redirect" #define hgHubDoHubCheck hgHubDo "hubCheck" boolean isHubTrack(char *trackName); /* Return TRUE if it's a hub track. */ struct hubConnectStatus /* Basic status in hubStatus. Note it is *not* the same as the * hubStatus table, that has a bunch of extra fields to help * keep track of whether the hub is alive. */ { struct hubConnectStatus *next; unsigned id; /* Hub ID */ char *hubUrl; /* URL to hub.ra file. */ char *shortLabel; /* shortLabel from hubStatus table. */ char *errorMessage; /* If non-empty hub has an error and this describes it. */ struct trackHub *trackHub; /* pointer to structure that describes hub */ unsigned status; /* 1 if private */ }; void hubConnectStatusFree(struct hubConnectStatus **pHub); /* Free hubConnectStatus */ void hubConnectStatusFreeList(struct hubConnectStatus **pList); /* Free a list of dynamically allocated hubConnectStatus's */ struct hubConnectStatus *hubConnectStatusForIdExt(struct sqlConnection *conn, int id, char *replaceDb, char *newDb, char *quickLiftChain); /* Given a hub ID return associated status. For quickLifted hubs, replace the db with our current db and * keep track of the quickLiftChain for updating trackDb later.*/ struct hubConnectStatus *hubConnectStatusForId( struct sqlConnection *conn, int id); /* Given a hub ID return associated status. */ struct hubConnectStatus *hubConnectStatusListFromCart(struct cart *cart); /* Return list of track hubs that are turned on by user in cart. */ struct hubConnectStatus *hubConnectStatusListFromCartAll(struct cart *cart); /* Return list of all track hubs that are referenced by cart. */ #define hubConnectTrackHubsVarName "trackHubs" /* Name of cart variable with list of track hubs. */ #define hgHubConnectRemakeTrackHub "hgHubConnect.remakeTrackHub" /* Cart variable to indicate trackHub cart variable needs refreshing. */ #define hgHubConnectHubVarPrefix "hgHubConnect.hub." /* Prefix to temporary variable holding selected cart names. */ boolean hubConnectTableExists(); /* Return TRUE if the hubConnect table exists. */ struct slName *hubConnectHubsInCart(struct cart *cart); /* Return list of track hub ids that are turned on by user. */ int hubIdFromCartName(char *trackName); /* Given something like "hgHubConnect.hub.123" return 123 */ unsigned hubIdFromTrackName(char *trackName); /* Given something like "hub_123_myWig" return 123 */ +char *hubNameFromGroupName(char *groupName); +/* Given something like "hub_123_myWig" return hub_123 */ + void hubConnectAddDescription(char *database, struct trackDb *tdb); /* Fetch tdb->track's html description (or nearest ancestor's non-empty description) * and store in tdb->html. */ struct trackDb *hubConnectAddHubForTrackAndFindTdb( char *database, char *trackName, struct trackDb **pTdbList, struct hash *trackHash); /* Go find hub for trackName (which will begin with hub_), and load the tracks * for it, appending to end of list and adding to trackHash. Return the * trackDb associated with trackName. */ char *hubFileVar(); /* return the name of the cart variable that holds the name of the * file in trash that has private hubs */ boolean hubWriteToFile(FILE *f, struct hubConnectStatus *el); /* write out a hubConnectStatus structure to a file */ unsigned hubFindOrAddUrlInStatusTable(struct cart *cart, char *url, char **errorMessage); /* find or add a URL to the status table */ unsigned hubResetError(char *url); /* clear the error for this url in the hubStatus table,return the id */ unsigned hubClearStatus(char *url); /* drop the information about this url from the hubStatus table,return the id */ void hubDisconnect(struct cart *cart, char *url); /* drop the information about this url from the hubStatus table, and * the cart variable the references this hub */ void hubUpdateStatus(char *errorMessage, struct hubConnectStatus *hub); /* set the error message in the hubStatus table */ boolean trackHubHasDatabase(struct trackHub *hub, char *database) ; /* Return TRUE if hub has contents for database */ -struct trackDb *hubAddTracks(struct hubConnectStatus *hub, char *database, boolean *foundFirstGenome, struct hash *trackDbNameHash); +struct trackDb *hubAddTracks(struct hubConnectStatus *hub, char *database, boolean *foundFirstGenome, struct hash *trackDbNameHash, struct grp **hubGroups); /* Load up stuff from data hub and append to list. The hubUrl points to * a trackDb.ra format file. Only the first example of a genome gets to * populate groups, the others get a group for the trackHub. A particular * trackDb is only read once even if referenced from more than one hub. */ char *hubConnectLoadHubs(struct cart *cart); /* load the track data hubs. Set a static global to remember them */ struct hubConnectStatus *hubConnectGetHubs(); /* return the static global to the track data hubs */ struct trackHub *hubConnectGetHub(char *hubUrl); /* Return the connected hub for hubUrl, or NULL if not found. Do not free result. */ struct trackHub *hubConnectGetHubForDb(char *db); /* Return the connected hub for db, or NULL if not found. Do not free result. */ struct trackDb *hubCollectTracks( char *database, struct grp **pGroupList); /* Generate trackDb structures for all the tracks in attached hubs. * Make grp structures for each hub. Returned group list is reversed. */ char *hubConnectSkipHubPrefix(char *trackName); /* Given something like "hub_123_myWig" return myWig. Don't free this, it's not allocated */ struct hubConnectStatus *hubFromId(unsigned hubId); /* Given a hub ID number, return corresponding trackHub structure. * ErrAbort if there's a problem. */ struct hubConnectStatus *hubConnectNewHub(); /* return the hub of the hubUrl we added (if any) */ char *hubPublicTableName(); /* Get the name of the table that lists public hubs. Don't free the result. */ char *hubNameFromUrl(char *hubUrl); /* Given the URL for a hub, return its hub_# name. */ void addPublicHubsToHubStatus(struct cart *cart, struct sqlConnection *conn, char *publicTable, char *statusTable); /* Add urls in the hubPublic table to the hubStatus table if they aren't there already */ struct hash *buildPublicLookupHash(struct sqlConnection *conn, char *publicTable, char *statusTable, struct hash **pHash); /* Return a hash linking hub URLs to struct hubEntries. Also make pHash point to a hash that just stores * the names of the public hubs (for use later when determining if hubs were added by the user) */ boolean hubConnectIsCurated(char *db); /* Look in the dbDb table to see if this hub is curated. */ boolean hubConnectGetCuratedUrl(char *db, char **hubUrl); /* Check to see if this db is a curated hub and if so return its hubUrl */ #endif /* HUBCONNECT_H */