11fffad3fSStephan Aßmus/*
2823808b5SAxel Dörfler * Copyright 2008, Stephan A��mus <superstippi@gmx.de>.
3823808b5SAxel Dörfler * Copyright 1998-2007, Matthijs Hollemans.
4823808b5SAxel Dörfler *
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
18823808b5SAxel DörflerFileIterator::FileIterator()
191fffad3fSStephan Aßmus{
201fffad3fSStephan Aßmus}
211fffad3fSStephan Aßmus
221fffad3fSStephan Aßmus
231fffad3fSStephan AßmusFileIterator::~FileIterator()
241fffad3fSStephan Aßmus{
251fffad3fSStephan Aßmus}
261fffad3fSStephan Aßmus
271fffad3fSStephan Aßmus
281fffad3fSStephan Aßmusbool
2968450777SStephan AßmusFileIterator::_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
40823808b5SAxel 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
45823808b5SAxel Dörfler	if (nodeInfo.GetType(mimeTypeString) != B_OK) {
46823808b5SAxel Dörfler		// try to get a MIME type before failing
47823808b5SAxel Dörfler		if (BMimeType::GuessMimeType(path.Path(), &mimeType) != B_OK)
48823808b5SAxel Dörfler			return false;
4968450777SStephan Aßmus
50823808b5SAxel Dörfler		nodeInfo.SetType(mimeType.Type());
51823808b5SAxel Dörfler	} else
52823808b5SAxel Dörfler		mimeType.SetTo(mimeTypeString);
531fffad3fSStephan Aßmus
54823808b5SAxel Dörfler	BMimeType superType;
5568450777SStephan Aßmus	if (mimeType.GetSupertype(&superType) == B_OK) {
5668450777SStephan Aßmus		if (strcmp("text", superType.Type()) == 0
5768450777SStephan Aßmus			|| strcmp("message", superType.Type()) == 0) {
5868450777SStephan Aßmus			return true;
591fffad3fSStephan Aßmus		}
601fffad3fSStephan Aßmus	}
61878f1479SHumdinger	// Make an exception for XHTML files
62878f1479SHumdinger	if (strcmp("application/xhtml+xml", mimeTypeString) == 0)
63878f1479SHumdinger		return true;
641fffad3fSStephan Aßmus
651fffad3fSStephan Aßmus	return false;
661fffad3fSStephan Aßmus}
671fffad3fSStephan Aßmus
68