diff options
Diffstat (limited to 'src/db.rs')
-rw-r--r-- | src/db.rs | 22 |
1 files changed, 14 insertions, 8 deletions
@@ -82,23 +82,29 @@ pub fn mods_get_id(data: &str, slug: &str) -> MLE<String> { | |||
82 | Ok(mod_id) | 82 | Ok(mod_id) |
83 | } | 83 | } |
84 | 84 | ||
85 | pub fn mods_get_title(config: Cfg, id: &str) -> MLE<String> { | 85 | pub struct ModInfo { |
86 | pub slug: String, | ||
87 | pub title: String, | ||
88 | } | ||
89 | |||
90 | pub fn mods_get_info(config: Cfg, id: &str) -> MLE<ModInfo> { | ||
86 | let data = devdir(format!("{}/data.db", config.data).as_str()); | 91 | let data = devdir(format!("{}/data.db", config.data).as_str()); |
87 | let connection = Connection::open(data)?; | 92 | let connection = Connection::open(data)?; |
88 | 93 | ||
89 | let mut mod_name = String::new(); | 94 | let mut mod_info: Option<ModInfo> = None; |
90 | let mut stmt = connection.prepare("SELECT title FROM mods WHERE id = ?")?; | 95 | let mut stmt = connection.prepare("SELECT title, slug FROM mods WHERE id = ?")?; |
91 | let name_iter = stmt.query_map([id], |row| { | 96 | let name_iter = stmt.query_map([id], |row| { |
92 | row.get::<usize, String>(0) | 97 | Ok(vec![row.get::<usize, String>(0)?, row.get::<usize, String>(1)?]) |
93 | })?; | 98 | })?; |
94 | 99 | ||
95 | for name in name_iter { | 100 | for info in name_iter { |
96 | mod_name = name?; | 101 | let i = info?; |
102 | mod_info = Some(ModInfo { title: String::from(&i[0]), slug: String::from(&i[1]) }); | ||
97 | }; | 103 | }; |
98 | 104 | ||
99 | match mod_name.is_empty() { | 105 | match mod_info.is_none() { |
100 | true => Err(MLError::new(ErrorType::DBError, "GN_MOD_NOT_FOUND")), | 106 | true => Err(MLError::new(ErrorType::DBError, "GN_MOD_NOT_FOUND")), |
101 | false => Ok(mod_name), | 107 | false => Ok(mod_info.unwrap()), |
102 | } | 108 | } |
103 | } | 109 | } |
104 | 110 | ||