6411d5f0ae8b75f54dc71f28a6c0690a9d567895
braney
  Mon May 16 11:29:37 2011 -0700
make private (now unlisted) hubs use the same status table as the public hubs, no trash use
diff --git src/hg/lib/hubConnect.c src/hg/lib/hubConnect.c
index 3df3634..7138135 100644
--- src/hg/lib/hubConnect.c
+++ src/hg/lib/hubConnect.c
@@ -15,31 +15,31 @@
 #include "trackHub.h"
 #include "hubConnect.h"
 #include "hui.h"
 
 
 boolean isHubTrack(char *trackName)
 /* Return TRUE if it's a hub track. */
 {
 return startsWith(hubTrackPrefix, trackName);
 }
 
 boolean hubConnectTableExists()
 /* Return TRUE if the hubConnect table exists. */
 {
 struct sqlConnection *conn = hConnectCentral();
-boolean exists = sqlTableExists(conn, hubConnectTableName);
+boolean exists = sqlTableExists(conn, hubPublicTableName);
 hDisconnectCentral(&conn);
 return exists;
 }
 
 void hubConnectStatusFree(struct hubConnectStatus **pHub)
 /* Free hubConnectStatus */
 {
 struct hubConnectStatus *hub = *pHub;
 if (hub != NULL)
     {
     freeMem(hub->shortLabel);
     freeMem(hub->longLabel);
     freeMem(hub->hubUrl);
     freeMem(hub->errorMessage);
     if (hub->dbArray)
@@ -91,151 +91,70 @@
     cartRemove(cart, hgHubConnectRemakeTrackHub);
     }
 }
 
 struct slName *hubConnectHubsInCart(struct cart *cart)
 /* Return list of track hub ids that are turned on. */
 {
 hubConnectRemakeTrackHubVar(cart);
 char *trackHubString = cartOptionalString(cart, hubConnectTrackHubsVarName);
 return slNameListFromString(trackHubString, ' ');
 }
 
 static struct hubConnectStatus *hubConnectStatusForIdDb(struct sqlConnection *conn, int id)
 /* Given a hub ID return associated status. Returns NULL if no such hub.  If hub
  * exists but has problems will return with errorMessage field filled in. */
- /* If the id is negative, then the hub is private and the number is the
-  * offset into the private hubfile in the trash */
 {
 struct hubConnectStatus *hub = NULL;
 char query[1024];
 safef(query, sizeof(query), 
-    "select id,shortLabel,longLabel,hubUrl,errorMessage,dbCount,dbList from %s where id=%d",
-    hubConnectTableName, id);
+    "select id,shortLabel,longLabel,hubUrl,errorMessage,dbCount,dbList,status from %s where id=%d",
+    hubStatusTableName, id);
 struct sqlResult *sr = sqlGetResult(conn, query);
 char **row = sqlNextRow(sr);
 if (row != NULL)
     {
     AllocVar(hub);
     hub->id = sqlUnsigned(row[0]);
     hub->shortLabel = cloneString(row[1]);
     hub->longLabel = cloneString(row[2]);
     hub->hubUrl = cloneString(row[3]);
     hub->errorMessage = cloneString(row[4]);
     hub->dbCount = sqlUnsigned(row[5]);
     int sizeOne;
     sqlStringDynamicArray(row[6], &hub->dbArray, &sizeOne);
     assert(sizeOne == hub->dbCount);
+    hub->status = sqlUnsigned(row[7]);
     }
 sqlFreeResult(&sr);
 return hub;
 }
 
-boolean hubWriteToFile(FILE *f, struct hubConnectStatus *el)
-/* write out a hubConnectStatus structure to a file */
-{
-char sep = '\t';
-char lastSep = '\n';
-
-fprintf(f, "%d", el->id);
-fputc(sep,f);
-fprintf(f, "%s", el->shortLabel);
-fputc(sep,f);
-fprintf(f, "%s", el->longLabel);
-fputc(sep,f);
-fprintf(f, "%s", el->hubUrl);
-fputc(sep,f);
-fprintf(f, "%s", el->errorMessage);
-fputc(sep,f);
-fprintf(f, "%u", el->dbCount);
-fputc(sep,f);
-int ii;
-for(ii=0; ii < el->dbCount; ii++)
+boolean isHubUnlisted(struct hubConnectStatus *hub) 
+/* Return TRUE if it's an unlisted hub */
     {
-    fprintf(f, "%s", el->dbArray[ii]);
-    if (ii != el->dbCount - 1)
-	fprintf(f, ",");
-    }
-fputc(lastSep,f);
-
-return TRUE;
-}
-
-
-static struct hubConnectStatus *readHubFromFile(struct lineFile *lf)
-{
-struct hubConnectStatus *hub = NULL;
-char *row[5];
-int count;
-if ((count = lineFileChopTab(lf, row)) != ArraySize(row))
-    errAbort("expect %d fields on line %d in %s, got %d\n",(int)ArraySize(row),lf->lineIx, lf->fileName, count);
-
-AllocVar(hub);
-hub->id = sqlSigned(row[0]);
-hub->shortLabel = cloneString(row[1]);
-hub->longLabel = cloneString(row[2]);
-hub->hubUrl = cloneString(row[3]);
-//hub->errorMessage = cloneString(row[4]);
-hub->dbCount = sqlUnsigned(row[4]);
-//int sizeOne;
-//sqlStringDynamicArray(row[5], &hub->dbArray, &sizeOne);
-//assert(sizeOne == hub->dbCount);
-
-return hub;
-}
-
-#define HUBFILE_CART_NAME	"hghub_file"
-
-char *hubFileVar()
-/* return the name of the cart variable that holds the name of the
- * file in trash that has private hubs */
-{
-return HUBFILE_CART_NAME;
-}
-
-struct hubConnectStatus *hubConnectStatusForIdFile(struct cart *cart, int id)
-  /* id is offset into the private hubfile in the trash */
-{
-struct hubConnectStatus *hub = NULL;
-char *fileVar = hubFileVar();
-char *hubFileName = cartOptionalString(cart, fileVar);
-struct lineFile *lf = lineFileOpen(hubFileName, TRUE);
-int lineSize;
-char *line;
-int count = id;
-
-while(--count)
-    if (lineFileNext(lf, &line, &lineSize) == FALSE)
-	errAbort("not enough lines in %s to find line number %d\n",
-	    lf->fileName, id);
-
-hub = readHubFromFile(lf);
-
-return hub;
+    return (hub->status & HUB_UNLISTED);
 }
 
 struct hubConnectStatus *hubConnectStatusForId(struct cart *cart, struct sqlConnection *conn, int id)
 /* Given a hub ID return associated status. Returns NULL if no such hub.  If hub
  * exists but has problems will return with errorMessage field filled in. */
  /* If the id is negative, then the hub is private and the number is the
   * offset into the private hubfile in the trash */
 {
 struct hubConnectStatus *hub = NULL;
 
-if (id < 0)
-    hub = hubConnectStatusForIdFile(cart, -id);
-else
     hub = hubConnectStatusForIdDb(conn, id);
 
 return hub;
 }
 
 
 struct hubConnectStatus *hubConnectStatusListFromCart(struct cart *cart)
 /* Return list of track hubs that are turned on by user in cart. */
 {
 struct hubConnectStatus *hubList = NULL, *hub;
 struct slName *name, *nameList = hubConnectHubsInCart(cart);
 struct sqlConnection *conn = hConnectCentral();
 for (name = nameList; name != NULL; name = name->next)
     {
     int id = sqlSigned(name->name);
@@ -244,57 +163,57 @@
 	{
         slAddHead(&hubList, hub);
 	}
     }
 slFreeList(&nameList);
 hDisconnectCentral(&conn);
 slReverse(&hubList);
 return hubList;
 }
 
 int hubIdFromTrackName(char *trackName)
 /* Given something like "hub_123_myWig" return 123 */
 {
 assert(startsWith("hub_", trackName));
 trackName += 4;
-return atoi(trackName);
+return sqlUnsigned(trackName);
 }
 
 char *hubConnectSkipHubPrefix(char *trackName)
 /* Given something like "hub_123_myWig" return myWig.  Don't free this, it's not allocated */
 {
 assert(startsWith("hub_", trackName));
 trackName += 4;
 trackName = strchr(trackName, '_');
 assert(trackName != NULL);
 return trackName + 1;
 }
 
-struct trackHub *trackHubFromId(struct cart *cart, int hubId)
+struct trackHub *trackHubFromId(struct cart *cart, unsigned hubId)
 /* Given a hub ID number, return corresponding trackHub structure. 
  * ErrAbort if there's a problem. */
 {
 struct sqlConnection *conn = hConnectCentral();
 struct hubConnectStatus *status = hubConnectStatusForId(cart, conn, hubId);
 hDisconnectCentral(&conn);
 if (status == NULL)
     errAbort("The hubId %d was not found", hubId);
 if (!isEmpty(status->errorMessage))
     errAbort("Hub %s at %s has the error: %s", status->shortLabel, 
 	    status->hubUrl, status->errorMessage);
 char hubName[16];
-safef(hubName, sizeof(hubName), "hub_%d", hubId);
+safef(hubName, sizeof(hubName), "hub_%u", hubId);
 struct trackHub *hub = trackHubOpen(status->hubUrl, hubName);
 hubConnectStatusFree(&status);
 return hub;
 }
 
 static struct trackDb *findSuperTrack(struct trackDb *tdbList, char *trackName)
 /*  discover any supertracks, and if there are some add them 
  *  to the subtrack list of the supertrack */
 {
 struct trackDb *tdb;
 struct trackDb *p = NULL;
 struct trackDb *next;
 
 for(tdb = tdbList; tdb; tdb = next)
     {