113 lines
3.3 KiB
C
113 lines
3.3 KiB
C
|
#ifndef _SVC_ITEMMGR_H
|
||
|
#define _SVC_ITEMMGR_H
|
||
|
|
||
|
#include <bfc/dispatch.h>
|
||
|
#include <api/service/services.h>
|
||
|
|
||
|
class NOVTABLE svc_itemMgr : public Dispatchable {
|
||
|
public:
|
||
|
static FOURCC getServiceType() { return WaSvc::ITEMMANAGER; }
|
||
|
|
||
|
int isMine(const char *playstring) { return _call(ISMINE, 0, playstring); }
|
||
|
|
||
|
int optimizePlaystring(char *playstring) {
|
||
|
return _call(OPTIMIZEPLAYSTRING, 0, playstring);
|
||
|
}
|
||
|
int createInitialName(const char *playstring, char *buf, int buflen) {
|
||
|
return _call(CREATEINITIALNAME, 0, playstring, buf, buflen);
|
||
|
}
|
||
|
int optimizeFileData(const char *playstring, const char *fieldname, int datatype, char *data, int datalen) {
|
||
|
return _call(OPTIMIZEFILEDATA, -1, playstring, fieldname, datatype, data, datalen);
|
||
|
}
|
||
|
|
||
|
int onDatabaseAdd(const char *playstring) {
|
||
|
return _call(ONDATABASEADD, 0, playstring);
|
||
|
}
|
||
|
int onDatabaseDel(const char *playstring) {
|
||
|
return _call(ONDATABASEDEL, 0, playstring);
|
||
|
}
|
||
|
|
||
|
//return 1 if changed
|
||
|
int onTitleChange(const char *playstring, const char *newtitle) {
|
||
|
return _call(ONTITLECHANGE, 0, playstring, newtitle);
|
||
|
}
|
||
|
int onTitle2Change(const char *playstring, const char *newtitle) {
|
||
|
return _call(ONTITLE2CHANGE, 0, playstring, newtitle);
|
||
|
}
|
||
|
|
||
|
void onNextFile(const char *playstring) {
|
||
|
_voidcall(ONNEXTFILE, playstring);
|
||
|
}
|
||
|
|
||
|
void onFileComplete(const char *playstring) {
|
||
|
_voidcall(ONFILECOMPLETE, playstring);
|
||
|
}
|
||
|
|
||
|
int wantScanData(const char *playstring) {
|
||
|
return _call(WANTSCANDATA, 1, playstring);
|
||
|
}
|
||
|
|
||
|
int getSortOrder() {
|
||
|
return _call(GETSORTORDER, 0);
|
||
|
}
|
||
|
|
||
|
enum {
|
||
|
ISMINE=100,
|
||
|
OPTIMIZEPLAYSTRING=200,
|
||
|
OPTIMIZEFILEDATA=211, //210 retired
|
||
|
CREATEINITIALNAME=300,
|
||
|
ONDATABASEADD=400,
|
||
|
ONDATABASEDEL=401,
|
||
|
ONTITLECHANGE=600,
|
||
|
ONTITLE2CHANGE=601,
|
||
|
ONNEXTFILE=700,
|
||
|
ONFILECOMPLETE=800,
|
||
|
WANTSCANDATA=900,
|
||
|
GETSORTORDER=1000,
|
||
|
};
|
||
|
};
|
||
|
|
||
|
// derive from this one
|
||
|
class NOVTABLE svc_itemMgrI : public svc_itemMgr {
|
||
|
public:
|
||
|
virtual int isMine(const char *playstring)=0;
|
||
|
virtual int optimizePlaystring(char *playstring) { return 0; }
|
||
|
virtual int createInitialName(const char *playstring, char *buf, int buflen) { return 0; }
|
||
|
virtual int optimizeFileData(const char *playstring, const char *fieldname, int datatype, char *data, int datalen) { return -1; }
|
||
|
virtual int onDatabaseAdd(const char *playstring) { return 0; }
|
||
|
virtual int onDatabaseDel(const char *playstring) { return 0; }
|
||
|
virtual int onTitleChange(const char *playstring, const char *newtitle) { return 0; }
|
||
|
virtual int onTitle2Change(const char *playstring, const char *newtitle) { return 0; }
|
||
|
virtual void onNextFile(const char *playstring) { }
|
||
|
virtual void onFileComplete(const char *playstring) { }
|
||
|
|
||
|
virtual int wantScanData(const char *playstring) { return 1; }
|
||
|
|
||
|
virtual int getSortOrder() { return 0; }
|
||
|
|
||
|
protected:
|
||
|
RECVS_DISPATCH;
|
||
|
};
|
||
|
|
||
|
#include <bfc/named.h>
|
||
|
#include <api/service/svc_enum.h>
|
||
|
|
||
|
class ItemMgrEnum : private Named, public SvcEnumT<svc_itemMgr> {
|
||
|
public:
|
||
|
ItemMgrEnum(const char *ps) : Named(ps) { }
|
||
|
|
||
|
void setPlaystring(const char *ps) { Named::setName(ps); }
|
||
|
|
||
|
protected:
|
||
|
virtual int testService(svc_itemMgr *svc) {
|
||
|
return svc->isMine(getName());
|
||
|
}
|
||
|
};
|
||
|
|
||
|
#include <api/service/servicei.h>
|
||
|
|
||
|
template <class T>
|
||
|
class ItemMgrCreator : public waServiceFactoryTSingle<svc_itemMgr, T> { };
|
||
|
|
||
|
#endif
|