diff options
Diffstat (limited to 'src/format')
-rw-r--r-- | src/format/energymech.rs | 41 | ||||
-rw-r--r-- | src/format/weechat3.rs | 12 |
2 files changed, 32 insertions, 21 deletions
diff --git a/src/format/energymech.rs b/src/format/energymech.rs index 6e5d8ae..1fdc537 100644 --- a/src/format/energymech.rs +++ b/src/format/energymech.rs @@ -38,13 +38,18 @@ impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead { type Item = ::Result<Event<'a>>; fn next(&mut self) -> Option<::Result<Event<'a>>> { fn parse_time(context: &Context, time: &str) -> Time { - Time::Timestamp(context.timezone.from_local_date(&context.override_date) - .and_time(NaiveTime::from_hms(time[1..3].parse::<u32>().unwrap(), - time[4..6].parse::<u32>().unwrap(), - time[7..9].parse::<u32>().unwrap())) - .single() - .expect("Transformed log times can't be represented, due to timezone transitions") - .timestamp()) + let h = time[1..3].parse::<u32>().unwrap(); + let m = time[4..6].parse::<u32>().unwrap(); + let s = time[7..9].parse::<u32>().unwrap(); + if let Some(date) = context.override_date { + Time::Timestamp(context.timezone.from_local_date(&date) + .and_time(NaiveTime::from_hms(h, m, s)) + .single() + .expect("Transformed log times can't be represented, due to timezone transitions") + .timestamp()) + } else { + Time::Hms(h as u8, m as u8, s as u8) + } } loop { @@ -71,7 +76,7 @@ impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead { content: rejoin(content, &split_tokens[3..]) }, time: parse_time(&self.context, time), - channel: None + channel: self.context.channel.clone().map(Into::into) })), [time, "***", old, "is", "now", "known", "as", new] => return Some(Ok(Event { ty: Type::Nick { @@ -79,7 +84,8 @@ impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead { new_nick: new.to_owned().into() }, time: parse_time(&self.context, time), - channel: None + channel: self.context.channel.clone().map(Into::into) + })), [time, "***", nick, "sets", "mode:", mode, masks..] => return Some(Ok(Event { ty: Type::Mode { @@ -88,7 +94,8 @@ impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead { masks: rejoin(&masks, &split_tokens[6..]).to_owned().into() }, time: parse_time(&self.context, time), - channel: None + channel: self.context.channel.clone().map(Into::into) + })), [time, "***", "Joins:", nick, host] => return Some(Ok(Event { ty: Type::Join { @@ -96,7 +103,8 @@ impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead { mask: Some(strip_one(host).into()) }, time: parse_time(&self.context, time), - channel: None + channel: self.context.channel.clone().map(Into::into) + })), [time, "***", "Parts:", nick, host, reason..] => return Some(Ok(Event { ty: Type::Part { @@ -105,7 +113,8 @@ impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead { reason: Some(strip_one(&rejoin(reason, &split_tokens[5..])).into()) }, time: parse_time(&self.context, time), - channel: None + channel: self.context.channel.clone().map(Into::into) + })), [time, "***", "Quits:", nick, host, reason..] => return Some(Ok(Event { ty: Type::Quit { @@ -114,7 +123,8 @@ impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead { reason: Some(strip_one(&rejoin(reason, &split_tokens[5..])).into()) }, time: parse_time(&self.context, time), - channel: None + channel: self.context.channel.clone().map(Into::into) + })), [time, "***", nick, "changes", "topic", "to", topic..] => return Some(Ok(Event { ty: Type::TopicChange { @@ -122,7 +132,8 @@ impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead { new_topic: strip_one(&rejoin(topic, &split_tokens[6..])).into() }, time: parse_time(&self.context, time), - channel: None + channel: self.context.channel.clone().map(Into::into) + })), [time, nick, content..] if nick.starts_with('<') && nick.ends_with('>') @@ -132,7 +143,7 @@ impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead { content: rejoin(content, &split_tokens[2..]) }, time: parse_time(&self.context, time), - channel: None + channel: self.context.channel.clone().map(Into::into) })), _ => () } diff --git a/src/format/weechat3.rs b/src/format/weechat3.rs index 20ee1dd..9e07e92 100644 --- a/src/format/weechat3.rs +++ b/src/format/weechat3.rs @@ -84,7 +84,7 @@ impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead { reason: Some(strip_one(&rejoin(reason, &split_tokens[7..])).into()), }, time: parse_time(&self.context, date, time), - channel: None + channel: self.context.channel.clone().map(Into::into) })), [date, time, "--", notice, content..] if notice.starts_with("Notice(") @@ -94,13 +94,13 @@ impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead { content: rejoin(content, &split_tokens[4..]), }, time: parse_time(&self.context, date, time), - channel: None + channel: self.context.channel.clone().map(Into::into) })), [date, time, "--", "irc:", "disconnected", "from", "server", _..] => return Some(Ok(Event { ty: Type::Disconnect, time: parse_time(&self.context, date, time), - channel: None + channel: self.context.channel.clone().map(Into::into) })), [date, time, "--", nick, verb, "now", "known", "as", new_nick] if verb == "is" || verb == "are" @@ -110,7 +110,7 @@ impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead { new_nick: new_nick.to_owned().into() }, time: parse_time(&self.context, date, time), - channel: None + channel: self.context.channel.clone().map(Into::into) })), [date, time, sp, "*", nick, msg..] if sp.clone().is_empty() @@ -120,7 +120,7 @@ impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead { content: rejoin(msg, &split_tokens[5..]), }, time: parse_time(&self.context, date, time), - channel: None + channel: self.context.channel.clone().map(Into::into) })), [date, time, nick, msg..] => return Some(Ok(Event { @@ -129,7 +129,7 @@ impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead { content: rejoin(msg, &split_tokens[3..]), }, time: parse_time(&self.context, date, time), - channel: None + channel: self.context.channel.clone().map(Into::into) })), _ => () } |