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	if (!textFilesOnly)
38		return true;
39
40	BMimeType mimeType;
41	BNode node(&entry);
42	BNodeInfo nodeInfo(&node);
43	char mimeTypeString[B_MIME_TYPE_LENGTH];
44
45	if (nodeInfo.GetType(mimeTypeString) != B_OK) {
46		// try to get a MIME type before failing
47		if (BMimeType::GuessMimeType(path.Path(), &mimeType) != B_OK)
48			return false;
49
50		nodeInfo.SetType(mimeType.Type());
51	} else
52		mimeType.SetTo(mimeTypeString);
53
54	BMimeType superType;
55	if (mimeType.GetSupertype(&superType) == B_OK) {
56		if (strcmp("text", superType.Type()) == 0
57			|| strcmp("message", superType.Type()) == 0) {
58			return true;
59		}
60	}
61	// Make an exception for XHTML files
62	if (strcmp("application/xhtml+xml", mimeTypeString) == 0)
63		return true;
64
65	return false;
66}
67
68