f003629f68153a2913857d282fe1ebf9614d1791 tdreszer Thu Apr 7 13:22:40 2011 -0700 Make fileIndex an implied mdb var as far as file search is concerned. diff --git src/hg/lib/fileUi.c src/hg/lib/fileUi.c index e7c46e3..9ca8db7 100644 --- src/hg/lib/fileUi.c +++ src/hg/lib/fileUi.c @@ -831,71 +831,79 @@ if (slCount(mdbList) == 0) { printf("

No files found.

\n"); return 0; } // Now sort mdbObjs so that composites will stay together and lookup of files will be most efficient mdbObjsSortOnVars(&mdbList, MDB_VAR_COMPOSITE); mdbObjRemoveHiddenVars(mdbList); #define FOUND_FILE_LIMIT 1000 int fileCount = 0; // Verify file existance and make fileList of those found struct fileDb *fileList = NULL, *oneFile = NULL; // Will contain found files struct mdbObj *mdbFiles = NULL; // Will caontain a list of mdbs for the found files -while(mdbList && fileCount < FOUND_FILE_LIMIT) +while(mdbList && fileCount < FOUND_FILE_LIMIT) // TODO: collapse this and the hgFileUi version into a single function. { + char buf[512]; boolean found = FALSE; struct mdbObj *mdbFile = slPopHead(&mdbList); char *composite = mdbObjFindValue(mdbFile,MDB_VAR_COMPOSITE); if (composite != NULL) { // First for FileName char *fileName = mdbObjFindValue(mdbFile,MDB_VAR_FILENAME); if (fileName != NULL) { oneFile = fileDbGet(db, ENCODE_DCC_DOWNLOADS, composite, fileName); if (oneFile) { //warn("%s == %s",fileType,oneFile->fileType); if (isEmpty(fileType) || sameWord(fileType,"Any") || (oneFile->fileType && sameWord(fileType,oneFile->fileType))) { slAddHead(&fileList,oneFile); oneFile->mdb = mdbFile; slAddHead(&mdbFiles,oneFile->mdb); fileCount++; found = TRUE; if (fileCount == FOUND_FILE_LIMIT) break; } } else fileDbFree(&oneFile); } // Now for FileIndexes + if (fileName && endsWith(fileName,".bam")) // Special to fill in missing .bam.bai's + { + safef(buf,sizeof(buf),"%s.bai",fileName); + fileName = buf; + } + else fileName = mdbObjFindValue(mdbFile,MDB_VAR_FILEINDEX); if (fileName != NULL) { // Verify existance first oneFile = fileDbGet(db, ENCODE_DCC_DOWNLOADS, composite, fileName); if (oneFile) { //warn("%s == %s",fileType,oneFile->fileType); if (isEmpty(fileType) || sameWord(fileType,"Any") - || (oneFile->fileType && sameWord(fileType,oneFile->fileType))) + || (oneFile->fileType && sameWord(fileType,oneFile->fileType)) + || (oneFile->fileType && sameWord(fileType,"bam") && sameWord("bam.bai",oneFile->fileType))) // TODO: put fileType matching into search.c lib code to segregate index logic. { slAddHead(&fileList,oneFile); if (found) // if already found then need two mdbObjs (assertable but then this is metadata) oneFile->mdb = mdbObjClone(mdbFile); // Do we really need to clone this? else oneFile->mdb = mdbFile; slAddHead(&mdbFiles,oneFile->mdb); fileCount++; found = TRUE; continue; } else fileDbFree(&oneFile); } }