• Main Page
  • Related Pages
  • Data Structures
  • Files
  • File List
  • Globals

valhalla.h

Go to the documentation of this file.
00001 /*
00002  * GeeXboX Valhalla: tiny media scanner API.
00003  * Copyright (C) 2009 Mathieu Schroeter <mathieu.schroeter@gamesover.ch>
00004  *
00005  * This file is part of libvalhalla.
00006  *
00007  * libvalhalla is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU Lesser General Public
00009  * License as published by the Free Software Foundation; either
00010  * version 2.1 of the License, or (at your option) any later version.
00011  *
00012  * libvalhalla is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015  * Lesser General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU Lesser General Public
00018  * License along with libvalhalla; if not, write to the Free Software
00019  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
00020  */
00021 
00022 #ifndef VALHALLA_H
00023 #define VALHALLA_H
00024 
00031 #ifdef __cplusplus
00032 extern "C" {
00033 #endif /* __cplusplus */
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 /* Valhalla Handling                                                          */
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 /* Database Selections                                                        */
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 /* Classification */
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 /* Commercial */
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 /* Entities */
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 /* Miscellaneous */
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 /* Organizational */
00493 #define VALHALLA_METADATA_TRACK                      "track"
00494 
00495 /* Personal */
00496 #define VALHALLA_METADATA_PLAY_COUNT                 "playcount"
00497 #define VALHALLA_METADATA_RATING                     "rating"
00498 #define VALHALLA_METADATA_WATCHED                    "watched"
00499 
00500 /* Technical */
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 /* Temporal */
00518 #define VALHALLA_METADATA_DATE                       "date"
00519 #define VALHALLA_METADATA_PREMIERED                  "premiered"
00520 #define VALHALLA_METADATA_YEAR                       "year"
00521 
00522 /* Titles */
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 /* __cplusplus */
00842 
00843 #endif /* VALHALLA_H */

Generated on Sat Sep 4 2010 09:33:20 for libvalhalla by  doxygen 1.7.1