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<BR>\n");
+
+uglyf("added hub_%s_ prefix to track list<BR>\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. */
 {