00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef VALHALLA_H
00023 #define VALHALLA_H
00024
00031 #ifdef __cplusplus
00032 extern "C" {
00033 #endif
00034
00035 #define VH_STRINGIFY(s) #s
00036 #define VH_TOSTRING(s) VH_STRINGIFY(s)
00037
00038 #define VH_VERSION_INT(a, b, c) (a << 16 | b << 8 | c)
00039 #define VH_VERSION_DOT(a, b, c) a ##.## b ##.## c
00040 #define VH_VERSION(a, b, c) VH_VERSION_DOT(a, b, c)
00041
00042 #define LIBVALHALLA_VERSION_MAJOR 1
00043 #define LIBVALHALLA_VERSION_MINOR 0
00044 #define LIBVALHALLA_VERSION_MICRO 1
00045
00046 #define LIBVALHALLA_DB_VERSION 1
00047
00048 #define LIBVALHALLA_VERSION_INT VH_VERSION_INT(LIBVALHALLA_VERSION_MAJOR, \
00049 LIBVALHALLA_VERSION_MINOR, \
00050 LIBVALHALLA_VERSION_MICRO)
00051 #define LIBVALHALLA_VERSION VH_VERSION(LIBVALHALLA_VERSION_MAJOR, \
00052 LIBVALHALLA_VERSION_MINOR, \
00053 LIBVALHALLA_VERSION_MICRO)
00054 #define LIBVALHALLA_VERSION_STR VH_TOSTRING(LIBVALHALLA_VERSION)
00055 #define LIBVALHALLA_BUILD LIBVALHALLA_VERSION_INT
00056
00057 #include <inttypes.h>
00058
00059
00060
00061
00062
00063
00064
00065
00067 typedef struct valhalla_s valhalla_t;
00068
00070 enum valhalla_errno {
00071 VALHALLA_ERROR_DEAD = -4,
00072 VALHALLA_ERROR_PATH = -3,
00073 VALHALLA_ERROR_HANDLER = -2,
00074 VALHALLA_ERROR_THREAD = -1,
00075 VALHALLA_SUCCESS = 0,
00076 };
00077
00079 typedef enum valhalla_verb {
00080 VALHALLA_MSG_NONE,
00081 VALHALLA_MSG_VERBOSE,
00082 VALHALLA_MSG_INFO,
00083 VALHALLA_MSG_WARNING,
00084 VALHALLA_MSG_ERROR,
00085 VALHALLA_MSG_CRITICAL,
00086 } valhalla_verb_t;
00087
00089 typedef enum valhalla_dl {
00090 VALHALLA_DL_DEFAULT = 0,
00091 VALHALLA_DL_COVER,
00092 VALHALLA_DL_THUMBNAIL,
00093 VALHALLA_DL_FAN_ART,
00094 VALHALLA_DL_LAST
00095 } valhalla_dl_t;
00096
00098 typedef enum valhalla_event {
00099 VALHALLA_EVENT_PARSED = 0,
00100 VALHALLA_EVENT_GRABBED,
00101 VALHALLA_EVENT_ENDED,
00102 } valhalla_event_t;
00103
00146 valhalla_t *valhalla_init (const char *db,
00147 unsigned int parser_nb, int decrapifier,
00148 unsigned int commit_int,
00149 void (*od_cb) (const char *file, valhalla_event_t e,
00150 const char *id, void *data),
00151 void *od_data);
00152
00161 void valhalla_uninit (valhalla_t *handle);
00162
00171 void valhalla_verbosity (valhalla_verb_t level);
00172
00185 void valhalla_path_add (valhalla_t *handle,
00186 const char *location, int recursive);
00187
00201 void valhalla_suffix_add (valhalla_t *handle, const char *suffix);
00202
00243 void valhalla_bl_keyword_add (valhalla_t *handle, const char *keyword);
00244
00257 void valhalla_downloader_dest_set (valhalla_t *handle,
00258 valhalla_dl_t dl, const char *dst);
00259
00271 void valhalla_grabber_state_set (valhalla_t *handle,
00272 const char *id, int enable);
00273
00286 const char *valhalla_grabber_list_get (valhalla_t *handle, const char *id);
00287
00304 int valhalla_run (valhalla_t *handle, int loop, uint16_t timeout, int priority);
00305
00318 void valhalla_wait (valhalla_t *handle);
00319
00331 void valhalla_scanner_wakeup (valhalla_t *handle);
00332
00344 void valhalla_ondemand (valhalla_t *handle, const char *file);
00345
00350
00351
00352
00353
00354
00355
00356 typedef enum valhalla_file_type {
00357 VALHALLA_FILE_TYPE_NULL = 0,
00358 VALHALLA_FILE_TYPE_AUDIO,
00359 VALHALLA_FILE_TYPE_IMAGE,
00360 VALHALLA_FILE_TYPE_PLAYLIST,
00361 VALHALLA_FILE_TYPE_VIDEO,
00362 } valhalla_file_type_t;
00363
00365 typedef enum valhalla_meta_grp {
00369 VALHALLA_META_GRP_NIL = 0,
00370
00375 VALHALLA_META_GRP_CLASSIFICATION,
00376
00381 VALHALLA_META_GRP_COMMERCIAL,
00382
00386 VALHALLA_META_GRP_CONTACT,
00387
00394 VALHALLA_META_GRP_ENTITIES,
00395
00399 VALHALLA_META_GRP_IDENTIFIER,
00400
00404 VALHALLA_META_GRP_LEGAL,
00405
00409 VALHALLA_META_GRP_MISCELLANEOUS,
00410
00414 VALHALLA_META_GRP_MUSICAL,
00415
00420 VALHALLA_META_GRP_ORGANIZATIONAL,
00421
00425 VALHALLA_META_GRP_PERSONAL,
00426
00430 VALHALLA_META_GRP_SPACIAL,
00431
00435 VALHALLA_META_GRP_TECHNICAL,
00436
00441 VALHALLA_META_GRP_TEMPORAL,
00442
00446 VALHALLA_META_GRP_TITLES,
00447
00448 } valhalla_meta_grp_t;
00449
00455
00456 #define VALHALLA_METADATA_CATEGORY "category"
00457 #define VALHALLA_METADATA_EPISODE "episode"
00458 #define VALHALLA_METADATA_GENRE "genre"
00459 #define VALHALLA_METADATA_MPAA "mpaa"
00460 #define VALHALLA_METADATA_RUNTIME "runtime"
00461 #define VALHALLA_METADATA_SEASON "season"
00462 #define VALHALLA_METADATA_SYNOPSIS "synopsis"
00463 #define VALHALLA_METADATA_SYNOPSIS_SHOW "synopsis_show"
00464
00465
00466 #define VALHALLA_METADATA_BUDGET "budget"
00467 #define VALHALLA_METADATA_COUNTRY "country"
00468 #define VALHALLA_METADATA_REVENUE "revenue"
00469 #define VALHALLA_METADATA_STUDIO "studio"
00470
00471
00472 #define VALHALLA_METADATA_ACTOR "actor"
00473 #define VALHALLA_METADATA_ARTIST "artist"
00474 #define VALHALLA_METADATA_AUTHOR "author"
00475 #define VALHALLA_METADATA_CASTING "casting"
00476 #define VALHALLA_METADATA_COMPOSER "composer"
00477 #define VALHALLA_METADATA_CREDITS "credits"
00478 #define VALHALLA_METADATA_DIRECTOR "director"
00479 #define VALHALLA_METADATA_DIRECTOR_PHOTO "director_photo"
00480 #define VALHALLA_METADATA_EDITOR "editor"
00481 #define VALHALLA_METADATA_PRODUCER "producer"
00482
00483
00484 #define VALHALLA_METADATA_COVER "cover"
00485 #define VALHALLA_METADATA_COVER_SEASON "cover_season"
00486 #define VALHALLA_METADATA_COVER_SHOW "cover_show"
00487 #define VALHALLA_METADATA_COVER_SHOW_HEADER "cover_show_header"
00488 #define VALHALLA_METADATA_FAN_ART "fanart"
00489 #define VALHALLA_METADATA_LYRICS "lyrics"
00490 #define VALHALLA_METADATA_THUMBNAIL "thumbnail"
00491
00492
00493 #define VALHALLA_METADATA_TRACK "track"
00494
00495
00496 #define VALHALLA_METADATA_PLAY_COUNT "playcount"
00497 #define VALHALLA_METADATA_RATING "rating"
00498 #define VALHALLA_METADATA_WATCHED "watched"
00499
00500
00501 #define VALHALLA_METADATA_AUDIO_BITRATE "audio_bitrate"
00502 #define VALHALLA_METADATA_AUDIO_CHANNELS "audio_channels"
00503 #define VALHALLA_METADATA_AUDIO_CODEC "audio_codec"
00504 #define VALHALLA_METADATA_AUDIO_LANG "audio_lang"
00505 #define VALHALLA_METADATA_AUDIO_STREAMS "audio_streams"
00506 #define VALHALLA_METADATA_DURATION "duration"
00507 #define VALHALLA_METADATA_HEIGHT "height"
00508 #define VALHALLA_METADATA_PICTURE_ORIENTATION "picture_orientation"
00509 #define VALHALLA_METADATA_SUB_LANG "sub_lang"
00510 #define VALHALLA_METADATA_SUB_STREAMS "sub_streams"
00511 #define VALHALLA_METADATA_VIDEO_ASPECT "video_aspect"
00512 #define VALHALLA_METADATA_VIDEO_BITRATE "video_bitrate"
00513 #define VALHALLA_METADATA_VIDEO_CODEC "video_codec"
00514 #define VALHALLA_METADATA_VIDEO_STREAMS "video_streams"
00515 #define VALHALLA_METADATA_WIDTH "width"
00516
00517
00518 #define VALHALLA_METADATA_DATE "date"
00519 #define VALHALLA_METADATA_PREMIERED "premiered"
00520 #define VALHALLA_METADATA_YEAR "year"
00521
00522
00523 #define VALHALLA_METADATA_ALBUM "album"
00524 #define VALHALLA_METADATA_TITLE "title"
00525 #define VALHALLA_METADATA_TITLE_ALTERNATIVE "title_alternative"
00526 #define VALHALLA_METADATA_TITLE_SHOW "title_show"
00527
00532 typedef enum valhalla_db_type {
00533 VALHALLA_DB_TYPE_ID,
00534 VALHALLA_DB_TYPE_TEXT,
00535 VALHALLA_DB_TYPE_GROUP,
00536 } valhalla_db_type_t;
00537
00538 typedef enum valhalla_db_operator {
00539 VALHALLA_DB_OPERATOR_IN,
00540 VALHALLA_DB_OPERATOR_NOTIN,
00541 VALHALLA_DB_OPERATOR_EQUAL,
00542 } valhalla_db_operator_t;
00543
00545 typedef struct valhalla_db_item_s {
00546 valhalla_db_type_t type;
00547 int64_t id;
00548 const char *text;
00549 valhalla_meta_grp_t group;
00550 } valhalla_db_item_t;
00551
00553 typedef struct valhalla_db_metares_s {
00554 int64_t meta_id, data_id;
00555 const char *meta_name, *data_value;
00556 valhalla_meta_grp_t group;
00557 int external;
00558 } valhalla_db_metares_t;
00559
00561 typedef struct valhalla_db_fileres_s {
00562 int64_t id;
00563 const char *path;
00564 valhalla_file_type_t type;
00565 } valhalla_db_fileres_t;
00566
00568 typedef struct valhalla_db_restrict_s {
00569 struct valhalla_db_restrict_s *next;
00570 valhalla_db_operator_t op;
00571 valhalla_db_item_t meta;
00572 valhalla_db_item_t data;
00573 } valhalla_db_restrict_t;
00574
00576 typedef struct valhalla_db_filemeta_s {
00577 struct valhalla_db_filemeta_s *next;
00578 int64_t meta_id;
00579 int64_t data_id;
00580 char *meta_name;
00581 char *data_value;
00582 valhalla_meta_grp_t group;
00583 int external;
00584 } valhalla_db_filemeta_t;
00585
00586 #define VALHALLA_DB_SEARCH(_id, _text, _group, _type) \
00587 {.type = VALHALLA_DB_TYPE_##_type, \
00588 .id = _id, .text = _text, .group = VALHALLA_META_GRP_##_group}
00589
00590 #define VALHALLA_DB_RESTRICT(_op, _m_id, _d_id, \
00591 _m_text, _d_text, _m_type, _d_type) \
00592 {.next = NULL, .op = VALHALLA_DB_OPERATOR_##_op, \
00593 .meta = VALHALLA_DB_SEARCH (_m_id, _m_text, NIL, _m_type), \
00594 .data = VALHALLA_DB_SEARCH (_d_id, _d_text, NIL, _d_type)}
00595
00596
00603 #define VALHALLA_DB_SEARCH_ID(meta_id, group) \
00604 VALHALLA_DB_SEARCH (meta_id, NULL, group, ID)
00605
00606 #define VALHALLA_DB_SEARCH_TEXT(meta_name, group) \
00607 VALHALLA_DB_SEARCH (0, meta_name, group, TEXT)
00608
00609 #define VALHALLA_DB_SEARCH_GRP(group) \
00610 VALHALLA_DB_SEARCH (0, NULL, group, GROUP)
00611
00613 #define VALHALLA_DB_RESTRICT_INT(op, meta, data) \
00614 VALHALLA_DB_RESTRICT (op, meta, data, NULL, NULL, ID, ID)
00615
00616 #define VALHALLA_DB_RESTRICT_STR(op, meta, data) \
00617 VALHALLA_DB_RESTRICT (op, 0, 0, meta, data, TEXT, TEXT)
00618
00619 #define VALHALLA_DB_RESTRICT_INTSTR(op, meta, data) \
00620 VALHALLA_DB_RESTRICT (op, meta, 0, NULL, data, ID, TEXT)
00621
00622 #define VALHALLA_DB_RESTRICT_STRINT(op, meta, data) \
00623 VALHALLA_DB_RESTRICT (op, 0, data, meta, NULL, TEXT, ID)
00624
00625 #define VALHALLA_DB_RESTRICT_LINK(from, to) \
00626 do {(to).next = &(from);} while (0)
00627
00629 #define VALHALLA_DB_FILEMETA_FREE(meta) \
00630 do { \
00631 typeof (meta) tmp; \
00632 while (meta) { \
00633 if ((meta)->meta_name) free ((meta)->meta_name); \
00634 if ((meta)->data_value) free ((meta)->data_value); \
00635 tmp = (meta)->next; free (meta); meta = tmp;} \
00636 } while (0)
00637
00663 int valhalla_db_metalist_get (valhalla_t *handle,
00664 valhalla_db_item_t *search,
00665 valhalla_db_restrict_t *restriction,
00666 int (*result_cb) (void *data,
00667 valhalla_db_metares_t *res),
00668 void *data);
00669
00690 int valhalla_db_filelist_get (valhalla_t *handle,
00691 valhalla_file_type_t filetype,
00692 valhalla_db_restrict_t *restriction,
00693 int (*result_cb) (void *data,
00694 valhalla_db_fileres_t *res),
00695 void *data);
00696
00722 int valhalla_db_file_get (valhalla_t *handle,
00723 int64_t id, const char *path,
00724 valhalla_db_restrict_t *restriction,
00725 valhalla_db_filemeta_t **res);
00726
00795 int valhalla_db_metadata_insert (valhalla_t *handle, const char *path,
00796 const char *meta, const char *data,
00797 valhalla_meta_grp_t group);
00798
00814 int valhalla_db_metadata_update (valhalla_t *handle, const char *path,
00815 const char *meta, const char *data,
00816 const char *ndata);
00817
00832 int valhalla_db_metadata_delete (valhalla_t *handle, const char *path,
00833 const char *meta, const char *data);
00834
00839 #ifdef __cplusplus
00840 }
00841 #endif
00842
00843 #endif