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/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c
index f8cb7c4..e5a97ab 100644
--- src/hg/hgTrackUi/hgTrackUi.c
+++ src/hg/hgTrackUi/hgTrackUi.c
@@ -19,30 +19,32 @@
 #include "hgMaf.h"
 #include "obscure.h"
 #include "chainCart.h"
 #include "chainDb.h"
 #include "gvUi.h"
 #include "oregannoUi.h"
 #include "chromGraph.h"
 #include "hgConfig.h"
 #include "customTrack.h"
 #include "dbRIP.h"
 #include "tfbsConsSites.h"
 #include "hapmapSnps.h"
 #include "nonCodingUi.h"
 #include "expRecord.h"
 #include "wikiTrack.h"
+#include "hubConnect.h"
+#include "trackHub.h"
 #include "pcrResult.h"
 #include "dgv.h"
 #include "transMapStuff.h"
 
 #define MAIN_FORM "mainForm"
 #define WIGGLE_HELP_PAGE  "../goldenPath/help/hgWiggleTrackHelp.html"
 
 static char const rcsid[] = "$Id: hgTrackUi.c,v 1.527 2010/06/04 21:54:56 angie Exp $";
 
 struct cart *cart = NULL;	/* Cookie cart with UI settings */
 char *database = NULL;		/* Current database. */
 char *chromosome = NULL;        /* Chromosome. */
 struct hash *trackHash = NULL;	/* Hash of all tracks in database. */
 
 void tfbsConsSitesUi(struct trackDb *tdb)
@@ -2679,30 +2681,52 @@
     tdb = trackDbForOligoMatch();
 else if (sameWord(track, CUTTERS_TRACK_NAME))
     tdb = trackDbForPseudoTrack(CUTTERS_TRACK_NAME, CUTTERS_TRACK_LABEL, CUTTERS_TRACK_LONGLABEL, tvHide, TRUE);
 else if (isCustomTrack(track))
     {
     ctList = customTracksParseCart(database, cart, NULL, NULL);
     for (ct = ctList; ct != NULL; ct = ct->next)
         {
         if (sameString(track, ct->tdb->track))
             {
             tdb = ct->tdb;
             break;
             }
         }
     }
+else if (isHubTrack(track))
+    {
+    int hubId = hubIdFromTrackName(track);
+    struct sqlConnection *conn = hConnectCentral();
+    struct hubConnectStatus *hubStatus = hubConnectStatusForId(conn, hubId);
+    hDisconnectCentral(&conn);
+    if (hubStatus == NULL)
+        errAbort("The hubId %d was not found", hubId);
+    if (!isEmpty(hubStatus->errorMessage))
+        errAbort("Hub %s at %s has the error: %s", hubStatus->shortLabel, 
+		hubStatus->hubUrl, hubStatus->errorMessage);
+    char hubName[16];
+    safef(hubName, sizeof(hubName), "%d", hubId);
+    struct trackHub *hub = trackHubOpen(hubStatus->hubUrl, hubName);
+    struct trackHubGenome *hubGenome = trackHubFindGenome(hub, database);
+    struct trackDb *tdbList = trackHubTracksForGenome(hub, hubGenome);
+    tdbList = trackDbLinkUpGenerations(tdbList);
+    rAddTrackListToHash(trackHash, tdbList, chromosome, FALSE);
+    tdb = hashFindVal(trackHash, track);
+    if (tdb == NULL)
+	errAbort("Can't find track %s in %s", track, hubStatus->hubUrl);
+    }
 else if (sameString(track, "hgPcrResult"))
     tdb = pcrResultFakeTdb();
 else
     {
     tdb = hTrackDbForTrack(database, track);
     }
 if (tdb == NULL)
    {
    uglyAbort("Can't find %s in track database %s chromosome %s.  TrackHash has %d els",
 	    track, database, chromosome, trackHash->elCount);
    errAbort("Can't find %s in track database %s chromosome %s",
 	    track, database, chromosome);
    }
 char *super = trackDbGetSupertrackName(tdb);
 if (super)