xref: /haiku/src/apps/text_search/FileIterator.cpp (revision 3f816b034d52761fa71ba2e272c77555a5c1fbf4)
11fffad3fSStephan Aßmus /*
2823808b5SAxel Dörfler  * Copyright 2008, Stephan Aßmus <superstippi@gmx.de>.
3823808b5SAxel Dörfler  * Copyright 1998-2007, Matthijs Hollemans.
41fffad3fSStephan Aßmus  *
5823808b5SAxel Dörfler  * Distributed under the terms of the MIT License.
61fffad3fSStephan Aßmus  */
71fffad3fSStephan Aßmus 
8823808b5SAxel Dörfler 
91fffad3fSStephan Aßmus #include "FileIterator.h"
101fffad3fSStephan Aßmus 
111fffad3fSStephan Aßmus #include <string.h>
121fffad3fSStephan Aßmus 
1368450777SStephan Aßmus #include <Entry.h>
141fffad3fSStephan Aßmus #include <NodeInfo.h>
151fffad3fSStephan Aßmus #include <Path.h>
161fffad3fSStephan Aßmus 
171fffad3fSStephan Aßmus 
FileIterator()1868450777SStephan Aßmus FileIterator::FileIterator()
191fffad3fSStephan Aßmus {
201fffad3fSStephan Aßmus }
211fffad3fSStephan Aßmus 
221fffad3fSStephan Aßmus 
~FileIterator()231fffad3fSStephan Aßmus FileIterator::~FileIterator()
241fffad3fSStephan Aßmus {
251fffad3fSStephan Aßmus }
261fffad3fSStephan Aßmus 
271fffad3fSStephan Aßmus 
281fffad3fSStephan Aßmus bool
_ExamineFile(BEntry & entry,char * buffer,bool textFilesOnly)2968450777SStephan Aßmus FileIterator::_ExamineFile(BEntry& entry, char* buffer, bool textFilesOnly)
301fffad3fSStephan Aßmus {
311fffad3fSStephan Aßmus 	BPath path;
321fffad3fSStephan Aßmus 	if (entry.GetPath(&path) != B_OK)
331fffad3fSStephan Aßmus 		return false;
341fffad3fSStephan Aßmus 
351fffad3fSStephan Aßmus 	strcpy(buffer, path.Path());
361fffad3fSStephan Aßmus 
37*3f816b03SJérôme Duval 	BNode node(&entry);
38*3f816b03SJérôme Duval 	if (!node.IsFile())
39*3f816b03SJérôme Duval 		return false;
40*3f816b03SJérôme Duval 
4168450777SStephan Aßmus 	if (!textFilesOnly)
421fffad3fSStephan Aßmus 		return true;
431fffad3fSStephan Aßmus 
44823808b5SAxel Dörfler 	BMimeType mimeType;
451fffad3fSStephan Aßmus 	BNodeInfo nodeInfo(&node);
461fffad3fSStephan Aßmus 	char mimeTypeString[B_MIME_TYPE_LENGTH];
471fffad3fSStephan Aßmus 
48823808b5SAxel Dörfler 	if (nodeInfo.GetType(mimeTypeString) != B_OK) {
49823808b5SAxel Dörfler 		// try to get a MIME type before failing
50823808b5SAxel Dörfler 		if (BMimeType::GuessMimeType(path.Path(), &mimeType) != B_OK)
5168450777SStephan Aßmus 			return false;
5268450777SStephan Aßmus 
53823808b5SAxel Dörfler 		nodeInfo.SetType(mimeType.Type());
54823808b5SAxel Dörfler 	} else
55823808b5SAxel Dörfler 		mimeType.SetTo(mimeTypeString);
561fffad3fSStephan Aßmus 
57823808b5SAxel Dörfler 	BMimeType superType;
581fffad3fSStephan Aßmus 	if (mimeType.GetSupertype(&superType) == B_OK) {
591fffad3fSStephan Aßmus 		if (strcmp("text", superType.Type()) == 0
601fffad3fSStephan Aßmus 			|| strcmp("message", superType.Type()) == 0) {
611fffad3fSStephan Aßmus 			return true;
621fffad3fSStephan Aßmus 		}
631fffad3fSStephan Aßmus 	}
64878f1479SHumdinger 	// Make an exception for XHTML files
65878f1479SHumdinger 	if (strcmp("application/xhtml+xml", mimeTypeString) == 0)
66878f1479SHumdinger 		return true;
671fffad3fSStephan Aßmus 
681fffad3fSStephan Aßmus 	return false;
691fffad3fSStephan Aßmus }
701fffad3fSStephan Aßmus 
71