Skip to content
This repository has been archived by the owner on Jul 4, 2023. It is now read-only.

Commit

Permalink
add provider db (#416)
Browse files Browse the repository at this point in the history
  • Loading branch information
Simon-Laux committed Feb 2, 2020
1 parent 1c341f4 commit 15fb813
Show file tree
Hide file tree
Showing 6 changed files with 107 additions and 0 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Expand Up @@ -2,6 +2,9 @@

## [Unreleased][unreleased]

### Added
- Add provider db

## [1.0.0-beta.23.1] - 2019-01-29

### Changed
Expand Down
5 changes: 5 additions & 0 deletions index.d.ts
Expand Up @@ -146,5 +146,10 @@ export class DeltaChat {
getContacts(listFlags: number, queryStr: string): Array<Contact>;
initiateKeyTransfer(cb: any): boolean;
continueKeyTransfer(messageId: number, setupCode: string, cb: any): boolean;
getProviderFromEmail (email: string): {
before_login_hint: string,
overview_page: string,
status: number,
};
static getSystemInfo(): string;
}
12 changes: 12 additions & 0 deletions lib/deltachat.js
Expand Up @@ -463,6 +463,18 @@ class DeltaChat extends EventEmitter {
)
}

getProviderFromEmail (email) {
const provider = binding.dcn_provider_new_from_email(this.dcn_context, email)
if (!provider) {
return undefined
}
return {
before_login_hint: binding.dcn_provider_get_before_login_hint(provider),
overview_page: binding.dcn_provider_get_overview_page(provider),
status: binding.dcn_provider_get_status(provider)
}
}

getSecurejoinQrCode (chatId) {
debug(`getSecurejoinQrCode ${chatId}`)
return binding.dcn_get_securejoin_qr(this.dcn_context, Number(chatId))
Expand Down
69 changes: 69 additions & 0 deletions src/module.c
Expand Up @@ -267,6 +267,14 @@ static void finalize_msg(napi_env env, void* data, void* hint) {
}
}

static void finalize_provider(napi_env env, void* data, void* hint) {
if (data) {
dc_provider_t* provider = (dc_provider_t*)data;
//TRACE("cleaning up provider");
dc_provider_unref(provider);
}
}

/**
* Helpers.
*/
Expand Down Expand Up @@ -2620,6 +2628,59 @@ NAPI_METHOD(dcn_perform_imap_jobs) {
NAPI_RETURN_UNDEFINED();
}

NAPI_METHOD(dcn_provider_new_from_email) {
NAPI_ARGV(2);
NAPI_DCN_CONTEXT();
NAPI_ARGV_UTF8_MALLOC(email, 1)

//TRACE("calling..");
napi_value result;
dc_provider_t* provider = dc_provider_new_from_email(dcn_context->dc_context, email);

if (provider == NULL) {
NAPI_STATUS_THROWS(napi_get_null(env, &result));
} else {
NAPI_STATUS_THROWS(napi_create_external(env, provider, finalize_provider,
NULL, &result));
}
//TRACE("done");

return result;
}

NAPI_METHOD(dcn_provider_get_overview_page) {
NAPI_ARGV(1);
NAPI_DC_PROVIDER();

//TRACE("calling..");
char* overview_page = dc_provider_get_overview_page(dc_provider);
//TRACE("result %s", overview_page);

NAPI_RETURN_AND_UNREF_STRING(overview_page);
}

NAPI_METHOD(dcn_provider_get_before_login_hint) {
NAPI_ARGV(1);
NAPI_DC_PROVIDER();

//TRACE("calling..");
char* before_login_hint = dc_provider_get_overview_page(dc_provider);
//TRACE("result %s", before_login_hint);

NAPI_RETURN_AND_UNREF_STRING(before_login_hint);
}

NAPI_METHOD(dcn_provider_get_status) {
NAPI_ARGV(1);
NAPI_DC_PROVIDER();

//TRACE("calling..");
int status = dc_provider_get_status(dc_provider);
//TRACE("result %s", status);

NAPI_RETURN_INT32(status)
}

NAPI_INIT() {
/**
* Main context
Expand Down Expand Up @@ -2805,6 +2866,14 @@ NAPI_INIT() {
NAPI_EXPORT_FUNCTION(dcn_set_location);
NAPI_EXPORT_FUNCTION(dcn_get_locations);

/**
* dc_provider
*/
NAPI_EXPORT_FUNCTION(dcn_provider_new_from_email);
NAPI_EXPORT_FUNCTION(dcn_provider_get_overview_page);
NAPI_EXPORT_FUNCTION(dcn_provider_get_before_login_hint);
NAPI_EXPORT_FUNCTION(dcn_provider_get_status);

/**
* dc_array
*/
Expand Down
4 changes: 4 additions & 0 deletions src/napi-macros-extensions.h
Expand Up @@ -31,6 +31,10 @@
dc_msg_t* dc_msg; \
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], (void**)&dc_msg));

#define NAPI_DC_PROVIDER() \
dc_provider_t* dc_provider; \
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], (void**)&dc_provider));

#define NAPI_DC_ARRAY() \
dc_array_t* dc_array; \
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], (void**)&dc_array));
Expand Down
14 changes: 14 additions & 0 deletions test/index.js
Expand Up @@ -437,3 +437,17 @@ function dc (fn) {
})
}
}

test('dc.getProviderFromEmail("example@example.com")', t => {
const dc = new DeltaChat()
const provider = dc.getProviderFromEmail('example@example.com')

t.same(provider, {
before_login_hint: 'https://providers.delta.chat/example-com',
overview_page: 'https://providers.delta.chat/example-com',
status: 3
})

dc.close()
t.end()
})

0 comments on commit 15fb813

Please sign in to comment.