00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00032 #ifndef __CDS_OBJECTS_H__
00033 #define __CDS_OBJECTS_H__
00034
00035 #include "common.h"
00036 #include "dictionary.h"
00037 #include "cds_resource.h"
00038
00039
00040 #define OBJECT_TYPE_CONTAINER 0x00000001
00041 #define OBJECT_TYPE_ITEM 0x00000002
00042 #define OBJECT_TYPE_ACTIVE_ITEM 0x00000004
00043 #define OBJECT_TYPE_ITEM_EXTERNAL_URL 0x00000008
00044 #define OBJECT_TYPE_ITEM_INTERNAL_URL 0x00000010
00045
00046 #define STRING_OBJECT_TYPE_CONTAINER "container"
00047 #define STRING_OBJECT_TYPE_ITEM "item"
00048 #define STRING_OBJECT_TYPE_ACTIVE_ITEM "active_item"
00049 #define STRING_OBJECT_TYPE_EXTERNAL_URL "external_url"
00050 #define STRING_OBJECT_TYPE_INTERNAL_URL "internal_url"
00051
00052 #define IS_CDS_CONTAINER(type) (type & OBJECT_TYPE_CONTAINER)
00053 #define IS_CDS_ITEM(type) (type & OBJECT_TYPE_ITEM)
00054 #define IS_CDS_ACTIVE_ITEM(type) (type & OBJECT_TYPE_ACTIVE_ITEM)
00055 #define IS_CDS_ITEM_EXTERNAL_URL(type) (type & OBJECT_TYPE_ITEM_EXTERNAL_URL)
00056 #define IS_CDS_ITEM_INTERNAL_URL(type) (type & OBJECT_TYPE_ITEM_INTERNAL_URL)
00057 #define IS_CDS_PURE_ITEM(type) (type == OBJECT_TYPE_ITEM)
00058
00059 #define OBJECT_FLAG_RESTRICTED 0x00000001
00060 #define OBJECT_FLAG_SEARCHABLE 0x00000002
00061 #define OBJECT_FLAG_USE_RESOURCE_REF 0x00000004
00062 #define OBJECT_FLAG_PERSISTENT_CONTAINER 0x00000008
00063 #define OBJECT_FLAG_PLAYLIST_REF 0x00000010
00064 #define OBJECT_FLAG_PROXY_URL 0x00000020
00065 #define OBJECT_FLAG_ONLINE_SERVICE 0x00000040
00066 #define OBJECT_FLAG_OGG_THEORA 0x00000080
00067 #define OBJECT_FLAG_DVD_IMAGE 0x00000100
00068 #define OBJECT_FLAG_PLAYED 0x00000200
00069
00070 #define OBJECT_AUTOSCAN_NONE 0
00071 #define OBJECT_AUTOSCAN_UI 1
00072 #define OBJECT_AUTOSCAN_CFG 2
00073
00074 int CdsObjectTitleComparator(void *arg1, void *arg2);
00075
00077 class CdsObject : public zmm::Object
00078 {
00079 protected:
00081 int id;
00082
00084 int refID;
00085
00087 int parentID;
00088
00090 zmm::String title;
00091
00093 zmm::String upnpClass;
00094
00096 zmm::String location;
00097
00099 int virt;
00100
00102 unsigned int objectType;
00103
00105 unsigned int objectFlags;
00106
00108 int sortPriority;
00109
00110 zmm::Ref<Dictionary> metadata;
00111 zmm::Ref<Dictionary> auxdata;
00112 zmm::Ref<zmm::Array<CdsResource> > resources;
00113
00114
00115 public:
00117 CdsObject();
00118
00122 inline void setID(int id) { this->id = id; }
00123
00127 inline int getID() { return id; }
00128
00133 inline void setRefID(int refID) { this->refID = refID; }
00134
00139 inline int getRefID() { return refID; }
00140
00142 inline void setParentID(int parentID) { this->parentID = parentID; }
00143
00145 inline int getParentID() { return parentID; }
00146
00148 inline void setRestricted(bool restricted) { changeFlag(OBJECT_FLAG_RESTRICTED, restricted); }
00149
00151 inline bool isRestricted() { return getFlag(OBJECT_FLAG_RESTRICTED); }
00152
00154 inline void setTitle(zmm::String title) { this->title = title; }
00155
00157 inline zmm::String getTitle() { return title; }
00158
00160 inline void setClass(zmm::String upnpClass) { this->upnpClass = upnpClass; }
00161
00163 inline zmm::String getClass() { return upnpClass; }
00164
00166 inline void setLocation(zmm::String location) { this->location = location; }
00167
00169 inline zmm::String getLocation() { return location; }
00170
00172 inline void setVirtual(bool virt) { this->virt = virt; }
00173
00175 inline bool isVirtual() { return virt; }
00176
00178 inline unsigned int getObjectType() { return objectType; }
00179
00181 inline int getSortPriority() { return sortPriority; }
00182
00184 inline void setSortPriority(int sortPriority) { this->sortPriority = sortPriority; }
00185
00187 inline unsigned int getFlags() { return objectFlags; }
00188
00190 inline unsigned int getFlag(unsigned int mask) { return objectFlags & mask; }
00191
00193 inline void setFlags(unsigned int objectFlags) { this->objectFlags = objectFlags; }
00194
00196 inline void setFlag(unsigned int mask) { objectFlags |= mask; }
00197
00199 inline void changeFlag(unsigned int mask, bool value) { if (value) setFlag(mask); else clearFlag(mask); }
00200
00202 inline void clearFlag(unsigned int mask) { objectFlags &= ~mask; }
00203
00205 inline zmm::String getMetadata(zmm::String key)
00206 { return metadata->get(key); }
00207
00209 inline zmm::Ref<Dictionary> getMetadata() { return metadata; }
00210
00212 inline void setMetadata(zmm::Ref<Dictionary> metadata)
00213 { this->metadata = metadata; }
00214
00216 inline void setMetadata(zmm::String key, zmm::String value)
00217 { metadata->put(key, value); }
00218
00220 inline void removeMetadata(zmm::String key)
00221 { metadata->remove(key); }
00222
00223
00225 inline zmm::String getAuxData(zmm::String key)
00226 { return auxdata->get(key); }
00227
00229 inline zmm::Ref<Dictionary> getAuxData() { return auxdata; }
00230
00232 inline void setAuxData(zmm::String key, zmm::String value)
00233 { auxdata->put(key, value); }
00234
00236 inline void setAuxData(zmm::Ref<Dictionary> auxdata)
00237 { this->auxdata = auxdata; }
00238
00240 inline void removeAuxData(zmm::String key)
00241 { auxdata->remove(key); }
00242
00243
00245 inline int getResourceCount() { return resources->size(); }
00246
00248 inline zmm::Ref<zmm::Array<CdsResource> > getResources()
00249 { return resources; }
00250
00252 inline void setResources(zmm::Ref<zmm::Array<CdsResource> > res)
00253 { resources = res; }
00254
00256 inline zmm::Ref<CdsResource> getResource(int index)
00257 { return resources->get(index); }
00258
00260 inline void addResource(zmm::Ref<CdsResource> resource)
00261 { resources->append(resource); }
00262
00264 inline void insertResource(int index, zmm::Ref<CdsResource> resource)
00265 { resources->insert(index, resource); }
00266
00269 virtual void copyTo(zmm::Ref<CdsObject> obj);
00270
00278 virtual int equals(zmm::Ref<CdsObject> obj, bool exactly=false);
00279
00282 int resourcesEqual(zmm::Ref<CdsObject> obj);
00283
00285 virtual void validate();
00286
00288 void optimize();
00289
00290 static zmm::Ref<CdsObject> createObject(unsigned int objectType);
00291
00293 virtual zmm::String getVirtualPath() = 0;
00294
00295 static zmm::String mapObjectType(int objectType);
00296 static int remapObjectType(zmm::String objectType);
00297
00298 friend int CdsObjectTitleComparator(void *arg1, void *arg2);
00299 };
00300
00302 class CdsItem : public CdsObject
00303 {
00304 protected:
00306 zmm::String mimeType;
00307
00308 int trackNumber;
00309
00311 zmm::String serviceID;
00312
00313 public:
00315 CdsItem();
00316
00318 inline void setMimeType(zmm::String mimeType) { this->mimeType = mimeType; }
00319
00321 inline zmm::String getMimeType() { return mimeType; }
00322
00324 inline void setTrackNumber(int trackNumber) { this->trackNumber = trackNumber; }
00325
00326 inline int getTrackNumber() { return trackNumber; }
00329 virtual void copyTo(zmm::Ref<CdsObject> obj);
00330
00334 virtual int equals(zmm::Ref<CdsObject> obj, bool exactly=false);
00335
00337 virtual void validate();
00338
00340 virtual zmm::String getVirtualPath();
00341
00343 inline void setServiceID(zmm::String serviceID) { this->serviceID = serviceID; }
00344
00346 inline zmm::String getServiceID() { return serviceID; }
00347 };
00348
00371 class CdsActiveItem : public CdsItem
00372 {
00373 protected:
00375 zmm::String action;
00376
00378 zmm::String state;
00379 public:
00380
00382 CdsActiveItem();
00383
00386 inline void setAction(zmm::String action) { this->action = action; }
00387
00389 inline zmm::String getAction() { return action; }
00390
00396 inline void setState(zmm::String state) { this->state = state; }
00397
00399 inline zmm::String getState() { return state; }
00400
00403 virtual void copyTo(zmm::Ref<CdsObject> obj);
00404
00408 virtual int equals(zmm::Ref<CdsObject> obj, bool exactly=false);
00409
00411 virtual void validate();
00412 };
00413
00415 class CdsItemExternalURL : public CdsItem
00416 {
00417 public:
00418
00420 CdsItemExternalURL();
00421
00424 inline void setURL(zmm::String URL) { this->location = URL; }
00425
00427 inline zmm::String getURL() { return location; }
00430
00431
00435
00436
00438 virtual void validate();
00439 };
00440
00450 class CdsItemInternalURL : public CdsItemExternalURL
00451 {
00452 public:
00453
00455 CdsItemInternalURL();
00456
00458 virtual void validate();
00459 };
00460
00461
00467
00468
00469
00471
00472
00474
00475
00476
00478
00479
00482
00483
00485
00486
00492
00493
00495
00496
00499
00500
00504
00505
00507
00508
00509
00510
00511
00513 class CdsContainer : public CdsObject
00514 {
00515 protected:
00517 int updateID;
00518
00520 int childCount;
00521
00523 int autoscanType;
00524
00525 public:
00527 CdsContainer();
00528
00530 inline void setSearchable(bool searchable) { changeFlag(OBJECT_FLAG_SEARCHABLE, searchable); }
00531
00533 inline int isSearchable() { return getFlag(OBJECT_FLAG_SEARCHABLE); }
00534
00536 inline void setUpdateID(int updateID) { this->updateID = updateID; }
00537
00539 inline int getUpdateID() { return updateID; }
00540
00542 inline void setChildCount(int childCount) { this->childCount = childCount; }
00543
00545 inline int getChildCount() { return childCount; }
00546
00548 inline int getAutoscanType() { return autoscanType; }
00549
00551 inline void setAutoscanType(int type) { autoscanType = type; }
00552
00555 virtual void copyTo(zmm::Ref<CdsObject> obj);
00556
00560 virtual int equals(zmm::Ref<CdsObject> obj, bool exactly=false);
00561
00563 virtual void validate();
00564
00566 virtual zmm::String getVirtualPath();
00567 };
00568
00569 #endif // __CDS_OBJECTS_H__