//============================================================================== juce::XmlElement* CodeFileList::createXmlState() { juce::XmlElement* state = new juce::XmlElement ("CodeFileList"); for (int i = getNumFiles(); --i >= 0;) { juce::XmlElement* fileState = new juce::XmlElement ("CodeFile"); fileState->setAttribute ("Path", getFile (i).getFullPathName()); state->prependChildElement (fileState); } return state; }
/* Goes through the spool queue directory and creates a linked list of queueEntry nodes, 1 node for each file, sorted by order in which files were put into the queue. */ queueEntry *getFiles() { DIR *dir; struct dirent *f; int numFiles = getNumFiles(); if(numFiles == 0) return NULL; queueEntry *root = NULL; //iterate over every file in queue if((dir = opendir(QUEUE_DIR)) != NULL) { while((f = readdir(dir)) != NULL) { if(strcmp(f->d_name, ".") == 0 || strcmp(f->d_name, "..") == 0 || strcmp(f->d_name, "index.txt") == 0 ) { continue; } queueEntry *entry = (queueEntry *) malloc(sizeof(queueEntry)); entry->next = NULL; entry->prev = NULL; char name[128] = ""; strncpy(name, f->d_name, strlen(f->d_name)+1); char *token = strtok(name, "_"); //create entry->name and entry->unqiueName strncpy(entry->name, token, strlen(token)+1); strncpy(entry->uniqueName, f->d_name+(strlen(token)+1), (strlen(f->d_name) - strlen(token))); char path[1024] = ""; strncpy(path, QUEUE_DIR, strlen(QUEUE_DIR)); strncat(path, f->d_name, strlen(f->d_name) + 1); struct stat statbuf; if(stat(path, &statbuf) == -1) { printf("Error getting file stats for file: %s\n", path); return NULL; } int owner = getUserId(f->d_name); if(owner <= 0) { printf("Error getting owner of file from queue index\n"); return NULL; } entry->owner = owner; entry->time = statbuf.st_mtime; root = insert(root, entry); } closedir(dir); } return root; }
//============================================================================== int RecentlyOpenedFilesList::createPopupMenuItems (PopupMenu& menuToAddTo, const int baseItemId, const bool showFullPaths, const bool dontAddNonExistentFiles, const File** filesToAvoid) { int num = 0; for (int i = 0; i < getNumFiles(); ++i) { const File f (getFile(i)); if ((! dontAddNonExistentFiles) || f.exists()) { bool needsAvoiding = false; if (filesToAvoid != nullptr) { for (const File** avoid = filesToAvoid; *avoid != nullptr; ++avoid) { if (f == **avoid) { needsAvoiding = true; break; } } } if (! needsAvoiding) { menuToAddTo.addItem (baseItemId + i, showFullPaths ? f.getFullPathName() : f.getFileName()); ++num; } } } return num; }
void RecentlyOpenedFilesList::removeNonExistentFiles() { for (int i = getNumFiles(); --i >= 0;) if (! getFile(i).exists()) files.remove (i); }
//============================================================================== void RecentlyOpenedFilesList::setMaxNumberOfItems (const int newMaxNumber) { maxNumberOfItems = jmax (1, newMaxNumber); files.removeRange (maxNumberOfItems, getNumFiles()); }