Skip to content

Commit

Permalink
made importing tab separated instead
Browse files Browse the repository at this point in the history
  • Loading branch information
TBS1996 committed Nov 6, 2022
1 parent b7c87b1 commit fe226ac
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 23 deletions.
6 changes: 2 additions & 4 deletions src/popups/ankimporter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use std::io::Write;

use crate::utils::ankitemplate::{ImportProgress, Template};
use crate::utils::libextensions::MyListState;
use crate::utils::misc::{PopUpStatus, SpekiPaths};
use crate::utils::misc::SpekiPaths;
use crate::utils::statelist::{KeyHandler, StatefulList};
use crate::widgets::textinput::Field;
use crate::MyType;
Expand Down Expand Up @@ -70,7 +70,7 @@ impl fmt::Display for Deck {
write!(f, "{}", self.title)
}
}
use crate::app::{AppData, PopUpState, Tab, TabData, Widget};
use crate::app::{AppData, Tab, TabData, Widget};
impl Ankimporter {
pub fn new() -> Self {
let mut list = StatefulList::<Deck>::new("".to_string());
Expand Down Expand Up @@ -320,11 +320,9 @@ enum Stringstatus {

use futures_util::StreamExt;

use super::edit_card::Editor;
use super::load_cards::LoadCards;
use super::message_popup::{Msg, MsgPopup};
use super::progress_popup::Progress;
use super::wikiselect::WikiSelect;
#[tokio::main]
pub async fn download_deck(
url: String,
Expand Down
9 changes: 3 additions & 6 deletions src/tabs/import.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
use std::path::PathBuf;

use crate::{
app::{Tab, TabData, Widget},
popups::{
ankimporter::Ankimporter,
filepicker::{FilePicker, FilePickerPurpose},
load_cards::LoadCards,
},
utils::misc::split_updown_by_percent,
widgets::button::Button,
Expand Down Expand Up @@ -35,7 +32,7 @@ impl Tab for Importer {

fn keyhandler(
&mut self,
appdata: &crate::app::AppData,
_appdata: &crate::app::AppData,
key: crate::MyKey,
cursor: &(u16, u16),
) {
Expand All @@ -46,8 +43,8 @@ impl Tab for Importer {
MyKey::Enter if self.local.is_selected(cursor) => {
let ldc = FilePicker::new(
FilePickerPurpose::LoadCards,
"Choose a CSV file".to_string(),
["csv".to_string()],
"Choose a TSV file (tab-separated) with a header".to_string(),
["tsv".to_string(), "csv".to_string()],
);
self.set_popup(Box::new(ldc));
}
Expand Down
30 changes: 17 additions & 13 deletions src/utils/ankitemplate.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::{
collections::HashMap,
fs, io,
fs,
path::PathBuf,
sync::{Arc, Mutex},
};
Expand Down Expand Up @@ -71,15 +71,18 @@ impl Template {
let mut notes = HashMap::new();
let mut cards = vec![];
let mut models = HashMap::new();
let mut qty = 0;

// let path = String::from("importing.csv");
let mut rdr = Reader::from_path(path).unwrap();
//let mut rdr = Reader::from_path(path).unwrap();
let mut rdr = ReaderBuilder::new()
.delimiter(b'\t')
.from_path(path)
.unwrap();

let mut index = 0;
for result in rdr.records() {
let record = result.unwrap();
let mut cardfields = vec![];
qty = record.len();
for field in record.iter() {
cardfields.push(CardField {
text: field.to_string(),
Expand All @@ -100,24 +103,25 @@ impl Template {
cards.push(kort);
index += 1;
}
let mut fields = vec![];
let mut afmt = String::new();

for i in 1..qty + 1 {
let field = format!("field{}", i);
fields.push(field);
let headers = rdr.headers().unwrap();
let mut fields = vec![];
for header in headers.iter() {
let hdr = header.trim().to_owned();
fields.push(hdr);
}

for i in 1..fields.len() {
let mut field = fields[i].clone();
let mut field = fields[i].trim().to_owned();
field.push('}');
field.push('}');
field.insert(0, '{');
field.insert(0, '{');
afmt.push_str(&field);
}
let qfmt = {
let mut field = fields[0].clone();
let mut field = fields[0].trim().to_owned();
field.push('}');
field.push('}');
field.insert(0, '{');
Expand All @@ -126,15 +130,15 @@ impl Template {
};

let thetemple = Temple {
name: String::from("csv_template"),
name: String::from("tsv_template"),
qfmt,
afmt,
};

let model = Model {
is_cloze: false,
fields,
name: "csv_model".to_string(),
name: "tsv_model".to_string(),
templates: vec![thetemple],
};

Expand Down Expand Up @@ -620,7 +624,7 @@ impl CardField {
}

use anyhow::Result;
use csv::Reader;
use csv::ReaderBuilder;
use regex::Regex;
use rusqlite::Connection;

Expand Down

0 comments on commit fe226ac

Please sign in to comment.