77da195bc4b0f335574943a2daca3afd4677e8b8 braney Fri Apr 26 14:47:29 2013 -0700 libify the connection to all the hubs by request of Angie. diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c index 5380e8d..a13984c 100644 --- src/hg/hgTracks/hgTracks.c +++ src/hg/hgTracks/hgTracks.c @@ -3404,60 +3404,36 @@ { if (wordCount != 3) errAbort("Expecting 3 words in pix line"); trackLayoutSetPicWidth(&tl, words[2]); } } } for (ct = ctList; ct != NULL; ct = ct->next) { hasCustomTracks = TRUE; tg = newCustomTrack(ct); slAddHead(pTrackList, tg); } } -void loadTrackHubs(struct track **pTrackList, struct trackHub **pHubList) +void loadTrackHubs(struct track **pTrackList, struct trackHub **pHubList, struct grp **pGrpList) /* Load up stuff from data hubs and append to lists. */ { -struct hubConnectStatus *hub, *hubList = hubConnectGetHubs(); -for (hub = hubList; hub != NULL; hub = hub->next) - { - if (isEmpty(hub->errorMessage)) - { +struct trackDb *tdbList = hubCollectTracks(database, pHubList, pGrpList); - /* error catching in so it won't just abort */ - struct errCatch *errCatch = errCatchNew(); - if (errCatchStart(errCatch)) - { - struct trackDb *tdbList = hubAddTracks(hub, database, pHubList); addTdbListToTrackList(tdbList, NULL, pTrackList); - // we're going to free the hubConnectStatus list - hub->trackHub = NULL; - } - errCatchEnd(errCatch); - if (errCatch->gotError) - { - warn("%s", errCatch->message->string); - hubUpdateStatus( errCatch->message->string, hub); - } - else - hubUpdateStatus(NULL, hub); - errCatchFree(&errCatch); - } - } -hubConnectStatusFreeList(&hubList); } boolean restrictionEnzymesOk() /* Check to see if it's OK to do restriction enzymes. */ { return (sqlDatabaseExists("hgFixed") && hTableExists("hgFixed", "cutters") && hTableExists("hgFixed", "rebaseRefs") && hTableExists("hgFixed", "rebaseCompanies")); } static void setSuperTrackHasVisibleMembers(struct trackDb *tdb) /* Determine if any member tracks are visible -- currently * recording this in the parent's visibility setting */ { tdb->visibility = tvDense; @@ -3481,31 +3457,31 @@ return strcmp(a->shortLabel, b->shortLabel); } static void rPropagateGroup(struct track *track, struct group *group) // group should spread to multiple levels of children. { struct track *subtrack = track->subtracks; for ( ;subtrack != NULL;subtrack = subtrack->next) { subtrack->group = group; rPropagateGroup(subtrack, group); } } static void groupTracks(struct trackHub *hubList, struct track **pTrackList, - struct group **pGroupList, int vis) + struct group **pGroupList, struct grp *grpList, int vis) /* Make up groups and assign tracks to groups. * If vis is -1, restore default groups to tracks. */ { struct group *unknown = NULL; struct group *group, *list = NULL; struct hash *hash = newHash(8); struct track *track; struct trackRef *tr; struct grp* grps = hLoadGrps(database); struct grp *grp; float minPriority = 100000; // something really large /* build group objects from database. */ for (grp = grps; grp != NULL; grp = grp->next) { @@ -3522,59 +3498,53 @@ if (priority == grp->priority) cartRemove(cart, cartVar); } /* create group object; add to list and hash */ AllocVar(group); group->name = cloneString(grp->name); group->label = cloneString(grp->label); group->defaultPriority = grp->priority; group->priority = priority; group->defaultIsClosed = grp->defaultIsClosed; slAddHead(&list, group); hashAdd(hash, grp->name, group); } grpFreeList(&grps); -/* build group objects from hub */ - { - int count = slCount(hubList); - - if (count) // if we have track hubs +double priorityInc; +double priority; +if (grpList) { - slSort(&hubList, hubCmpAlpha); // alphabetize minPriority -= 1.0; // priority is 1-based // the idea here is to get enough room between priority 1 // (which is custom tracks) and the group with the next // priority number, so that the hub nestle inbetween the // custom tracks and everything else at the top of the list // of track groups - double priorityInc = (0.9 * minPriority) / count; - double priority = 1.0 + priorityInc; - - struct trackHub *hub; - for (hub = hubList; hub != NULL; hub = hub->next) + priorityInc = (0.9 * minPriority) / slCount(grpList); + priority = 1.0 + priorityInc; + } +for(; grpList; grpList = grpList->next) { AllocVar(group); - group->name = cloneString(hub->name); - group->label = cloneString(hub->shortLabel); + group->name = cloneString(grpList->name); + group->label = cloneString(grpList->label); group->defaultPriority = group->priority = priority; priority += priorityInc; slAddHead(&list, group); hashAdd(hash, group->name, group); } - } - } /* Loop through tracks and fill in their groups. * If necessary make up an unknown group. */ for (track = *pTrackList; track != NULL; track = track->next) { /* handle track reordering feature -- change group assigned to track */ if (withPriorityOverride) { char *groupName = NULL; char cartVar[256]; /* belt and suspenders -- accomodate inconsistent track/trackDb * creation. Note -- with code cleanup, these default variables * could be retired, and the tdb versions used as defaults */ if (!track->defaultGroupName) @@ -3801,37 +3771,34 @@ slSafeAddHead(&trackList, userPslTg()); slSafeAddHead(&trackList, oligoMatchTg()); if (restrictionEnzymesOk()) { slSafeAddHead(&trackList, cuttersTg()); } if (wikiTrackEnabled(database, NULL)) { addWikiTrack(&trackList); struct sqlConnection *conn = wikiConnect(); if (sqlTableExists(conn, "variome")) addVariomeWikiTrack(&trackList); wikiDisconnect(&conn); } -if (cartOptionalString(cart, "hgt.trackNameFilter") == NULL) - { // If a single track was asked for and it is from a hub, then it is already in trackList - loadTrackHubs(&trackList, &hubList); - slReverse(&hubList); - } +struct grp *grpList = NULL; +loadTrackHubs(&trackList, &hubList, &grpList); loadCustomTracks(&trackList); -groupTracks(hubList, &trackList, pGroupList, vis); +groupTracks(hubList, &trackList, pGroupList, grpList, vis); setSearchedTrackToPackOrFull(trackList); if (cgiOptionalString( "hideTracks")) changeTrackVis(groupList, NULL, tvHide); /* Get visibility values if any from ui. */ for (track = trackList; track != NULL; track = track->next) { char *s = cartOptionalString(cart, track->track); if (cgiOptionalString("hideTracks")) { s = cgiOptionalString(track->track); if (s != NULL && (hTvFromString(s) != track->tdb->visibility)) { cartSetString(cart, track->track, s); }