aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValentin Popov <info@valentineus.link>2020-05-11 02:48:24 +0300
committerValentin Popov <info@valentineus.link>2020-05-11 02:48:24 +0300
commit4477267905374f88d5992f7d1ea7c6a69e4d4c3a (patch)
tree615234ac365c546a8aa1c827d39b409735a0c150
parent7f9f743f6a0a899a5c045ebbe0911a8f89056909 (diff)
downloadbbb2json-release/v0.2.0.tar.xz
bbb2json-release/v0.2.0.zip
Генератор списка файлов "events.xml"release/v0.2.0
-rw-r--r--Cargo.toml8
-rw-r--r--src/cli/en.yml10
-rw-r--r--src/main.rs39
-rw-r--r--src/parser.rs60
4 files changed, 17 insertions, 100 deletions
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 <info@valentineus.link>" ]
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 <info@valentineus.link>"
-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<String> {
+ let mut array: Vec<String> = 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<File>) -> 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;
-}