From 23030400fdeb39d21677b837e58609015f499d59 Mon Sep 17 00:00:00 2001 From: Trumeet Date: Fri, 1 Apr 2022 23:00:18 -0700 Subject: Search support --- query.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/query.c b/query.c index fe30ade..2af01bf 100644 --- a/query.c +++ b/query.c @@ -36,9 +36,11 @@ int handle_inline(struct TdUpdateNewInlineQuery *update) { memset(results, 0, sizeof(results)); sqlite3_stmt *stmt; int r; + const bool query = update->query_; bool sys = false; if ((r = sqlite3_prepare_v2(db, - "SELECT id, t, url FROM says ORDER BY RANDOM() LIMIT 10;", + query ? "SELECT id, t, url FROM says WHERE t LIKE ? LIMIT 10;" + :"SELECT id, t, url FROM says ORDER BY RANDOM() LIMIT 10;", -1, &stmt, NULL))) { @@ -54,6 +56,22 @@ int handle_inline(struct TdUpdateNewInlineQuery *update) { goto answer; } + char *query_str = NULL; + if (query) { + const size_t raw_query_len = strlen(update->query_); + if (!(query_str = calloc(raw_query_len + 3, sizeof(char)))) { + r = errno; + LOGEV("Cannot allocate memory: %s.", strerror(r)); + sqlite3_finalize(stmt); + return r; + } + sprintf(query_str, "%%%s%%", update->query_); + if ((r = sqlite3_bind_text(stmt, 1, query_str, ((int) raw_query_len + 3), NULL))) { + free(query_str); + goto sql_err; + } + } + int j = 0; goto step; step: @@ -94,13 +112,14 @@ int handle_inline(struct TdUpdateNewInlineQuery *update) { } } + if (query_str) free(query_str); sqlite3_finalize(stmt); if (!j) { results[0].title = "No data"; - results[0].description = "No data is available. Check it out later."; + results[0].description = "No data is available."; sprintf(results[0].id, "e_nodat"); - results[0].text = "No data is available. Check it out later.\n\n" + results[0].text = "No data is available. Adjust your search terms or check it out later.\n\n" "https://www.youtube.com/watch?v=dQw4w9WgXcQ"; sys = true; } -- cgit v1.2.3