#ifndef _PLT_FILE_MEDIA_SERVER_H_
#define _PLT_FILE_MEDIA_SERVER_H_
#include "Neptune.h"
#include "PltMediaServer.h"
#include "PltMediaCache.h"
class PLT_FileMediaServerDelegate : public PLT_MediaServerDelegate
{
public:
static NPT_String BuildSafeResourceUri(const NPT_HttpUrl& base_uri,
const char* host,
const char* file_path);
PLT_FileMediaServerDelegate(const char* url_root, const char* file_root, bool use_cache = false);
virtual ~PLT_FileMediaServerDelegate();
protected:
virtual NPT_Result OnBrowseMetadata(PLT_ActionReference& action,
const char* object_id,
const char* filter,
NPT_UInt32 starting_index,
NPT_UInt32 requested_count,
const char* sort_criteria,
const PLT_HttpRequestContext& context);
virtual NPT_Result OnBrowseDirectChildren(PLT_ActionReference& action,
const char* object_id,
const char* filter,
NPT_UInt32 starting_index,
NPT_UInt32 requested_count,
const char* sort_criteria,
const PLT_HttpRequestContext& context);
virtual NPT_Result OnSearchContainer(PLT_ActionReference& action,
const char* object_id,
const char* search_criteria,
const char* filter,
NPT_UInt32 starting_index,
NPT_UInt32 requested_count,
const char* sort_criteria,
const PLT_HttpRequestContext& context);
virtual NPT_Result ProcessFileRequest(NPT_HttpRequest& request,
const NPT_HttpRequestContext& context,
NPT_HttpResponse& response);
virtual NPT_Result ExtractResourcePath(const NPT_HttpUrl& url, NPT_String& file_path);
virtual NPT_String BuildResourceUri(const NPT_HttpUrl& base_uri, const char* host, const char* file_path);
virtual NPT_Result ServeFile(const NPT_HttpRequest& request,
const NPT_HttpRequestContext& context,
NPT_HttpResponse& response,
const NPT_String& file_path);
virtual NPT_Result GetFilePath(const char* object_id, NPT_String& filepath);
virtual bool ProcessFile(const NPT_String&, const char* filter = NULL) { NPT_COMPILER_UNUSED(filter); return true;}
virtual PLT_MediaObject* BuildFromFilePath(const NPT_String& filepath,
const PLT_HttpRequestContext& context,
bool with_count = true,
bool keep_extension_in_title = false,
bool allip = false);
protected:
friend class PLT_MediaItem;
NPT_String m_UrlRoot;
NPT_String m_FileRoot;
bool m_FilterUnknownOut;
bool m_UseCache;
PLT_MediaCache<NPT_Reference<NPT_List<NPT_String> >, NPT_TimeStamp> m_DirCache;
};
class PLT_FileMediaServer : public PLT_MediaServer,
public PLT_FileMediaServerDelegate
{
public:
PLT_FileMediaServer(const char* file_root,
const char* friendly_name,
bool show_ip = false,
const char* uuid = NULL,
NPT_UInt16 port = 0,
bool port_rebind = false) :
PLT_MediaServer(friendly_name,
show_ip,
uuid,
port,
port_rebind),
PLT_FileMediaServerDelegate("/", file_root) {SetDelegate(this);}
protected:
virtual ~PLT_FileMediaServer() {}
};
#endif