summaryrefslogtreecommitdiff
path: root/src/db.rs
diff options
context:
space:
mode:
authorfx <[email protected]>2023-04-27 10:10:03 +0200
committerfx <[email protected]>2023-04-27 10:10:03 +0200
commit43ca5fec20933fc31dfe7d7dbd1f1b9258612219 (patch)
treeeef58fecfadad90386b38af581abab8cc3d3cfc0 /src/db.rs
parent4300ad2eb05dddfa4274e04b204f2ad28c87da05 (diff)
parent4e6466af1329f7b9e341df2e76ab696d11f80c93 (diff)
downloadmodlist-43ca5fec20933fc31dfe7d7dbd1f1b9258612219.tar
modlist-43ca5fec20933fc31dfe7d7dbd1f1b9258612219.tar.gz
modlist-43ca5fec20933fc31dfe7d7dbd1f1b9258612219.zip
Merge pull request 'cache' (#3) from cache into master
Reviewed-on: http://raspberrypi.fritz.box:7920/fx/modlist/pulls/3
Diffstat (limited to 'src/db.rs')
-rw-r--r--src/db.rs70
1 files changed, 33 insertions, 37 deletions
diff --git a/src/db.rs b/src/db.rs
index 09d54c2..abfe1dd 100644
--- a/src/db.rs
+++ b/src/db.rs
@@ -4,14 +4,13 @@ use rusqlite::Connection;
4 4
5use crate::{ 5use crate::{
6 config::Cfg, 6 config::Cfg,
7 devdir,
8 error::{ErrorType, MLError, MLE}, 7 error::{ErrorType, MLError, MLE},
9 List, Modloader, 8 List, Modloader,
10}; 9};
11 10
12//MODS 11//MODS
13pub fn mods_insert(config: Cfg, id: &str, slug: &str, name: &str) -> MLE<()> { 12pub fn mods_insert(config: Cfg, id: &str, slug: &str, name: &str) -> MLE<()> {
14 let data = devdir(format!("{}/data.db", config.data).as_str()); 13 let data = format!("{}/data.db", config.data);
15 let connection = Connection::open(data)?; 14 let connection = Connection::open(data)?;
16 15
17 connection.execute( 16 connection.execute(
@@ -23,7 +22,7 @@ pub fn mods_insert(config: Cfg, id: &str, slug: &str, name: &str) -> MLE<()> {
23} 22}
24 23
25pub fn mods_get_all_ids(config: Cfg) -> Result<Vec<String>, Box<dyn std::error::Error>> { 24pub fn mods_get_all_ids(config: Cfg) -> Result<Vec<String>, Box<dyn std::error::Error>> {
26 let data = devdir(format!("{}/data.db", config.data).as_str()); 25 let data = format!("{}/data.db", config.data);
27 let connection = Connection::open(data).unwrap(); 26 let connection = Connection::open(data).unwrap();
28 27
29 let mut mods: Vec<String> = Vec::new(); 28 let mut mods: Vec<String> = Vec::new();
@@ -53,7 +52,7 @@ pub fn mods_get_all_ids(config: Cfg) -> Result<Vec<String>, Box<dyn std::error::
53pub fn mods_get_id(data: &str, slug: &str) -> MLE<String> { 52pub fn mods_get_id(data: &str, slug: &str) -> MLE<String> {
54 //TODO check if "slug" is id 53 //TODO check if "slug" is id
55 54
56 let data = devdir(format!("{}/data.db", data).as_str()); 55 let data = format!("{}/data.db", data);
57 let connection = Connection::open(data)?; 56 let connection = Connection::open(data)?;
58 57
59 let mut mod_id = String::new(); 58 let mut mod_id = String::new();
@@ -88,7 +87,7 @@ pub struct ModInfo {
88} 87}
89 88
90pub fn mods_get_info(config: Cfg, id: &str) -> MLE<ModInfo> { 89pub fn mods_get_info(config: Cfg, id: &str) -> MLE<ModInfo> {
91 let data = devdir(format!("{}/data.db", config.data).as_str()); 90 let data = format!("{}/data.db", config.data);
92 let connection = Connection::open(data)?; 91 let connection = Connection::open(data)?;
93 92
94 let mut mod_info: Option<ModInfo> = None; 93 let mut mod_info: Option<ModInfo> = None;
@@ -117,7 +116,7 @@ pub fn mods_get_info(config: Cfg, id: &str) -> MLE<ModInfo> {
117pub fn mods_remove(config: Cfg, id: String) -> MLE<()> { 116pub fn mods_remove(config: Cfg, id: String) -> MLE<()> {
118 println!("Removing mod {} from database", id); 117 println!("Removing mod {} from database", id);
119 118
120 let data = devdir(format!("{}/data.db", config.data).as_str()); 119 let data = format!("{}/data.db", config.data);
121 let connection = Connection::open(data)?; 120 let connection = Connection::open(data)?;
122 121
123 connection.execute("DELETE FROM mods WHERE id = ?", [id])?; 122 connection.execute("DELETE FROM mods WHERE id = ?", [id])?;
@@ -132,7 +131,7 @@ pub struct DBModlistVersions {
132} 131}
133 132
134pub fn mods_get_versions(config: Cfg, mods: Vec<String>) -> MLE<Vec<DBModlistVersions>> { 133pub fn mods_get_versions(config: Cfg, mods: Vec<String>) -> MLE<Vec<DBModlistVersions>> {
135 let data = devdir(format!("{}/data.db", config.data).as_str()); 134 let data = format!("{}/data.db", config.data);
136 let connection = Connection::open(data)?; 135 let connection = Connection::open(data)?;
137 136
138 if mods.is_empty() { 137 if mods.is_empty() {
@@ -188,7 +187,7 @@ pub fn userlist_insert(
188 current_link: &str, 187 current_link: &str,
189 set_version: bool, 188 set_version: bool,
190) -> MLE<()> { 189) -> MLE<()> {
191 let data = devdir(format!("{}/data.db", config.data).as_str()); 190 let data = format!("{}/data.db", config.data);
192 let connection = Connection::open(data)?; 191 let connection = Connection::open(data)?;
193 192
194 let sv = match set_version { 193 let sv = match set_version {
@@ -215,7 +214,7 @@ pub fn userlist_insert(
215} 214}
216 215
217pub fn userlist_get_all_ids(config: Cfg, list_id: String) -> MLE<Vec<String>> { 216pub fn userlist_get_all_ids(config: Cfg, list_id: String) -> MLE<Vec<String>> {
218 let data = devdir(format!("{}/data.db", config.data).as_str()); 217 let data = format!("{}/data.db", config.data);
219 let connection = Connection::open(data).unwrap(); 218 let connection = Connection::open(data).unwrap();
220 219
221 let mut mod_ids: Vec<String> = Vec::new(); 220 let mut mod_ids: Vec<String> = Vec::new();
@@ -234,7 +233,7 @@ pub fn userlist_get_all_ids(config: Cfg, list_id: String) -> MLE<Vec<String>> {
234} 233}
235 234
236pub fn userlist_remove(config: Cfg, list_id: &str, mod_id: &str) -> MLE<()> { 235pub fn userlist_remove(config: Cfg, list_id: &str, mod_id: &str) -> MLE<()> {
237 let data = devdir(format!("{}/data.db", config.data).as_str()); 236 let data = format!("{}/data.db", config.data);
238 let connection = Connection::open(data)?; 237 let connection = Connection::open(data)?;
239 238
240 connection.execute( 239 connection.execute(
@@ -249,7 +248,7 @@ pub fn userlist_get_applicable_versions(
249 list_id: String, 248 list_id: String,
250 mod_id: String, 249 mod_id: String,
251) -> MLE<String> { 250) -> MLE<String> {
252 let data = devdir(format!("{}/data.db", config.data).as_str()); 251 let data = format!("{}/data.db", config.data);
253 let connection = Connection::open(data).unwrap(); 252 let connection = Connection::open(data).unwrap();
254 253
255 let mut version: String = String::new(); 254 let mut version: String = String::new();
@@ -276,7 +275,7 @@ pub fn userlist_get_all_applicable_versions_with_mods(
276 config: Cfg, 275 config: Cfg,
277 list_id: String, 276 list_id: String,
278) -> MLE<Vec<(String, String)>> { 277) -> MLE<Vec<(String, String)>> {
279 let data = devdir(format!("{}/data.db", config.data).as_str()); 278 let data = format!("{}/data.db", config.data);
280 let connection = Connection::open(data)?; 279 let connection = Connection::open(data)?;
281 280
282 let mut versions: Vec<(String, String)> = Vec::new(); 281 let mut versions: Vec<(String, String)> = Vec::new();
@@ -302,7 +301,7 @@ pub fn userlist_get_all_applicable_versions_with_mods(
302} 301}
303 302
304pub fn userlist_get_current_version(config: Cfg, list_id: &str, mod_id: &str) -> MLE<String> { 303pub fn userlist_get_current_version(config: Cfg, list_id: &str, mod_id: &str) -> MLE<String> {
305 let data = devdir(format!("{}/data.db", config.data).as_str()); 304 let data = format!("{}/data.db", config.data);
306 let connection = Connection::open(data).unwrap(); 305 let connection = Connection::open(data).unwrap();
307 306
308 let mut version: String = String::new(); 307 let mut version: String = String::new();
@@ -324,7 +323,7 @@ pub fn userlist_get_all_current_version_ids(
324 config: Cfg, 323 config: Cfg,
325 list_id: String, 324 list_id: String,
326) -> Result<Vec<String>, Box<dyn std::error::Error>> { 325) -> Result<Vec<String>, Box<dyn std::error::Error>> {
327 let data = devdir(format!("{}/data.db", config.data).as_str()); 326 let data = format!("{}/data.db", config.data);
328 let connection = Connection::open(data)?; 327 let connection = Connection::open(data)?;
329 328
330 let mut versions: Vec<String> = Vec::new(); 329 let mut versions: Vec<String> = Vec::new();
@@ -350,7 +349,7 @@ pub fn userlist_get_all_current_versions_with_mods(
350 config: Cfg, 349 config: Cfg,
351 list_id: String, 350 list_id: String,
352) -> Result<Vec<(String, String)>, Box<dyn std::error::Error>> { 351) -> Result<Vec<(String, String)>, Box<dyn std::error::Error>> {
353 let data = devdir(format!("{}/data.db", config.data).as_str()); 352 let data = format!("{}/data.db", config.data);
354 let connection = Connection::open(data)?; 353 let connection = Connection::open(data)?;
355 354
356 let mut versions: Vec<(String, String)> = Vec::new(); 355 let mut versions: Vec<(String, String)> = Vec::new();
@@ -379,7 +378,7 @@ pub fn userlist_get_all_current_versions_with_mods(
379} 378}
380 379
381pub fn userlist_get_set_version(config: Cfg, list_id: &str, mod_id: &str) -> MLE<bool> { 380pub fn userlist_get_set_version(config: Cfg, list_id: &str, mod_id: &str) -> MLE<bool> {
382 let data = devdir(format!("{}/data.db", config.data).as_str()); 381 let data = format!("{}/data.db", config.data);
383 let connection = Connection::open(data).unwrap(); 382 let connection = Connection::open(data).unwrap();
384 383
385 let mut set_version: bool = false; 384 let mut set_version: bool = false;
@@ -402,7 +401,7 @@ pub fn userlist_change_versions(
402 link: String, 401 link: String,
403 mod_id: String, 402 mod_id: String,
404) -> MLE<()> { 403) -> MLE<()> {
405 let data = devdir(format!("{}/data.db", config.data).as_str()); 404 let data = format!("{}/data.db", config.data);
406 let connection = Connection::open(data)?; 405 let connection = Connection::open(data)?;
407 406
408 connection.execute(format!("UPDATE {} SET current_version = ?1, applicable_versions = ?2, current_download = ?3 WHERE mod_id = ?4", list_id).as_str(), [current_version, versions, link, mod_id])?; 407 connection.execute(format!("UPDATE {} SET current_version = ?1, applicable_versions = ?2, current_download = ?3 WHERE mod_id = ?4", list_id).as_str(), [current_version, versions, link, mod_id])?;
@@ -415,7 +414,7 @@ pub fn userlist_add_disabled_versions(
415 disabled_version: String, 414 disabled_version: String,
416 mod_id: String, 415 mod_id: String,
417) -> MLE<()> { 416) -> MLE<()> {
418 let data = devdir(format!("{}/data.db", config.data).as_str()); 417 let data = format!("{}/data.db", config.data);
419 let connection = Connection::open(data)?; 418 let connection = Connection::open(data)?;
420 419
421 let currently_disabled_versions = 420 let currently_disabled_versions =
@@ -437,7 +436,7 @@ pub fn userlist_add_disabled_versions(
437} 436}
438 437
439pub fn userlist_get_disabled_versions(config: Cfg, list_id: String, mod_id: String) -> MLE<String> { 438pub fn userlist_get_disabled_versions(config: Cfg, list_id: String, mod_id: String) -> MLE<String> {
440 let data = devdir(format!("{}/data.db", config.data).as_str()); 439 let data = format!("{}/data.db", config.data);
441 let connection = Connection::open(data).unwrap(); 440 let connection = Connection::open(data).unwrap();
442 441
443 let mut version: String = String::new(); 442 let mut version: String = String::new();
@@ -459,7 +458,7 @@ pub fn userlist_get_all_downloads(
459 config: Cfg, 458 config: Cfg,
460 list_id: String, 459 list_id: String,
461) -> Result<Vec<String>, Box<dyn std::error::Error>> { 460) -> Result<Vec<String>, Box<dyn std::error::Error>> {
462 let data = devdir(format!("{}/data.db", config.data).as_str()); 461 let data = format!("{}/data.db", config.data);
463 let connection = Connection::open(data).unwrap(); 462 let connection = Connection::open(data).unwrap();
464 463
465 let mut links: Vec<String> = Vec::new(); 464 let mut links: Vec<String> = Vec::new();
@@ -494,7 +493,7 @@ pub fn lists_insert(
494) -> MLE<()> { 493) -> MLE<()> {
495 println!("Creating list {}", id); 494 println!("Creating list {}", id);
496 495
497 let data = devdir(format!("{}/data.db", config.data).as_str()); 496 let data = format!("{}/data.db", config.data);
498 let connection = Connection::open(data)?; 497 let connection = Connection::open(data)?;
499 498
500 connection.execute( 499 connection.execute(
@@ -512,7 +511,7 @@ pub fn lists_insert(
512} 511}
513 512
514pub fn lists_remove(config: Cfg, id: String) -> MLE<()> { 513pub fn lists_remove(config: Cfg, id: String) -> MLE<()> {
515 let data = devdir(format!("{}/data.db", config.data).as_str()); 514 let data = format!("{}/data.db", config.data);
516 let connection = Connection::open(data)?; 515 let connection = Connection::open(data)?;
517 516
518 connection.execute("DELETE FROM lists WHERE id = ?", [&id])?; 517 connection.execute("DELETE FROM lists WHERE id = ?", [&id])?;
@@ -521,7 +520,7 @@ pub fn lists_remove(config: Cfg, id: String) -> MLE<()> {
521} 520}
522 521
523pub fn lists_get(config: Cfg, list_id: String) -> MLE<List> { 522pub fn lists_get(config: Cfg, list_id: String) -> MLE<List> {
524 let data = devdir(format!("{}/data.db", config.data).as_str()); 523 let data = format!("{}/data.db", config.data);
525 let connection = Connection::open(data).unwrap(); 524 let connection = Connection::open(data).unwrap();
526 525
527 let mut list = List { 526 let mut list = List {
@@ -559,7 +558,7 @@ pub fn lists_get(config: Cfg, list_id: String) -> MLE<List> {
559} 558}
560 559
561pub fn lists_version(config: Cfg, list_id: &str, version: &str) -> MLE<()> { 560pub fn lists_version(config: Cfg, list_id: &str, version: &str) -> MLE<()> {
562 let data = devdir(format!("{}/data.db", config.data).as_str()); 561 let data = format!("{}/data.db", config.data);
563 let connection = Connection::open(data).unwrap(); 562 let connection = Connection::open(data).unwrap();
564 563
565 connection.execute( 564 connection.execute(
@@ -570,7 +569,7 @@ pub fn lists_version(config: Cfg, list_id: &str, version: &str) -> MLE<()> {
570} 569}
571 570
572pub fn lists_get_all_ids(config: Cfg) -> MLE<Vec<String>> { 571pub fn lists_get_all_ids(config: Cfg) -> MLE<Vec<String>> {
573 let data = devdir(format!("{}/data.db", config.data).as_str()); 572 let data = format!("{}/data.db", config.data);
574 let connection = Connection::open(data).unwrap(); 573 let connection = Connection::open(data).unwrap();
575 574
576 let mut list_ids: Vec<String> = Vec::new(); 575 let mut list_ids: Vec<String> = Vec::new();
@@ -589,7 +588,7 @@ pub fn lists_get_all_ids(config: Cfg) -> MLE<Vec<String>> {
589 588
590//config 589//config
591pub fn config_change_current_list(config: Cfg, id: String) -> MLE<()> { 590pub fn config_change_current_list(config: Cfg, id: String) -> MLE<()> {
592 let data = devdir(format!("{}/data.db", config.data).as_str()); 591 let data = format!("{}/data.db", config.data);
593 let connection = Connection::open(data)?; 592 let connection = Connection::open(data)?;
594 593
595 connection.execute( 594 connection.execute(
@@ -600,7 +599,7 @@ pub fn config_change_current_list(config: Cfg, id: String) -> MLE<()> {
600} 599}
601 600
602pub fn config_get_current_list(config: Cfg) -> MLE<String> { 601pub fn config_get_current_list(config: Cfg) -> MLE<String> {
603 let data = devdir(format!("{}/data.db", config.data).as_str()); 602 let data = format!("{}/data.db", config.data);
604 let connection = Connection::open(data).unwrap(); 603 let connection = Connection::open(data).unwrap();
605 604
606 let mut list_id = String::new(); 605 let mut list_id = String::new();
@@ -625,7 +624,7 @@ pub fn s_userlist_update_download(
625 mod_id: String, 624 mod_id: String,
626 link: String, 625 link: String,
627) -> Result<(), Box<dyn std::error::Error>> { 626) -> Result<(), Box<dyn std::error::Error>> {
628 let data = devdir(format!("{}/data.db", config.data).as_str()); 627 let data = format!("{}/data.db", config.data);
629 let connection = Connection::open(data)?; 628 let connection = Connection::open(data)?;
630 629
631 connection.execute( 630 connection.execute(
@@ -640,7 +639,7 @@ pub fn s_userlist_update_download(
640} 639}
641 640
642pub fn s_config_create_version(config: Cfg) -> Result<(), Box<dyn std::error::Error>> { 641pub fn s_config_create_version(config: Cfg) -> Result<(), Box<dyn std::error::Error>> {
643 let data = devdir(format!("{}/data.db", config.data).as_str()); 642 let data = format!("{}/data.db", config.data);
644 let connection = Connection::open(data)?; 643 let connection = Connection::open(data)?;
645 644
646 connection.execute( 645 connection.execute(
@@ -651,7 +650,7 @@ pub fn s_config_create_version(config: Cfg) -> Result<(), Box<dyn std::error::Er
651} 650}
652 651
653pub fn s_config_update_version(config: Cfg, ver: String) -> Result<(), Box<dyn std::error::Error>> { 652pub fn s_config_update_version(config: Cfg, ver: String) -> Result<(), Box<dyn std::error::Error>> {
654 let data = devdir(format!("{}/data.db", config.data).as_str()); 653 let data = format!("{}/data.db", config.data);
655 let connection = Connection::open(data)?; 654 let connection = Connection::open(data)?;
656 655
657 connection.execute( 656 connection.execute(
@@ -662,7 +661,7 @@ pub fn s_config_update_version(config: Cfg, ver: String) -> Result<(), Box<dyn s
662} 661}
663 662
664pub fn s_config_get_version(config: Cfg) -> Result<String, Box<dyn std::error::Error>> { 663pub fn s_config_get_version(config: Cfg) -> Result<String, Box<dyn std::error::Error>> {
665 let data = devdir(format!("{}/data.db", config.data).as_str()); 664 let data = format!("{}/data.db", config.data);
666 let connection = Connection::open(data)?; 665 let connection = Connection::open(data)?;
667 666
668 let mut version: String = String::new(); 667 let mut version: String = String::new();
@@ -689,7 +688,7 @@ pub fn s_insert_column(
689 c_type: String, 688 c_type: String,
690 default: Option<String>, 689 default: Option<String>,
691) -> Result<(), Box<dyn std::error::Error>> { 690) -> Result<(), Box<dyn std::error::Error>> {
692 let data = devdir(format!("{}/data.db", config.data).as_str()); 691 let data = format!("{}/data.db", config.data);
693 let connection = Connection::open(data)?; 692 let connection = Connection::open(data)?;
694 693
695 let mut sql = format!("ALTER TABLE {} ADD '{}' {}", table, column, c_type); 694 let mut sql = format!("ALTER TABLE {} ADD '{}' {}", table, column, c_type);
@@ -702,11 +701,8 @@ pub fn s_insert_column(
702 Ok(()) 701 Ok(())
703} 702}
704 703
705pub fn db_setup(config: Cfg) -> MLE<()> { 704pub fn db_setup(path: &str) -> MLE<()> {
706 println!("Initiating database"); 705 let connection = Connection::open(path)?;
707
708 let data = devdir(format!("{}/data.db", config.data).as_str());
709 let connection = Connection::open(data)?;
710 706
711 connection.execute_batch( 707 connection.execute_batch(
712 "CREATE TABLE 'user_config' ( 'id' TEXT, 'value' TEXT ); 708 "CREATE TABLE 'user_config' ( 'id' TEXT, 'value' TEXT );