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);
}
}