xref: /haiku/src/apps/text_search/FileIterator.cpp (revision 823808b52bb5514961debc0558c26dbd51765b42)
11fffad3fSStephan Aßmus /*
2*823808b5SAxel Dörfler  * Copyright 2008, Stephan Aßmus <superstippi@gmx.de>.
3*823808b5SAxel Dörfler  * Copyright 1998-2007, Matthijs Hollemans.
41fffad3fSStephan Aßmus  *
5*823808b5SAxel Dörfler  * Distributed under the terms of the MIT License.
61fffad3fSStephan Aßmus  */
71fffad3fSStephan Aßmus 
8*823808b5SAxel 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 
1868450777SStephan Aßmus FileIterator::FileIterator()
191fffad3fSStephan Aßmus {
201fffad3fSStephan Aßmus }
211fffad3fSStephan Aßmus 
221fffad3fSStephan Aßmus 
231fffad3fSStephan Aßmus FileIterator::~FileIterator()
241fffad3fSStephan Aßmus {
251fffad3fSStephan Aßmus }
261fffad3fSStephan Aßmus 
271fffad3fSStephan Aßmus 
281fffad3fSStephan Aßmus bool
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 
3768450777SStephan Aßmus 	if (!textFilesOnly)
381fffad3fSStephan Aßmus 		return true;
391fffad3fSStephan Aßmus 
40*823808b5SAxel Dörfler 	BMimeType mimeType;
411fffad3fSStephan Aßmus 	BNode node(&entry);
421fffad3fSStephan Aßmus 	BNodeInfo nodeInfo(&node);
431fffad3fSStephan Aßmus 	char mimeTypeString[B_MIME_TYPE_LENGTH];
441fffad3fSStephan Aßmus 
45*823808b5SAxel Dörfler 	if (nodeInfo.GetType(mimeTypeString) != B_OK) {
46*823808b5SAxel Dörfler 		// try to get a MIME type before failing
47*823808b5SAxel Dörfler 		if (BMimeType::GuessMimeType(path.Path(), &mimeType) != B_OK)
4868450777SStephan Aßmus 			return false;
4968450777SStephan Aßmus 
50*823808b5SAxel Dörfler 		nodeInfo.SetType(mimeType.Type());
51*823808b5SAxel Dörfler 	} else
52*823808b5SAxel Dörfler 		mimeType.SetTo(mimeTypeString);
531fffad3fSStephan Aßmus 
54*823808b5SAxel Dörfler 	BMimeType superType;
551fffad3fSStephan Aßmus 	if (mimeType.GetSupertype(&superType) == B_OK) {
561fffad3fSStephan Aßmus 		if (strcmp("text", superType.Type()) == 0
571fffad3fSStephan Aßmus 			|| strcmp("message", superType.Type()) == 0) {
581fffad3fSStephan Aßmus 			return true;
591fffad3fSStephan Aßmus 		}
601fffad3fSStephan Aßmus 	}
611fffad3fSStephan Aßmus 
621fffad3fSStephan Aßmus 	return false;
631fffad3fSStephan Aßmus }
641fffad3fSStephan Aßmus 
65