marrakesh/mrklib.h

146 lines
6.6 KiB
C

#ifndef MRKLIB_H
#define MRKLIB_H
#include <Eina.h>
EAPI Eina_Bool mrk_init(void);
EAPI void mrk_shutdown(void);
EAPI const char *mrk_arch_get(void);
EAPI const char *mrk_os_get(void);
// yes - this should become an eo object - later. right now... cleaning up
// the mess that was putting the pipeline together
// mrk client api - for clients that conne3ct to an mrk server to upload,
// download, query etc. etc. the server - so the "main" set of api for a
// client-server api. in future protocol should be extendable in api
// below with sending extended requests and handling return data
typedef struct _Mrk Mrk;
EAPI Mrk *mrk_connect(const char *host, int port);
EAPI void mrk_disconnect(Mrk *server);
EAPI Eina_Bool mrk_upload(Mrk *server, const char *file);
EAPI Eina_Bool mrk_download(Mrk *server, const char *package);
EAPI Eina_Bool mrk_download_source(Mrk *server, const char *package);
EAPI Eina_Bool mrk_list(Mrk *server, const char *category);
EAPI Eina_Bool mrk_search(Mrk *server, const char *keys);
EAPI void mrk_callback_connect_set(Mrk *server,
void (*connect) (void *data, Mrk *server),
void *connect_data,
void (*disconnect) (void *data, Mrk *server),
void *disconnect_data);
EAPI void mrk_callback_upload_set(Mrk *server,
void (*upload_begin) (void *data, Mrk *server),
void *upload_begin_data,
void (*upload_progress) (void *data, Mrk *server, double pos),
void *upload_progress_data,
void (*upload_end) (void *data, Mrk *server),
void *upload_end_data,
void (*upload_success) (void *data, Mrk *server, Eina_Bool sucess),
void *upload_success_data);
EAPI void mrk_callback_download_set(Mrk *server,
void (*download_begin) (void *data, Mrk *server),
void *download_begin_data,
void (*download_progress) (void *data, Mrk *server, double pos),
void *download_progress_data,
void (*download_end) (void *data, Mrk *server),
void *download_end_data,
void (*download_success) (void *data, Mrk *server, const char *file),
void *download_success_data);
EAPI void mrk_callback_answer_set(Mrk *server,
void (*answer_begin) (void *data, Mrk *server),
void *answer_begin_data,
void (*answer_progress) (void *data, Mrk *server, const char *result),
void *answer_progress_data,
void (*answer_end) (void *data, Mrk *server),
void *answer_end_data);
// api to run a mrk server - right now you have very little choice here
// as everything is just magically handled internally - in future some way
// to access the repodb that a serve loads (and auto-updates) as well as
// get callbacks when things happen and also to extend protocol
typedef struct _Mrk_Serve Mrk_Serve;
EAPI Mrk_Serve *mrk_serve(const char *listen, int port, const char *repodir, const char *bldsh);
EAPI void mrk_unserve(Mrk_Serve *server);
// this is the api to deal with a repository database of files and to
// request and update of them, auto-reload when update done and tell you
// when it's done
typedef struct _Mrk_Repodb Mrk_Repodb;
EAPI Mrk_Repodb *mrk_repodb_load(const char *repodir);
EAPI void mrk_repodb_free(Mrk_Repodb *rdb);
EAPI void mrk_repodb_callback_update_set(Mrk_Repodb *rdb,
void (*update) (void *data, Mrk_Repodb *rdb),
void *update_data);
EAPI void mrk_repodb_update(Mrk_Repodb *rdb);
EAPI const Eina_List *mrk_repodb_category_list(Mrk_Repodb *rdb,
const char *arch,
const char *category);
EAPI Eina_List *mrk_repodb_search(Mrk_Repodb *rdb,
const char *arch,
const char *search);
// this iapi si very simple - it scans the dir of mrk binary packages and
// updates the database files inside
EAPI Eina_Bool mrk_index(const char *dir);
typedef struct _Mrk_Build Mrk_Build;
typedef struct _Mrk_Build_Bin Mrk_Build_Bin;
typedef struct _Mrk_Build_Data Mrk_Build_Data;
struct _Mrk_Build_Bin
{
const char *bin;
Eina_List *srcs;
Eina_List *deps;
Eina_List *incs;
};
struct _Mrk_Build_Data
{
const char *src;
const char *dest;
};
struct _Mrk_Build
{
const char *name;
const char *icon;
const char *splash;
const char *brief;
const char *version;
const char *license;
const char *domain;
const char *repo;
const char *devrepo;
const char *contact;
Eina_List *tags;
Eina_List *categories;
Eina_List *copying;
const char *needs;
Eina_List *bins;
Eina_List *data;
Eina_List *desktops;
Eina_List *icons;
Eina_List *po;
};
EAPI Mrk_Build *mrk_build_load(const char *file);
EAPI void mrk_build_free(Mrk_Build *bld);
EAPI Eina_Bool mrk_build_do(Mrk_Build *bld, const char *tmpd, const char *objd);
EAPI Eina_Bool mrk_build_package_bin(Mrk_Build *bld, const char *file, const char *tmpd, const char *os, const char *arch, const char *key_cert_file, const char *key_priv_file);
EAPI Eina_Bool mrk_build_package_src(Mrk_Build *bld, const char *buildfile, const char *file, const char *key_cert_file, const char *key_priv_file);
EAPI Eina_Bool mrk_package_src_extract(const char *file, const char *dst);
EAPI Eina_Bool mrk_package_bin_clean(void);
EAPI Eina_Bool mrk_package_verify(const char *file, const char *key_cert_file);
EAPI Eina_Bool mrk_package_bin_install(const char *file, const char *os, const char *arch);
EAPI Eina_Bool mrk_package_bin_remove(const char *name);
// XXX: .mrk parsing api handled/exposed and other related functions
// XXX: installation/uninstallation handling apis
// XXX: cleanup apis
#endif