770ed6ada89bdaaac49ba96963510af0a9338b89
galt
  Thu Feb 14 11:44:29 2019 -0800
hgSession custom track backup archive creation for downloading. Changing approach from backupAndRestore to backupOnly. Uses just plain real ascii .ct custom tracks.

diff --git src/hg/hgSession/hgSession.c src/hg/hgSession/hgSession.c
index c15aecc..6192545 100644
--- src/hg/hgSession/hgSession.c
+++ src/hg/hgSession/hgSession.c
@@ -453,54 +453,30 @@
 printf("  ");
 cgiMakeButton(hgsDoLoadLocal, "submit");
 printf("</TD></TR>\n");
 printf("<TR><TD colspan=2></TD></TR>\n");
 
 printf("<TR><TD colspan=2>Use settings from a URL (http://..., ftp://...):"
        "</TD>\n");
 printf("<TD>\n");
 cgiMakeOnKeypressTextVar(hgsLoadUrlName,
 			 cartUsualString(cart, hgsLoadUrlName, ""),
 			 20, jsPressOnEnter(hgsDoLoadUrl));
 printf("&nbsp;&nbsp;");
 cgiMakeButton(hgsDoLoadUrl, "submit");
 printf("</TD></TR>\n");
 
-printf("<TR><TD colspan=2></TD></TR>\n");
-
-char name[256];
-safef(name, sizeof name, "%s", hgsExtractUploadPrefix);
-
-printf("<TR>");
-printf("<TD colspan=2>Use settings including custom tracks in local backup archive file (.tar.gz):</TD>");
-printf("<TD><INPUT TYPE=FILE NAME='%s' id='%s'>", name, name);
-printf("&nbsp;&nbsp;<input type='submit' id='archiveUpload' value='submit'></TD></TR>");
-printf("<TR><TD colspan=2></TD></TR>");
-
-// check the file name, e.g. does it have the right name or extension?
-char js[1024];
-safef(js, sizeof js, 
-"var control = document.getElementById('%s');"
-"var files = control.files;"
-"if ((files.length == 1) && (files[0].name.endsWith('.tar.gz')))"
-"    return true;"
-"alert('Please choose the correct backup archive ending in .tar.gz');"
-"return false;"
-, name);
-
-jsOnEventById("click", "archiveUpload", js);
-
 printf("</TABLE>\n");
 printf("<P></P>\n");
 }
 
 void showSavingOptions(char *userName)
 /* Show options for saving a new named session in our db or to a file. */
 {
 printf("<H3>Save Settings</H3>\n");
 printf("<TABLE BORDERWIDTH=0>\n");
 
 if (isNotEmpty(userName))
     {
     printf("<TR><TD colspan=4>Save current settings as named session:"
 	   "</TD></TR>\n"
 	   "<TR><TD>&nbsp;&nbsp;&nbsp;</TD><TD>name:</TD><TD>\n");
@@ -551,33 +527,33 @@
 char *compressType = cartUsualString(cart, hgsSaveLocalFileCompress, textOutCompressNone);
 cgiMakeRadioButton(hgsSaveLocalFileCompress, textOutCompressNone,
 		   differentWord(textOutCompressGzip, compressType));
 printf("&nbsp;plain text&nbsp&nbsp");
 cgiMakeRadioButton(hgsSaveLocalFileCompress, textOutCompressGzip,
 		   sameWord(textOutCompressGzip, compressType));
 printf("&nbsp;gzip compressed (ignored if output file is blank)");
 printf("</TD><TD>");
 printf("&nbsp;");
 cgiMakeButton(hgsDoSaveLocal, "submit");
 printf("</TD></TR>\n");
 printf("<TR><TD></TD><TD colspan=3>(leave file blank to get output in "
        "browser window)</TD></TR>\n");
 printf("<TR><TD colspan=4></TD></TR>\n");
 
-printf("<TR><TD colspan=4>Save Full Session:</TD></TR>\n");
+printf("<TR><TD colspan=4>Save Custom Tracks:</TD></TR>\n");
 printf("<TR><TD>&nbsp;&nbsp;&nbsp;</TD><TD colspan=2>");
-printf("backup settings including custom tracks to archive .tar.gz</TD>");
+printf("backup custom tracks to archive .tar.gz</TD>");
 printf("<TD>");
 printf("&nbsp;");
 cgiMakeButton(hgsShowDownloadPrefix, "submit");
 printf("</TD></TR>\n");
 
 printf("<TR><TD colspan=4></TD></TR>\n");
 printf("</TABLE>\n");
 }
 
 void showSessionControls(char *userName, boolean savedSessionsSupported,
 			 boolean webStarted)
 /* If userName is non-null, show sessions that belong to user and allow
  * saving of named sessions.
  * If savedSessionsSupported, allow import of named sessions.
  * Allow export/import of settings from file/URL. */
@@ -719,32 +695,30 @@
 {
 char varName[256];
 safef(varName, sizeof(varName), "%s%s", cgiBooleanShadowPrefix(), hgsSharePrefix);
 cartRemovePrefix(cart, varName);
 cartRemovePrefix(cart, hgsSharePrefix);
 safef(varName, sizeof(varName), "%s%s", cgiBooleanShadowPrefix(), hgsGalleryPrefix);
 cartRemovePrefix(cart, varName);
 cartRemovePrefix(cart, hgsGalleryPrefix);
 cartRemovePrefix(cart, hgsLoadPrefix);
 cartRemovePrefix(cart, hgsEditPrefix);
 cartRemovePrefix(cart, hgsLoadLocalFileName);
 cartRemovePrefix(cart, hgsDeletePrefix);
 cartRemovePrefix(cart, hgsShowDownloadPrefix);
 cartRemovePrefix(cart, hgsMakeDownloadPrefix);
 cartRemovePrefix(cart, hgsDoDownloadPrefix);
-cartRemovePrefix(cart, hgsExtractUploadPrefix);
-cartRemovePrefix(cart, hgsDoUploadPrefix);
 cartRemovePrefix(cart, hgsDo);
 cartRemove(cart, hgsOldSessionName);
 cartRemove(cart, hgsCancel);
 }
 
 static void outIfNotPresent(struct cart *cart, struct dyString *dy, char *track, int tdbVis)
 /* Output default trackDb visibility if it's not mentioned in the cart. */
 {
 char *cartVis = cartOptionalString(cart, track);
 if (cartVis == NULL)
     {
     if (dy)
         dyStringPrintf(dy,"&%s=%s", track, hStringFromTv(tdbVis));
     else
         printf("%s %s\n", track, hStringFromTv(tdbVis));
@@ -1463,32 +1437,30 @@
     char *encNewName = cgiEncodeFull(newName);
     sqlSafef(query, sizeof(query),
 	  "UPDATE %s set sessionName = '%s' WHERE userName = '%s' AND sessionName = '%s';",
 	  namedSessionTable, encNewName, encUserName, encSessionName);
 	sqlUpdate(conn, query);
     dyStringPrintf(dyMessage, "Changed session name from %s to <B>%s</B>.\n",
 		   sessionName, newName);
     sessionName = newName;
     encSessionName = encNewName;
     renamePrefixedCartVar(hgsEditPrefix         , encOldSessionName, encNewName);
     renamePrefixedCartVar(hgsLoadPrefix         , encOldSessionName, encNewName);
     renamePrefixedCartVar(hgsDeletePrefix       , encOldSessionName, encNewName);
     renamePrefixedCartVar(hgsShowDownloadPrefix , encOldSessionName, encNewName);
     renamePrefixedCartVar(hgsMakeDownloadPrefix , encOldSessionName, encNewName);
     renamePrefixedCartVar(hgsDoDownloadPrefix   , encOldSessionName, encNewName);
-    renamePrefixedCartVar(hgsExtractUploadPrefix, encOldSessionName, encNewName);
-    renamePrefixedCartVar(hgsDoUploadPrefix     , encOldSessionName, encNewName);
     if (shared >= 2)
         {
         thumbnailRemove(encUserName, encSessionName, conn);
         thumbnailAdd(encUserName, encNewName, conn, dyMessage);
         }
     }
 
 char sharedVarName[256];
 char galleryVarName[256];
 safef(sharedVarName, sizeof(sharedVarName), hgsSharePrefix "%s", encOldSessionName);
 safef(galleryVarName, sizeof(galleryVarName), hgsGalleryPrefix "%s", encOldSessionName);
 if (cgiBooleanDefined(sharedVarName) || cgiBooleanDefined(galleryVarName))
     {
     int newShared = shared;
     if (cgiBooleanDefined(sharedVarName))
@@ -1670,143 +1642,63 @@
     {
     // clear backgroundStatus from the cart
     cartRemove(cart, "backgroundStatus");
     /* Save cart variables. */
     cartSaveState(cart);
     getBackgroundStatus(backgroundStatus);
     exit(0);
     }
 
 char *backgroundExec = cloneString(cgiUsualString("backgroundExec", NULL));
 
 
 struct hashEl *showDownloadList = cartFindPrefix(cart, hgsShowDownloadPrefix);
 struct hashEl *makeDownloadList = cartFindPrefix(cart, hgsMakeDownloadPrefix);
 struct hashEl *doDownloadList = cartFindPrefix(cart, hgsDoDownloadPrefix);
-struct hashEl *extractUploadList = cartFindPrefix(cart, hgsExtractUploadPrefix);
-struct hashEl *doUploadList = cartFindPrefix(cart, hgsDoUploadPrefix);
 
-// The form gets submitted but no filename for upload was chosen and submitted.
-if (extractUploadList && sameString(hgsExtractUploadPrefix, extractUploadList->name))
-    extractUploadList = NULL; // no filename was submitted. ignore.
+// TODO REMOVE THESE LINES GALT
+//struct hashEl *extractUploadList = cartFindPrefix(cart, hgsExtractUploadPrefix);
+//struct hashEl *doUploadList = cartFindPrefix(cart, hgsDoUploadPrefix);
 
 if (showDownloadList)
     showDownloadSessionCtData(showDownloadList);
 else if (makeDownloadList)
     {
     if (sameOk(backgroundExec,"makeDownloadSessionCtData"))
 	{
 	// only one, not a list.
 	struct hashEl *hel = makeDownloadList;
 	char *param1 = cloneString(hel->name);
 
 	char *backgroundProgress = NULL; 
 	prepBackGroundCall(&backgroundProgress, hgsMakeDownloadPrefix);
 
 	makeDownloadSessionCtData(param1, backgroundProgress);
 
 	exit(0);  // cannot return
 	}
     else
 	{
 
 	launchForeAndBackGround("makeDownloadSessionCtData");
 
 	exit(0);
 	}
 
     }
 else if (doDownloadList)
     doDownloadSessionCtData(doDownloadList);
-else if (extractUploadList)
-    {
-    if (sameOk(backgroundExec,"extractUploadSessionCtData"))
-	{
-	// only one, but becomes a list
-        // since there are multiple cart names with suffixes for handling binary submitted file.
-	//hgS_extractUpload___filepath 
-	//hgS_extractUpload___binary 
-	//hgS_extractUpload___filename 
-	char *param1 = NULL;
-	char *param2 = NULL;
-	char *param3 = NULL;
-	struct hashEl *hel = NULL;
-	for (hel = extractUploadList; hel; hel = hel->next)
-	    {
-	    if (endsWith(hel->name, "__binary"))
-		param1 = cloneString(hel->name);
-	    if (endsWith(hel->name, "__filename"))
-		param2 = cloneString(hel->name);
-	    if (endsWith(hel->name, "__filepath"))
-		param3 = cloneString(hel->name);
-	    }
-	if (!param1)
-	    errAbort("missing __binary param");
-	if (!param2)
-	    errAbort("missing __filename param");
-	if (!param3)
-	    errAbort("missing __filepath param");
-
-	char *param1Value = cloneString(cartOptionalString(cart, param1));
-	char *param2Value = cloneString(cartOptionalString(cart, param2));
-	char *param3Value = cloneString(cartOptionalString(cart, param3));
-
-	char *backgroundProgress = NULL; 
-	prepBackGroundCall(&backgroundProgress, hgsExtractUploadPrefix);
-
-	extractUploadSessionCtData(
-	    param1, param1Value, 
-	    param2, param2Value, 
-	    param3, param3Value, 
-	    backgroundProgress);
-
-	exit(0);  // cannot return
-	}
-    else
-	{
-	passSubmittedBinaryAsTrashFile(extractUploadList);
-
-	launchForeAndBackGround("extractUploadSessionCtData");
-
-	exit(0);
-	}
-
-    }
-else if (doUploadList)
-    {
-    if (sameOk(backgroundExec,"doUploadSessionCtData"))
-	{
-	// only one, not a list.
-	struct hashEl *hel = doUploadList;
-	char *param1 = cloneString(hel->name);
-
-	char *backgroundProgress = NULL; 
-	prepBackGroundCall(&backgroundProgress, hgsDoUploadPrefix);
-
-	doUploadSessionCtData(param1, backgroundProgress);
-
-	exit(0);  // cannot return
-	}
-    else
-	{
-
-	launchForeAndBackGround("doUploadSessionCtData");
-
-	exit(0);
-	}
-
-    }
 else if (cartVarExists(cart, hgsDoMainPage) || cartVarExists(cart, hgsCancel))
     doMainPage(userName, NULL);
 else if (cartVarExists(cart, hgsDoNewSession))
     {
     char *message = doNewSession(userName);
     doMainPage(userName, message);
     }
 else if (cartVarExists(cart, hgsDoOtherUser))
     {
     char *message = doOtherUser(hgsDoOtherUser);
     doMainPage(userName, message);
     }
 else if (cartVarExists(cart, hgsDoSaveLocal))
     {
     doSaveLocal();