Main flow is restructured a bit

master
mgifos 7 years ago
parent f2bbd95745
commit 76603dcf5d
  1. 2
      src/main/scala/com.github.mgifos.workouts/GarminConnect.scala
  2. 57
      src/main/scala/com.github.mgifos.workouts/Main.scala

@ -47,7 +47,7 @@ class GarminConnect(email: String, password: String)(implicit system: ActorSyste
log.info("\nCreating workouts:") log.info("\nCreating workouts:")
val source = Source(workouts.map { workout => val source = Source(workouts.map { workout =>
val req = Post("https://connect.garmin.com/modern/proxy/workout-service/workout") val req = Post("https://connect.garmin.com/modern/proxy/workout-service/workout")
.withEntity(HttpEntity(`application/json`, workout.json.toString())) .withEntity(HttpEntity(`application/json`, workout.json().toString()))
.withHeaders( .withHeaders(
session.headers session.headers
:+ Referer("https://connect.garmin.com/modern/workout/create/running") :+ Referer("https://connect.garmin.com/modern/workout/create/running")

@ -127,27 +127,7 @@ object Main extends App {
new String(console.readPassword()) new String(console.readPassword())
} }
implicit val garmin: GarminConnect = new GarminConnect(email, password) syncGarmin(config, plan, new GarminConnect(email, password))
val workouts = plan.workouts.toIndexedSeq
garmin.login().flatMap {
case Right(s) =>
implicit val session: GarminSession = s
for {
maybeDeleteMessage <- deleteWorkoutsTask(workouts.map(_.name))
maybeGarminWorkouts <- createWorkoutsTask(workouts)
maybeScheduleMessage <- scheduleTask(maybeGarminWorkouts.fold(Seq.empty[GarminWorkout])(identity))
} yield {
log.info("\nStatistics:")
maybeDeleteMessage.foreach(msg => log.info(" " + msg))
maybeGarminWorkouts.foreach(workouts => log.info(s" ${workouts.length} imported"))
maybeScheduleMessage.foreach(msg => log.info(" " + msg))
log.info("Logging out and closing connection...")
}
case Left(loginFailureMessage) =>
log.error(loginFailureMessage)
Future.successful(())
}
} }
if (plan.invalid().isEmpty) proceedToGarmin() if (plan.invalid().isEmpty) proceedToGarmin()
@ -162,18 +142,16 @@ object Main extends App {
} }
} }
/** private def syncGarmin(implicit config: Config, plan: WeeklyPlan, garmin: GarminConnect): Future[Unit] = {
* Deletes existing workouts with the same names or not
*/ def deleteWorkoutsTask(workouts: Seq[String])(implicit config: Config, garmin: GarminConnect, session: GarminSession): Future[Option[String]] = {
private def deleteWorkoutsTask(
workouts: Seq[String])(implicit config: Config, garmin: GarminConnect, session: GarminSession): Future[Option[String]] = {
if (config.delete) if (config.delete)
garmin.deleteWorkouts(workouts).map(c => Some(s"$c deleted")) garmin.deleteWorkouts(workouts).map(c => Some(s"$c deleted"))
else else
Future.successful(None) Future.successful(None)
} }
private def createWorkoutsTask( def createWorkoutsTask(
workouts: Seq[WorkoutDef])(implicit config: Config, garmin: GarminConnect, session: GarminSession): Future[Option[Seq[GarminWorkout]]] = { workouts: Seq[WorkoutDef])(implicit config: Config, garmin: GarminConnect, session: GarminSession): Future[Option[Seq[GarminWorkout]]] = {
if (config.mode.exists(Seq(Modes.`import`, Modes.schedule).contains)) if (config.mode.exists(Seq(Modes.`import`, Modes.schedule).contains))
garmin.createWorkouts(workouts).map(Option.apply) garmin.createWorkouts(workouts).map(Option.apply)
@ -181,7 +159,8 @@ object Main extends App {
Future.successful(None) Future.successful(None)
} }
private def scheduleTask(workouts: Seq[GarminWorkout])(implicit config: Config, def scheduleTask(workouts: Seq[GarminWorkout])(implicit
config: Config,
garmin: GarminConnect, garmin: GarminConnect,
plan: WeeklyPlan, plan: WeeklyPlan,
session: GarminSession): Future[Option[String]] = { session: GarminSession): Future[Option[String]] = {
@ -206,6 +185,28 @@ object Main extends App {
Future.successful(None) Future.successful(None)
} }
val workouts = plan.workouts.toIndexedSeq
garmin.login().flatMap {
case Right(s) =>
implicit val session: GarminSession = s
for {
maybeDeleteMessage <- deleteWorkoutsTask(workouts.map(_.name))
maybeGarminWorkouts <- createWorkoutsTask(workouts)
maybeScheduleMessage <- scheduleTask(maybeGarminWorkouts.fold(Seq.empty[GarminWorkout])(identity))
} yield {
log.info("\nStatistics:")
maybeDeleteMessage.foreach(msg => log.info(" " + msg))
maybeGarminWorkouts.foreach(workouts => log.info(s" ${workouts.length} imported"))
maybeScheduleMessage.foreach(msg => log.info(" " + msg))
log.info("Logging out and closing connection...")
}
case Left(loginFailureMessage) =>
log.error(loginFailureMessage)
Future.successful(())
}
}
private def shutdown() = Await.result(Http().shutdownAllConnectionPools().flatMap(_ => system.terminate()), 10.minutes) private def shutdown() = Await.result(Http().shutdownAllConnectionPools().flatMap(_ => system.terminate()), 10.minutes)
} }

Loading…
Cancel
Save