UpdateMimeInfoThread class, which is a subclass of MimeUpdateThread
that implements updating specific to update_mime_info(). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1268 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -0,0 +1,30 @@
|
|||||||
|
//----------------------------------------------------------------------
|
||||||
|
// This software is part of the OpenBeOS distribution and is covered
|
||||||
|
// by the OpenBeOS license.
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
/*!
|
||||||
|
\file UpdateMimeInfoThread.h
|
||||||
|
UpdateMimeInfoThread interface declaration
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _MIME_UPDATE_MIME_INFO_THREAD_H
|
||||||
|
#define _MIME_UPDATE_MIME_INFO_THREAD_H
|
||||||
|
|
||||||
|
#include <mime/MimeUpdateThread.h>
|
||||||
|
|
||||||
|
namespace BPrivate {
|
||||||
|
namespace Storage {
|
||||||
|
namespace Mime {
|
||||||
|
|
||||||
|
class UpdateMimeInfoThread : public MimeUpdateThread {
|
||||||
|
public:
|
||||||
|
UpdateMimeInfoThread(const char *name, int32 priority, BMessenger managerMessenger,
|
||||||
|
const entry_ref *root, bool recursive, bool force, BMessage *replyee);
|
||||||
|
status_t DoMimeUpdate(const entry_ref *entry, bool *entryIsDir);
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Mime
|
||||||
|
} // namespace Storage
|
||||||
|
} // namespace BPrivate
|
||||||
|
|
||||||
|
#endif // _MIME_UPDATE_MIME_INFO_THREAD_H
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
//----------------------------------------------------------------------
|
||||||
|
// This software is part of the OpenBeOS distribution and is covered
|
||||||
|
// by the OpenBeOS license.
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
/*!
|
||||||
|
\file UpdateMimeInfoThread.h
|
||||||
|
UpdateMimeInfoThread implementation
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "mime/UpdateMimeInfoThread.h"
|
||||||
|
|
||||||
|
#include <fs_attr.h>
|
||||||
|
#include <MimeType.h>
|
||||||
|
#include <mime/database_support.h>
|
||||||
|
#include <Node.h>
|
||||||
|
|
||||||
|
namespace BPrivate {
|
||||||
|
namespace Storage {
|
||||||
|
namespace Mime {
|
||||||
|
|
||||||
|
// constructor
|
||||||
|
//! Creates a new UpdateMimeInfoThread object
|
||||||
|
UpdateMimeInfoThread::UpdateMimeInfoThread(const char *name, int32 priority,
|
||||||
|
BMessenger managerMessenger, const entry_ref *root, bool recursive, bool force, BMessage *replyee)
|
||||||
|
: MimeUpdateThread(name, priority, managerMessenger, root, recursive, force, replyee)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// DoMimeUpdate
|
||||||
|
/*! \brief Performs an update_mime_info() update on the given entry
|
||||||
|
|
||||||
|
If the entry has no \c BEOS:TYPE attribute, or if \c fForce is true, the
|
||||||
|
entry is sniffed and its \c BEOS:TYPE attribute is set accordingly.
|
||||||
|
*/
|
||||||
|
status_t
|
||||||
|
UpdateMimeInfoThread::DoMimeUpdate(const entry_ref *entry, bool *entryIsDir)
|
||||||
|
{
|
||||||
|
status_t err = entry ? B_OK : B_BAD_VALUE;
|
||||||
|
bool doUpdate = true;
|
||||||
|
BNode node;
|
||||||
|
|
||||||
|
if (!err)
|
||||||
|
err = node.SetTo(entry);
|
||||||
|
if (!err && !fForce) {
|
||||||
|
// If not forced, only update if the entry has no file type attribute
|
||||||
|
attr_info info;
|
||||||
|
if (!err)
|
||||||
|
doUpdate = node.GetAttrInfo(kFileTypeAttr, &info) == B_ENTRY_NOT_FOUND;
|
||||||
|
}
|
||||||
|
if (!err && doUpdate) {
|
||||||
|
BMimeType type;
|
||||||
|
err = BMimeType::GuessMimeType(entry, &type);
|
||||||
|
if (!err)
|
||||||
|
err = type.InitCheck();
|
||||||
|
if (!err) {
|
||||||
|
const char *typeStr = type.Type();
|
||||||
|
ssize_t len = strlen(typeStr)+1;
|
||||||
|
ssize_t bytes = node.WriteAttr(kFileTypeAttr, kFileTypeType, 0, typeStr, len);
|
||||||
|
if (bytes < B_OK)
|
||||||
|
err = bytes;
|
||||||
|
else
|
||||||
|
err = (bytes != len ? B_FILE_ERROR : B_OK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!err && entryIsDir)
|
||||||
|
*entryIsDir = node.IsDirectory();
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Mime
|
||||||
|
} // namespace Storage
|
||||||
|
} // namespace BPrivate
|
||||||
|
|
||||||
Reference in New Issue
Block a user