From 38d0dfb98b7e5e6a47901c188a5686bed09246f2 Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Tue, 24 Jan 2023 20:19:34 +0100 Subject: [PATCH] URI: Add the query+link uri --- inc/lektor/uri.h | 21 ++++++++++--------- src/base/uri.c | 10 ++++++++- src/database/queue.c | 1 + .../lektor_c_compat/src/c_types.rs | 1 + .../lektor_c_compat/src/rs_types/uri.rs | 12 +++++++---- .../liblektor-rs/lektor_db/src/connexion.rs | 2 +- 6 files changed, 31 insertions(+), 16 deletions(-) diff --git a/inc/lektor/uri.h b/inc/lektor/uri.h index 7a48fe7d..e231bbaf 100644 --- a/inc/lektor/uri.h +++ b/inc/lektor/uri.h @@ -9,19 +9,20 @@ extern "C" { #include <stddef.h> typedef enum { - URI_NULL = 0, - URI_ID = 1, - URI_PLAYLIST = 2, - URI_TYPE = 3, - URI_AUTHOR = 4, - URI_CATEGORY = 5, - URI_LANGUAGE = 6, - URI_QUERY = 7, + URI_NULL = 0, + URI_ID = 1, + URI_PLAYLIST = 2, + URI_TYPE = 3, + URI_AUTHOR = 4, + URI_CATEGORY = 5, + URI_LANGUAGE = 6, + URI_QUERY = 7, + URI_QUERY_PLUS_LINK = 8, } LKT_URI_TYPE; typedef enum { - URI_VALUE_TYPE_NULL = 0, - URI_VALUE_TYPE_STRING = 1, + URI_VALUE_TYPE_NULL = 0, + URI_VALUE_TYPE_STRING = 1, URI_VALUE_TYPE_INTEGER = 2, } LKT_URI_VALUE_TYPE; diff --git a/src/base/uri.c b/src/base/uri.c index fbe544a6..cc2239cf 100644 --- a/src/base/uri.c +++ b/src/base/uri.c @@ -134,6 +134,10 @@ __prefix(char *str, struct lkt_uri *ret) ret->column_name = LKT_DB_LANG; ret->type = URI_LANGUAGE; val = str + 4; + } else if (STR_NMATCH(str, "query+link", 11)) { + ret->column_name = LKT_DB_ALL; + ret->type = URI_QUERY_PLUS_LINK; + val = str + 11; } else if (STR_NMATCH(str, "query", 5)) { ret->column_name = LKT_DB_ALL; ret->type = URI_QUERY; @@ -296,6 +300,8 @@ __lkt_to_str(const struct lkt_uri *uri, char *ret, size_t len) case URI_TYPE: safe_snprintf(ret, len, "type=%s", (char *)uri->value); break; case URI_AUTHOR: safe_snprintf(ret, len, "author=%s", (char *)uri->value); break; case URI_CATEGORY: safe_snprintf(ret, len, "cat=%s", (char *)uri->value); break; + + case URI_QUERY_PLUS_LINK: case URI_QUERY: safe_snprintf(ret, len, "search=%s", (char *)uri->value); break; case URI_PLAYLIST: ___plt_uri_to_str(uri, ret, len); return false; @@ -356,11 +362,13 @@ lkt_uri_match_kara_metadata(const struct lkt_uri *uri, const struct kara_metadat } case URI_TYPE: return STR_MATCH((const char *)uri->value, kara_mdt->song_type); - case URI_QUERY: return database_is_kara_like(db, kara_id, uri->value); case URI_AUTHOR: return STR_MATCH((const char *)uri->value, kara_mdt->author_name); case URI_CATEGORY: return STR_MATCH((const char *)uri->value, kara_mdt->category); case URI_PLAYLIST: return database_plt_contais_kara(db, uri->value, kara_id); case URI_LANGUAGE: return STR_MATCH((const char *)uri->value, kara_mdt->language); + + case URI_QUERY_PLUS_LINK: + case URI_QUERY: return database_is_kara_like(db, kara_id, uri->value); } LOG_ERROR("URI", "Found an unusual uri type: %d", uri->type); LOG_UNREACHABLE; diff --git a/src/database/queue.c b/src/database/queue.c index 9f3f56d1..25202e8c 100644 --- a/src/database/queue.c +++ b/src/database/queue.c @@ -326,6 +326,7 @@ database_queue_add_uri(lkt_db *db, struct lkt_uri *uri, int prio) const LKT_URI_TYPE type = lkt_uri_get_type(uri); switch (type) { + case URI_QUERY_PLUS_LINK: case URI_QUERY: return queue_add_with_col_like_str(db, LKT_DB_ALL, lkt_uri_get_value_as_str(uri), prio); diff --git a/src/rust/liblektor-rs/lektor_c_compat/src/c_types.rs b/src/rust/liblektor-rs/lektor_c_compat/src/c_types.rs index 1aac3ddf..228b7f5b 100644 --- a/src/rust/liblektor-rs/lektor_c_compat/src/c_types.rs +++ b/src/rust/liblektor-rs/lektor_c_compat/src/c_types.rs @@ -23,6 +23,7 @@ pub enum LktUriType { Category = 5, Lanquage = 6, Query = 7, + QueryPlusLink = 8, } #[repr(C)] diff --git a/src/rust/liblektor-rs/lektor_c_compat/src/rs_types/uri.rs b/src/rust/liblektor-rs/lektor_c_compat/src/rs_types/uri.rs index 9c77af5f..dbccc482 100644 --- a/src/rust/liblektor-rs/lektor_c_compat/src/rs_types/uri.rs +++ b/src/rust/liblektor-rs/lektor_c_compat/src/rs_types/uri.rs @@ -22,10 +22,13 @@ pub enum LktUriField { /// The language of the kara must match the value in the URI. Language, - /// Do a fuzzy search with the value if the URI. This is the default action - /// for an URI. + /// Do a fuzzy search with the value if the URI. We also look up the links + /// of the kara. FuzzySearch, + /// Do a search with the value if the URI. This is the default action for an URI. + Search, + /// Do a search by the name of the playlist. Playlist, } @@ -39,7 +42,7 @@ pub enum LktUriValue<'a> { impl Default for LktUriField { fn default() -> Self { - LktUriField::FuzzySearch + LktUriField::Search } } @@ -60,7 +63,8 @@ impl LktCUri { LktUriType::Author => Some(KaraMaker), LktUriType::Category => Some(Origin), LktUriType::Lanquage => Some(Language), - LktUriType::Query => Some(FuzzySearch), + LktUriType::Query => Some(Search), + LktUriType::QueryPlusLink => Some(FuzzySearch), } } diff --git a/src/rust/liblektor-rs/lektor_db/src/connexion.rs b/src/rust/liblektor-rs/lektor_db/src/connexion.rs index bebc0286..eb4da471 100644 --- a/src/rust/liblektor-rs/lektor_db/src/connexion.rs +++ b/src/rust/liblektor-rs/lektor_db/src/connexion.rs @@ -319,7 +319,7 @@ impl LktDatabaseConnection { .map_err(|err| format!("{err}"))? )), - LktUriField::FuzzySearch => { + LktUriField::Search | LktUriField::FuzzySearch => { let _ = uri_str!("query" :/ uri); todo!() } -- GitLab