37a331259beee4fa8ebe7aa7f4d5b9d765a14c7f kent Thu Jan 6 15:45:34 2011 -0800 Starting to make hgHubConnect talk with hgTracks and hgTrackUi. Right now the tracks appear on the track list, but are not displaying properly. diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c index 25edbb0..5ef46ef 100644 --- src/hg/lib/trackHub.c +++ src/hg/lib/trackHub.c @@ -95,44 +95,46 @@ char *trackHubSetting(struct trackHub *hub, char *name) /* Return setting if it exists, otherwise NULL. */ { return hashFindVal(hub->settings, name); } char *trackHubRequiredSetting(struct trackHub *hub, char *name) /* Return named setting. Abort with error message if not found. */ { char *val = trackHubSetting(hub, name); if (val == NULL) errAbort("Missing required setting %s from %s", name, hub->url); return val; } -struct trackHub *trackHubOpen(char *url) -/* Open up a track hub from url. Reads and parses hub.ra and the genomesFile. */ +struct trackHub *trackHubOpen(char *url, char *hubName) +/* Open up a track hub from url. Reads and parses hub.ra and the genomesFile. + * The hubName is generally just the asciified ID number. */ { struct lineFile *lf = udcWrapShortLineFile(url, NULL, 256*1024); struct hash *hubRa = raNextRecord(lf); if (hubRa == NULL) errAbort("empty %s in trackHubOpen", url); if (raNextRecord(lf) != NULL) errAbort("multiple records in %s", url); /* Allocate hub and fill in settings field and url. */ struct trackHub *hub; AllocVar(hub); hub->url = cloneString(url); +hub->name = cloneString(hubName); hub->settings = hubRa; /* Fill in required fields from settings. */ hub->shortLabel = trackHubRequiredSetting(hub, "shortLabel"); hub->longLabel = trackHubRequiredSetting(hub, "longLabel"); hub->genomesFile = trackHubRequiredSetting(hub, "genomesFile"); lineFileClose(&lf); char *genomesUrl = trackHubRelativeUrl(hub->url, hub->genomesFile); hub->genomeHash = hashNew(8); hub->genomeList = trackHubGenomeReadRa(genomesUrl, hub->genomeHash); freez(&genomesUrl); return hub; @@ -281,30 +283,43 @@ if (parent == NULL) errAbort("Parent %s of track %s doesn't exist in hub %s genome %s", parentName, tdb->track, hub->url, genome->name); tdb->parent = parent; parent->subtracks = tdb; } } hashFree(&hash); /* Loop through list checking tags and removing ad-hoc use of parent and subtracks tags. */ for (tdb = tdbList; tdb != NULL; tdb = tdb->next) { checkTagsLegal(hub, genome, tdb); tdb->parent = tdb->subtracks = NULL; } + +trackDbAddTableField(tdbList); +trackHubAddNamePrefix(hub->name, tdbList); +trackHubAddGroupName(hub->name, tdbList); +for (tdb = tdbList; tdb != NULL; tdb = tdb->next) + { + trackDbFieldsFromSettings(tdb); + trackDbPolish(tdb); + } +uglyf("polished tracks
\n"); + +uglyf("added hub_%s_ prefix to track list
\n", hub->name); + return tdbList; } static void reprefixString(char **pString, char *prefix) /* Replace *pString with prefix + *pString, freeing * whatever was in *pString before. */ { char *oldName = *pString; *pString = catTwoStrings(prefix, oldName); freeMem(oldName); } static void addPrefixToSetting(struct hash *settings, char *key, char *prefix) /* Given a settings hash, which is string valued. Old values will be freed. */ {