pusk/bin/main.ml

76 lines
2 KiB
OCaml

open Pusk.Net
open Pusk.Drivers
open Pusk.Utils
open Twitter
let start driver =
let name_driver = prepare driver in
let data_driver = run_process name_driver [] in
let session_id = get_session ~headless:false () in
data_driver, session_id
;;
let stop (driver_process, session_id) =
if not (close_session session_id) then print_endline "Can't close the session";
stop_process driver_process
;;
let rec check ctx =
(* Loop *)
let recheck timeout =
Unix.sleep timeout;
refresh_page ctx.session_id;
Unix.sleep 4;
check ctx
in
(* Time to wait until next check *)
let timeout =
match find_latest_tweet ctx with
| Some tweet_date ->
(* TODO: Get date of tweet and return time to wait before tweeting
* (0 if we need to tweet) *)
print_endline (fmt "latest tweet date: %d" tweet_date);
30000000000000000
| None -> 0
in
if 0 = timeout
then (
print_endline "TODO: We are tweeting here. :)";
(* Wait the maximum time since we just tweeted *)
recheck 2505600 (* 29 days *))
else (* Wait the amount of time calculated from the post *)
recheck timeout
;;
let main ctx =
(* Load credentials *)
load_dotenv;
let username, password =
match Sys.getenv_opt "TWITTER_USERNAME", Sys.getenv_opt "TWITTER_PASSWORD" with
| Some u, Some p -> u, p
| None, None -> raise (Any "Username and password not set")
| None, Some _ -> raise (Any "Username not set")
| Some _, None -> raise (Any "Password not set")
in
login_twitter ctx username password (Sys.getenv_opt "TWITTER_TOTP");
go_to_profile ctx;
(* Start check routine *)
check ctx
;;
let handler data (signal : int) =
stop_process data;
exit
(match signal with
| v when v = Sys.sigint -> 130
| _ -> 1)
;;
let () =
let data = start (Gecko "0.33.0") in
Sys.set_signal Sys.sigint (Sys.Signal_handle (handler (fst data)));
let ctx = { session_id = snd data } in
(try main ctx with
| Any why -> print_endline why);
stop data
;;