Skip to content

Commit

Permalink
time parser
Browse files Browse the repository at this point in the history
  • Loading branch information
fatfingers23 committed Apr 20, 2024
1 parent cbcebc8 commit 6b288c8
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 6 deletions.
42 changes: 42 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion trackscape-discord-shared/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,7 @@ anyhow = "1.0.75"
celery = "0.5.5"
redis = { version = "0.23.3", features = ["json"] }
wom_rs = { git = "https://github.com/fatfingers23/wom_rs.git" }
chrono = "0.4.33"
chrono = "0.4.33"

[dev-dependencies]
rstest = "0.19.0"
46 changes: 42 additions & 4 deletions trackscape-discord-shared/src/osrs_broadcast_extractor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ pub mod osrs_broadcast_extractor {
pub player: String,
pub activity: String,
pub variant: Option<String>,
pub time_in_seconds: i64,
pub time_in_seconds: f64,
}

#[derive(PartialEq, Deserialize, Serialize, Debug, Clone)]
Expand Down Expand Up @@ -622,8 +622,9 @@ pub mod osrs_broadcast_extractor {
}

pub fn personal_best_broadcast_extractor(message: String) -> Option<PersonalBestBroadcast> {
// RuneScape Player has achieved a new Vorkath personal best: 2:28
let re = regex::Regex::new(
r#"^(?P<player>[\w\s]+) has achieved a new (?P<activity>[\w\s]+) personal best: (?<time>.*?)"#,
r#"^(?P<player>[\w\s]+) has achieved a new (?P<activity>[\w\s]+) personal best: (?<time>[\d:]+)"#,
)
.unwrap();

Expand All @@ -636,12 +637,35 @@ pub mod osrs_broadcast_extractor {
player: player.to_string(),
activity: activity.to_string(),
variant: None,
time_in_seconds: 0,
time_in_seconds: osrs_time_parser(time),
});
}
None
}

pub fn osrs_time_parser(time: &str) -> f64 {
let split_sub_second: Vec<&str> = time.split(".").collect();
let sub_second_fraction = format!(".{:}", split_sub_second.get(1).unwrap_or(&"0"))
.parse::<f64>()
.unwrap_or(0.0);

let split_time: Vec<&str> = split_sub_second[0].split(":").collect();

if split_time.len() == 2 {
let minutes_seconds = split_time[0].parse::<f64>().unwrap_or(0.0) * 60.0;
let seconds = split_time[1].parse::<f64>().unwrap_or(0.0);
return minutes_seconds + seconds + sub_second_fraction;
}
if split_time.len() == 3 {
let hours_seconds = split_time[0].parse::<f64>().unwrap_or(0.0) * 3600.0;
let minutes_seconds = split_time[1].parse::<f64>().unwrap_or(0.0) * 60.0;
let seconds = split_time[2].parse::<f64>().unwrap_or(0.0);
return hours_seconds + minutes_seconds + seconds + sub_second_fraction;
}

0.0
}

pub fn get_broadcast_type(message_content: String) -> BroadcastType {
if message_content.contains("received a drop:") {
return BroadcastType::ItemDrop;
Expand Down Expand Up @@ -743,6 +767,7 @@ mod tests {
LevelMilestoneBroadcast, PersonalBestBroadcast, PetDropBroadcast, PkBroadcast,
QuestCompletedBroadcast, XPMilestoneBroadcast,
};
use rstest::rstest;
use tracing::info;

#[test]
Expand Down Expand Up @@ -1353,6 +1378,19 @@ mod tests {
}
}

#[rstest]
#[case("0:56.40", 56.40)]
#[case("1:25", 85.0)]
#[case("1:19.80", 79.8)]
#[case("1:15.00", 75.00)]
#[case("21:55.80", 1_315.80)]
#[case("1:30:00", 5_400.00)]
#[case("1:30:00.45", 5_400.45)]
fn test_osrs_time_parser(#[case] time: &str, #[case] expected: f64) {
let actual = osrs_broadcast_extractor::osrs_time_parser(time);
assert_eq!(actual, expected);
}

//Test data setup
struct ItemMessageTest {
message: String,
Expand Down Expand Up @@ -2075,7 +2113,7 @@ mod tests {
message: "RuneScape Player has achieved a new Vorkath personal best: 2:28".to_string(),
broadcast: PersonalBestBroadcast {
player: "RuneScape Player".to_string(),
time_in_seconds: 148,
time_in_seconds: 148.00,
activity: "Vorkath".to_string(),
variant: None,
},
Expand Down
2 changes: 1 addition & 1 deletion trackscape-discord-shared/src/osrs_broadcast_handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -846,7 +846,7 @@ mod tests {
impl JobQueue for MockJobQueue {
async fn send_task<T: Task>(
&self,
task_sig: Signature<T>,
_task_sig: Signature<T>,
) -> Result<AsyncResult, CeleryError> {
Ok(AsyncResult {
task_id: "".to_string(),
Expand Down

0 comments on commit 6b288c8

Please sign in to comment.