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