08996db0236137b9cf9b3893d74e7aae41873ab2 braney Thu Apr 14 12:33:46 2011 -0700 fixed up the forms to act a little more rationally... added error catching so new hubs that can't be opened don't errAbort diff --git src/hg/hgHubConnect/hgHubConnect.c src/hg/hgHubConnect/hgHubConnect.c index 3aa0b1b..8ba1ecb 100644 --- src/hg/hgHubConnect/hgHubConnect.c +++ src/hg/hgHubConnect/hgHubConnect.c @@ -63,77 +63,79 @@ { c = commaList[nameLen]; if (c == 0 || c == ',') return TRUE; } commaList = strchr(commaList, ','); if (commaList == NULL) return FALSE; commaList += 1; } } void hgHubConnectPrivate() /* Put up the list of private hubs and other controls for the page. */ { -printf("<FORM ACTION=\"%s\" METHOD=\"POST\" NAME=\"mainForm\">\n", "../cgi-bin/hgHubConnect"); -cartSaveSession(cart); -cgiMakeHiddenVar(hgHubDoAdd, "on"); printf("<B>List of Private Hubs</B><BR>"); struct hubConnectStatus *hub, *hubList = hubConnectStatusListFromCart(cart); int count = 0; for(hub = hubList; hub; hub = hub->next) { if (hub->id > 0) continue; - count++; - if (hub != hubList) + if (count) webPrintLinkTableNewRow(); else webPrintLinkTableStart(); + count++; if (isEmpty(hub->errorMessage)) { webPrintLinkCellStart(); char hubName[32]; safef(hubName, sizeof(hubName), "%s%d", hgHubConnectHubVarPrefix, hub->id); cartMakeCheckBox(cart, hubName, FALSE); webPrintLinkCellEnd(); } else webPrintLinkCell("error"); webPrintLinkCell(hub->shortLabel); if (isEmpty(hub->errorMessage)) webPrintLinkCell(hub->longLabel); else webPrintLinkCell(hub->errorMessage); webPrintLinkCell(hub->hubUrl); } if (count) webPrintLinkTableEnd(); else printf("No Private Track Hubs for this genome assembly<BR>"); +} + +static void makeNewHubButton() +{ +printf("<FORM ACTION=\"%s\" METHOD=\"POST\" NAME=\"secondForm\">\n", "../cgi-bin/hgHubConnect"); +cartSaveSession(cart); +cgiMakeHiddenVar(hgHubDoAdd, "on"); cgiMakeButton("add", "add new private hub"); +printf("</FORM>\n"); } void hgHubConnectPublic() /* Put up the list of external hubs and other controls for the page. */ { -destUrl = cartUsualString(cart, hgHubConnectCgiDestUrl, destUrl); -printf("<FORM ACTION=\"%s\" METHOD=\"POST\" NAME=\"mainForm\">\n", destUrl); -cartSaveSession(cart); -cgiMakeHiddenVar(hgHubConnectRemakeTrackHub, "on"); +//destUrl = cartUsualString(cart, hgHubConnectCgiDestUrl, destUrl); printf( "<P>Track data hubs are collections of tracks from outside of UCSC that can be imported into " "the Genome Browser. To import a public hub check the box in the list below. " "After import the hub will show up as a group of tracks with its own blue " "bar and label underneath the main browser graphic, and in the configure page. To arrange " "for your own track data hub to appear in this list, please contact genome@soe.ucsc.edu.</P>\n" ); getDbAndGenome(cart, &database, &organism, oldVars); printf("<B>genome:</B> %s <B>assembly:</B> %s [%s] ", organism, hFreezeDate(database), database); cgiMakeButton("submit", "submit"); printf("<BR>"); printf("<B>List of Public Hubs</B><BR>"); struct sqlConnection *conn = hConnectCentral(); char query[512]; @@ -167,36 +169,36 @@ else webPrintLinkCell("error"); webPrintLinkCell(shortLabel); if (isEmpty(errorMessage)) webPrintLinkCell(longLabel); else webPrintLinkCell(errorMessage); webPrintLinkCell(url); } } sqlFreeResult(&sr); if (gotAnyRows) webPrintLinkTableEnd(); else printf("No Track Hubs for this genome assembly"); -printf("</FORM>\n"); hDisconnectCentral(&conn); } static void addIntro() { +printf("Enter URL to remote hub.<BR>\n"); } void makeClearButton(char *field) /* UI button that clears a text field */ { char javascript[1024]; safef(javascript, sizeof javascript, "document.mainForm.%s.value = '';", field); cgiMakeOnClickButton(javascript, " Clear "); } void addPrivateHubForm(struct hubConnectStatus *hub, char *err) /* display UI for adding private hubs by URL or pasting data */ { getDbAndGenome(cart, &database, &organism, oldVars); @@ -225,30 +227,32 @@ /* row for error message */ if (err) printf("<P><B> <I><FONT COLOR='RED'>Error</I></FONT> %s</B><P>", err); printf("Enter URL:"); hTextVar(hgHubDataText, "", 60); cgiMakeSubmitButton(); puts("</FORM>"); } void helpPrivateHub() { +printf("Private hubs are constructed the same way as public hubs, but they " + "aren't listed in hgcentral<BR>\n"); } void doAddPrivateHub(struct cart *theCart, char *err) /* Write header and body of html page. */ { cartWebStart(cart, database, "Add Private Hub"); addPrivateHubForm(NULL, err); helpPrivateHub(); cartWebEnd(cart); } void hubSaveInCart(struct cart *cart, struct hubConnectStatus *hub) { char hubName[1024]; char *oldHubTrashName = cartOptionalString(cart, hubFileVar()); @@ -280,59 +284,76 @@ carefulClose(&f); safef(hubName, sizeof(hubName), "%s%d", hgHubConnectHubVarPrefix, hub->id); cartSetString(cart, hubName, "1"); cartSetString(cart, hubFileVar(), hubTrashName); } void checkForNewHub(struct cart *cart) { char *url = cartOptionalString(cart, hgHubDataText); if (url != NULL) { struct hubConnectStatus *hub = NULL; - struct trackHub *tHub = trackHubOpen(url, "1"); + struct trackHub *tHub = NULL; + + struct errCatch *errCatch = errCatchNew(); + if (errCatchStart(errCatch)) + tHub = trackHubOpen(url, "1"); + errCatchEnd(errCatch); + if (errCatch->gotError) + { + warn(errCatch->message->string); + return; + } + errCatchFree(&errCatch); AllocVar(hub); hub->hubUrl = cloneString(url); hub->errorMessage = ""; hub->shortLabel = tHub->shortLabel; hub->longLabel = tHub->longLabel; hub->dbCount = 0; AllocArray(hub->dbArray, 1); hub->dbArray[0] = database; hubSaveInCart(cart, hub); cartRemove(cart, hgHubDataText); } } void doMiddle(struct cart *theCart) /* Write header and body of html page. */ { cart = theCart; setUdcCacheDir(); if (cartVarExists(cart, hgHubDoAdd)) doAddPrivateHub(cart, NULL); else { cartWebStart(cart, NULL, pageTitle); checkForNewHub(cart); + printf("<FORM ACTION=\"%s\" METHOD=\"POST\" NAME=\"mainForm\">\n", destUrl); + cartSaveSession(cart); + cgiMakeHiddenVar(hgHubConnectRemakeTrackHub, "on"); hgHubConnectPublic(); hgHubConnectPrivate(); + puts("</FORM>"); + + makeNewHubButton(); } cartWebEnd(); } -char *excludeVars[] = {"Submit", "submit", "hc_one_url", hgHubConnectCgiDestUrl, NULL}; +char *excludeVars[] = {"Submit", "submit", "hc_one_url", hgHubConnectCgiDestUrl, hgHubDoAdd, NULL}; int main(int argc, char *argv[]) /* Process command line. */ { oldVars = hashNew(10); cgiSpoof(&argc, argv); cartEmptyShell(doMiddle, hUserCookie(), excludeVars, oldVars); return 0; }