49f31ee05d781083f1a9b7fcff2e99b974622c41 braney Tue Feb 4 09:06:51 2025 -0800 add custom tracks diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c index 4e2b08ef161..ba7b18863c7 100644 --- src/hg/lib/trackHub.c +++ src/hg/lib/trackHub.c @@ -1589,40 +1589,35 @@ if (cartVis != NULL) vis = differentString(cartVis, "hide"); else if (tdbIsSuperTrack(tdb->parent)) vis = tdb->parent->isShow; else vis = tdb->parent->visibility != tvHide; return vis; } struct dyString *trackDbString(struct trackDb *tdb) /* Convert a trackDb entry into a dyString. */ { struct dyString *dy; struct hash *existHash = newHash(5); -struct hashEl *hel; - -hel = hashLookup(tdb->settingsHash, "track"); -if (hel == NULL) - errAbort("can't find track variable in tdb"); -// add a prefix to the track name so the special cased loaders aren't used +// add a note that the name based handler shouldn't be used on this track // add a note that this is a quickLifted track so the browser will accept tracks that aren't big* dy = dyStringNew(200); -dyStringPrintf(dy, "track qlft%s\nquickLifted on\n", trackHubSkipHubName((char *)hel->val)); +dyStringPrintf(dy, "track %s\nquickLifted on\navoidHandler on\n", trackHubSkipHubName(tdb->track)); hashStore(existHash, "track"); dumpTdbAndParents(dy, tdb, existHash, NULL); return dy; } static void walkTree(FILE *f, struct cart *cart, struct trackDb *tdb, struct dyString *visDy) /* walk tree looking for visible tracks. */ { for(; tdb; tdb = tdb->next) { if (tdb->subtracks) walkTree(f, cart, tdb->subtracks, visDy); else @@ -1652,44 +1647,60 @@ { dyStringPrintf(visDy, "&%s=%s", tdb->track,hStringFromTv(tdb->visibility)); //if (hashLookup(tdb->settingsHash, "customized") == NULL) { hashRemove(tdb->settingsHash, "maxHeightPixels"); hashRemove(tdb->settingsHash, "superTrack"); hashRemove(tdb->settingsHash, "subGroups"); hashRemove(tdb->settingsHash, "polished"); hashRemove(tdb->settingsHash, "noInherit"); hashRemove(tdb->settingsHash, "group"); hashRemove(tdb->settingsHash, "parent"); } //hashReplace(tdb->settingsHash, "customized", "on"); + // is this a custom track? + char *tdbType = trackDbSetting(tdb, "tdbType"); + if (tdbType != NULL) + { + hashReplace(tdb->settingsHash, "type", tdbType); + hashReplace(tdb->settingsHash, "shortLabel", trackDbSetting(tdb, "name")); + hashReplace(tdb->settingsHash, "longLabel", trackDbSetting(tdb, "description")); + } + struct dyString *dy = trackDbString(tdb); fprintf(f, "%s\n", dy->string); } } } } char *trackHubBuild(char *db, struct cart *cart, struct dyString *visDy) /* Build a track hub using trackDb and the cart. */ { -struct trackDb *tdb = hTrackDb(db); -slSort(&tdb,trackDbCmp); +struct trackDb *tdbList = hTrackDb(db); + +// add custom tracks +struct customTrack *ctList, *ct; +ctList = customTracksParseCart(db, cart, NULL, NULL); +for (ct = ctList; ct != NULL; ct = ct->next) + slAddHead(&tdbList, ct->tdb); + +slSort(&tdbList,trackDbCmp); char *filename = getHubName(cart, db); FILE *f = mustOpen(filename, "a"); chmod(filename, 0666); -walkTree(f, cart, tdb, visDy); +walkTree(f, cart, tdbList, visDy); fclose(f); return cloneString(filename); } struct grp *trackHubGetGrps() /* Get the groups defined by attached track hubs. */ { return trackHubGrps; }