From 4477267905374f88d5992f7d1ea7c6a69e4d4c3a Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Mon, 11 May 2020 03:48:24 +0400 Subject: =?UTF-8?q?=D0=93=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=82=D0=BE=D1=80?= =?UTF-8?q?=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B0=20=D1=84=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB=D0=BE=D0=B2=20"events.xml"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.toml | 8 ++------ src/cli/en.yml | 10 ---------- src/main.rs | 39 +++++++++++++++----------------------- src/parser.rs | 60 ---------------------------------------------------------- 4 files changed, 17 insertions(+), 100 deletions(-) delete mode 100644 src/cli/en.yml delete mode 100644 src/parser.rs diff --git a/Cargo.toml b/Cargo.toml index 47d9263..83e4a18 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,11 +2,7 @@ authors = [ "Valentin Popov " ] edition = "2018" name = "bbb2json" -version = "0.1.0" +version = "0.2.0" [dependencies] -clap = { version = "2.32.0", features = [ "yaml" ] } -serde = "1.0.85" -serde_derive = "1.0.85" -serde_json = "1.0.37" -xml-rs = "0.8.0" \ No newline at end of file +walkdir = "2.3.1" diff --git a/src/cli/en.yml b/src/cli/en.yml deleted file mode 100644 index 5dbc625..0000000 --- a/src/cli/en.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: "bbb2json" -version: "0.1.0" -author: "Valentin Popov " -about: "BigBlueButton records analyzer. Displays basic recording information." - -args: - - FILE: - help: "The path to a file 'events.xml'." - index: 1 - required: true \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index dbf0f28..f30f834 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,31 +1,22 @@ -#[macro_use] -extern crate serde_derive; -extern crate serde_json; +use walkdir::WalkDir; -extern crate clap; -extern crate xml; +/// Создание списка "events.xml" файлов. +fn get_list(root: &str) -> Vec { + let mut array: Vec = vec![]; -use std::fs::File; -use std::io::BufReader; -use std::path::Path; + for entry in WalkDir::new(root) { + let path = entry.unwrap().path().display().to_string(); -use clap::{load_yaml, App}; + if path.contains("events.xml") { + array.push(path); + } + } -mod parser; -use parser::*; + return array; +} fn main() { - let yaml = load_yaml!("cli/en.yml"); - let matches = App::from_yaml(yaml).get_matches(); - - let path = matches.value_of("FILE").unwrap(); - - match Path::new(path).exists() { - true => { - let file: File = File::open(path).unwrap(); - let data: ParserResult = parser(BufReader::new(file)); - println!("{}", serde_json::to_string_pretty(&data).unwrap()); - } - _ => panic!("File {:#?} does not exist or is not available.", path), - }; + let root = "tests"; + let list = get_list(root); + dbg!(list); } diff --git a/src/parser.rs b/src/parser.rs deleted file mode 100644 index 1c862c4..0000000 --- a/src/parser.rs +++ /dev/null @@ -1,60 +0,0 @@ -use std::fs::File; -use std::io::BufReader; - -use serde_json::Value; -use xml::reader::{EventReader, XmlEvent}; - -#[derive(Serialize)] -pub struct ParserResult { - pub context: Value, - pub external_id: String, - pub meeting_id: String, - pub meeting_name: String, - pub meeting_url: String, -} - -pub fn parser(content: BufReader) -> ParserResult { - let mut data = ParserResult { - context: serde_json::from_str("{}").unwrap(), - external_id: "".to_string(), - meeting_id: "".to_string(), - meeting_name: "".to_string(), - meeting_url: "".to_string(), - }; - - for element in EventReader::new(content) { - match element { - Ok(XmlEvent::StartElement { - name, attributes, .. - }) => { - let el_name = name.local_name.to_string(); - - for attribute in attributes { - let attr_name: String = attribute.name.local_name.to_string(); - let attr_value: String = attribute.value.to_string(); - - if el_name == "metadata" && attr_name == "bn-recording-status" { - data.context = serde_json::from_str(&attr_value).unwrap(); - } - - if el_name == "metadata" && attr_name == "meetingId" { - data.external_id = attr_value.clone(); - } - - if el_name == "recording" && attr_name == "meeting_id" { - data.meeting_id = attr_value.clone(); - data.meeting_url = format!("{}{}", "https://bbb.styleschool.ru/playback/presentation/0.9.0/playback.html?meetingId=", attr_value); - } - - if el_name == "metadata" && attr_name == "meetingName" { - data.meeting_name = attr_value.clone(); - } - } - } - Err(error) => panic!(error), - _ => {} - } - } - - return data; -} -- cgit v1.2.3