1/* 2 * Copyright 2008, Stephan A��mus <superstippi@gmx.de>. 3 * Copyright 1998-2007, Matthijs Hollemans. 4 * 5 * Distributed under the terms of the MIT License. 6 */ 7 8 9#include "FileIterator.h" 10 11#include <string.h> 12 13#include <Entry.h> 14#include <NodeInfo.h> 15#include <Path.h> 16 17 18FileIterator::FileIterator() 19{ 20} 21 22 23FileIterator::~FileIterator() 24{ 25} 26 27 28bool 29FileIterator::_ExamineFile(BEntry& entry, char* buffer, bool textFilesOnly) 30{ 31 BPath path; 32 if (entry.GetPath(&path) != B_OK) 33 return false; 34 35 strcpy(buffer, path.Path()); 36 37 BNode node(&entry); 38 if (!node.IsFile()) 39 return false; 40 41 if (!textFilesOnly) 42 return true; 43 44 BMimeType mimeType; 45 BNodeInfo nodeInfo(&node); 46 char mimeTypeString[B_MIME_TYPE_LENGTH]; 47 48 if (nodeInfo.GetType(mimeTypeString) != B_OK) { 49 // try to get a MIME type before failing 50 if (BMimeType::GuessMimeType(path.Path(), &mimeType) != B_OK) 51 return false; 52 53 nodeInfo.SetType(mimeType.Type()); 54 } else 55 mimeType.SetTo(mimeTypeString); 56 57 BMimeType superType; 58 if (mimeType.GetSupertype(&superType) == B_OK) { 59 if (strcmp("text", superType.Type()) == 0 60 || strcmp("message", superType.Type()) == 0) { 61 return true; 62 } 63 } 64 // Make an exception for XHTML files 65 if (strcmp("application/xhtml+xml", mimeTypeString) == 0) 66 return true; 67 68 return false; 69} 70 71