1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license that can
* be found in the License.html file in the root of the source tree.
*/
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
// Queue functions
//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//---------------------------------------------------------------------------
#ifndef QueueH
#define QueueH
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#ifdef MEDIAINFO_DLL_RUNTIME
#include "MediaInfoDLL/MediaInfoDLL.h"
#define MediaInfoNameSpace MediaInfoDLL
#elif defined MEDIAINFO_DLL_STATIC
#include "MediaInfoDLL/MediaInfoDLL_Static.h"
#define MediaInfoNameSpace MediaInfoDLL
#else
#include "MediaInfo/MediaInfo.h"
#define MediaInfoNameSpace MediaInfoLib
#endif
#include "ZenLib/Ztring.h"
#include "ZenLib/Thread.h"
#include "ZenLib/CriticalSection.h"
#include <MediaInfo/MediaInfo_Events.h>
//---------------------------------------------------------------------------
#include <map>
#include <list>
#include <vector>
namespace MediaConch
{
//***************************************************************************
// Class QueueElement
//***************************************************************************
class Queue;
class Scheduler;
struct Attachment
{
std::string filename;
std::string realname;
};
class QueueElement : public ZenLib::Thread
{
public:
QueueElement(Scheduler *s);
virtual ~QueueElement();
int user;
int id;
std::string filename;
std::string real_filename;
std::string options_str;
std::string error;
std::vector<std::pair<std::string, std::string> > options;
std::vector<std::string> plugins;
std::vector<Attachment*> attachments;
long file_id;
bool mil_analyze;
void Entry();
void stop();
double percent_done();
bool errored();
int attachment_cb(struct MediaInfo_Event_Global_AttachedFile_0 *Event);
int log_cb(struct MediaInfo_Event_Log_0 *Event);
private:
Scheduler* scheduler;
MediaInfoNameSpace::MediaInfo *MI;
ZenLib::CriticalSection MI_CS;
};
//***************************************************************************
// Enum priority
//***************************************************************************
enum QueuePriority
{
PRIORITY_NONE,
PRIORITY_LOW,
PRIORITY_MEDIUM,
PRIORITY_HIGH,
};
//***************************************************************************
// Class Queue
//***************************************************************************
class Queue
{
public:
Queue(Scheduler *s) : scheduler(s){}
~Queue();
int add_element(QueuePriority priority, int id, int user, const std::string& filename, long file_id,
const std::vector<std::pair<std::string,std::string> >& options,
const std::vector<std::string>& plugins, bool mil_analyze,
const std::string& alias="");
long has_element(int user, const std::string& filename);
int has_id(int user, long file_id);
int remove_element(int id);
int remove_elements(int user, const std::string& filename);
void clear();
QueueElement* run_next();
size_t queue_size() const { return queue.size(); }
private:
std::map<QueuePriority, std::list<QueueElement*> > queue;
Scheduler *scheduler;
};
}
#endif
|