Skip to content

Commit 2bcc8c7

Browse files
committed
refactor(client): remove deprecated from local storage and front-end
1 parent 34ccbac commit 2bcc8c7

File tree

6 files changed

+93
-117
lines changed

6 files changed

+93
-117
lines changed

src/app/learnocaml_common.ml

Lines changed: 42 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -421,10 +421,10 @@ let extract_text_from_rich_text text =
421421
render (("$" ^ code ^ "$") :: acc) rest in
422422
render [] text
423423

424-
let set_state_from_save_file ?token save =
424+
let set_state_from_save_file ?session save =
425425
let open Learnocaml_data.Save in
426426
let open Learnocaml_local_storage in
427-
(match token with None -> () | Some t -> store sync_token t);
427+
(match session with None -> () | Some s -> store sync_session s);
428428
store nickname save.nickname;
429429
store all_graded_solutions
430430
(SMap.map (fun ans -> ans.Answer.solution) save.all_exercise_states);
@@ -471,34 +471,35 @@ let get_state_as_save_file ?(include_reports = false) () =
471471
all_exercise_toplevel_histories = retrieve all_exercise_toplevel_histories;
472472
}
473473

474-
let rec sync_save token session save_file on_sync =
474+
let rec sync_save session save_file on_sync =
475475
Server_caller.request (Learnocaml_api.Update_save (session, save_file))
476476
>>= function
477477
| Ok save ->
478-
set_state_from_save_file ~token save;
478+
set_state_from_save_file ~session save;
479479
on_sync ();
480480
Lwt.return save
481+
(* Removed auto-create fallback; token must already exist
481482
| Error (`Not_found _) ->
482483
Server_caller.request_exn
483484
(Learnocaml_api.Create_token ("", Some token, None)) >>= fun _token ->
484485
assert (_token = token);
485486
Server_caller.request_exn
486487
(Learnocaml_api.Update_save (session, save_file)) >>= fun save ->
487-
set_state_from_save_file ~token save;
488+
set_state_from_save_file ~session save;
488489
on_sync ();
489-
Lwt.return save
490+
Lwt.return save*)
490491
| Error e ->
491492
lwt_alert ~title:[%i"SYNC FAILED"] [
492493
H.p [H.txt [%i"Could not synchronise save with the server"]];
493494
H.code [H.txt (Server_caller.string_of_error e)];
494495
] ~buttons:[
495-
[%i"Retry"], (fun () -> sync_save token session save_file on_sync);
496+
[%i"Retry"], (fun () -> sync_save session save_file on_sync);
496497
[%i"Ignore"], (fun () -> Lwt.return save_file);
497498
]
498499

499-
let sync token session on_sync = sync_save token session (get_state_as_save_file ()) on_sync
500+
let sync session on_sync = sync_save session (get_state_as_save_file ()) on_sync
500501

501-
let sync_exercise token session ?answer ?editor id on_sync =
502+
let sync_exercise session ?answer ?editor id on_sync =
502503
let handle_serverless () =
503504
(* save the text at least locally (but not the report & grade, that could
504505
be misleading) *)
@@ -533,13 +534,13 @@ let sync_exercise token session ?answer ?editor id on_sync =
533534
all_toplevel_histories = SMap.empty;
534535
all_exercise_toplevel_histories = opt_to_map toplevel_history;
535536
} in
536-
match token,session with
537-
| Some token, Some session ->
538-
Lwt.catch (fun () -> sync_save token session save_file on_sync)
537+
match session with
538+
| Some session ->
539+
Lwt.catch (fun () -> sync_save session save_file on_sync)
539540
(fun e ->
540541
handle_serverless ();
541542
raise e)
542-
| _,_ -> set_state_from_save_file save_file;
543+
| _ -> set_state_from_save_file save_file;
543544
handle_serverless ();
544545
on_sync ();
545546
Lwt.return save_file
@@ -884,7 +885,7 @@ let mk_tab_handlers default_tab other_tabs =
884885
Manip.addClass
885886
(find_component ("learnocaml-exo-tab-" ^ name))
886887
"front-tab" ;
887-
Manip.disable
888+
Manip.disable
888889
(find_component ("learnocaml-exo-button-" ^ name)) ;
889890
current := name in
890891
let init_tabs () =
@@ -932,14 +933,13 @@ module Editor_button (E : Editor_info) = struct
932933
Ace.set_contents E.ace template);
933934
Lwt.return ()
934935
935-
let reload token id template =
936-
let rec fetch_draft_solution tok () =
937-
match tok with
938-
| token ->
939-
let session = Learnocaml_local_storage.(retrieve sync_session) in
936+
let reload session id template =
937+
let rec fetch_draft_solution sess () =
938+
match sess with
939+
| session ->
940940
Server_caller.request (Learnocaml_api.Fetch_save session) >>= function
941941
| Ok save ->
942-
set_state_from_save_file ~token save;
942+
set_state_from_save_file ~session save;
943943
Lwt.return_some (save.Save.nickname)
944944
| Error (`Not_found _) ->
945945
alert ~title:[%i"TOKEN NOT FOUND"]
@@ -950,7 +950,7 @@ module Editor_button (E : Editor_info) = struct
950950
H.p [H.txt [%i"Could not retrieve data from server"]];
951951
H.code [H.txt (Server_caller.string_of_error e)];
952952
] ~buttons:[
953-
[%i"Retry"], (fun () -> fetch_draft_solution tok ());
953+
[%i"Retry"], (fun () -> fetch_draft_solution sess ());
954954
[%i"Cancel"], (fun () -> Lwt.return_none);
955955
]
956956
in
@@ -985,19 +985,19 @@ module Editor_button (E : Editor_info) = struct
985985
]
986986
]
987987
[%i"Reload"] @@ fun () ->
988-
token >>= function
988+
session >>= function
989989
None ->
990990
(* We may want to only show "Reset to initial template" in this case,
991991
though there is already this code in learnocaml_exercise_main.ml:
992992
{| if has_server then EB.reload ... else EB.cleanup ... |}. *)
993993
Lwt.return_unit
994-
| Some tok ->
994+
| Some sess ->
995995
let found f =
996996
match f () with
997997
| _val -> true
998998
| exception Not_found -> false
999999
in
1000-
fetch_draft_solution tok () >|= fun _save ->
1000+
fetch_draft_solution sess () >|= fun _save ->
10011001
let menu_draft = find_component (id_menu ^ "-draft") in
10021002
Manip.SetCss.display menu_draft
10031003
(if found (fun () ->
@@ -1024,13 +1024,13 @@ module Editor_button (E : Editor_info) = struct
10241024
select_tab "toplevel";
10251025
Lwt.return_unit
10261026
1027-
let sync token session id on_sync =
1027+
let sync session id on_sync =
10281028
let state = button_state () in
10291029
(editor_button
10301030
~state
10311031
~icon: "sync" [%i"Sync"] @@ fun () ->
1032-
token >>= fun token -> session >>= fun session ->
1033-
sync_exercise token session id ~editor:(Ace.get_contents E.ace) on_sync
1032+
session >>= fun session ->
1033+
sync_exercise session id ~editor:(Ace.get_contents E.ace) on_sync
10341034
>|= fun _save -> ());
10351035
Ace.register_sync_observer E.ace (fun sync ->
10361036
(* this is run twice when clicking on Reset, because of Ace's implem *)
@@ -1159,30 +1159,6 @@ let setup_prelude_pane ace prelude =
11591159
Manip.appendChildren prelude_pane
11601160
[ prelude_title ; prelude_container ]
11611161
1162-
let get_token ?(has_server = true) () =
1163-
if not has_server then
1164-
Lwt.return None
1165-
else
1166-
try
1167-
Some Learnocaml_local_storage.(retrieve sync_token) |>
1168-
Lwt.return
1169-
with
1170-
Not_found ->
1171-
ask_string ~title:"Token" ~may_cancel:false
1172-
[H.txt [%i"Enter your token"]]
1173-
>>= fun input_tok ->
1174-
let token = Token.parse (input_tok) in
1175-
let session = Learnocaml_local_storage.(retrieve sync_session) in
1176-
Server_caller.request (Learnocaml_api.Fetch_save session)
1177-
>>= function
1178-
| Ok save ->
1179-
set_state_from_save_file ~token save;
1180-
Lwt.return_some token
1181-
| _ ->
1182-
alert ~title:[%i"TOKEN NOT FOUND"]
1183-
[%i"The entered token couldn't be recognised."];
1184-
Lwt.return_none
1185-
11861162
let get_session ?(has_server = true) () =
11871163
if not has_server then
11881164
Lwt.return None
@@ -1196,16 +1172,21 @@ let get_session ?(has_server = true) () =
11961172
[H.txt [%i"Enter your token"]]
11971173
>>= fun input_tok ->
11981174
let token = Token.parse (input_tok) in
1199-
let session = Learnocaml_local_storage.(retrieve sync_session) in
1200-
Server_caller.request (Learnocaml_api.Fetch_save session)
1201-
>>= function
1202-
| Ok save ->
1203-
set_state_from_save_file ~token save;
1204-
Lwt.return_some session
1205-
| _ ->
1206-
alert ~title:[%i"TOKEN NOT FOUND"]
1207-
[%i"The entered token couldn't be recognised."];
1208-
Lwt.return_none
1175+
Server_caller.request (Learnocaml_api.Login token) >>= function
1176+
| Ok session ->
1177+
(Server_caller.request (Learnocaml_api.Fetch_save session)
1178+
>>= function
1179+
| Ok save ->
1180+
set_state_from_save_file ~session save;
1181+
Lwt.return_some session
1182+
| _ ->
1183+
alert ~title:[%i"TOKEN NOT FOUND"]
1184+
[%i"The entered token couldn't be recognised."];
1185+
Lwt.return_none)
1186+
| _ ->
1187+
alert ~title:[%i"TOKEN NOT FOUND"]
1188+
[%i"The entered token couldn't be recognised."];
1189+
Lwt.return_none
12091190
12101191
module Display_exercise =
12111192
functor (

src/app/learnocaml_common.mli

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ val extract_text_from_rich_text : Learnocaml_data.Tutorial.text -> string
126126

127127
(** Sets the local storage from the data in a save file *)
128128
val set_state_from_save_file :
129-
?token:Token.t -> Save.t -> unit
129+
?session:Session.t -> Save.t -> unit
130130

131131
(** Gets a save file containing the locally stored data *)
132132
val get_state_as_save_file : ?include_reports:bool -> unit -> Save.t
@@ -139,12 +139,12 @@ val get_state_as_save_file : ?include_reports:bool -> unit -> Save.t
139139
Notice that this function synchronizes student {b,content} but not the
140140
reports which are only synchronized when an actual "grading" is done.
141141
*)
142-
val sync: Token.t -> Session.t -> (unit -> unit) -> Save.t Lwt.t
142+
val sync: Session.t -> (unit -> unit) -> Save.t Lwt.t
143143

144144
(** The same, but limiting the submission to the given exercise, using the given
145145
answer if any, and the given editor text, if any. *)
146146
val sync_exercise:
147-
Token.t option -> Session.t option -> ?answer:Learnocaml_data.Answer.t -> ?editor:string ->
147+
Session.t option -> ?answer:Learnocaml_data.Answer.t -> ?editor:string ->
148148
Learnocaml_data.Exercise.id ->
149149
(unit -> unit) ->
150150
Save.t Lwt.t
@@ -225,10 +225,10 @@ end
225225

226226
module Editor_button (_ : Editor_info) : sig
227227
val cleanup : string -> unit
228-
val reload : Learnocaml_data.Token.t option Lwt.t -> string -> string -> unit
228+
val reload : Learnocaml_data.Session.t option Lwt.t -> string -> string -> unit
229229
val download : string -> unit
230230
val eval : Learnocaml_toplevel.t -> (string -> unit) -> unit
231-
val sync : Token.t option Lwt.t -> Session.t option Lwt.t -> Learnocaml_data.SMap.key -> (unit -> unit) -> unit
231+
val sync : Session.t option Lwt.t -> Learnocaml_data.SMap.key -> (unit -> unit) -> unit
232232
end
233233

234234
val setup_editor : string -> Ocaml_mode.editor * Ocaml_mode.editor Ace.editor
@@ -243,8 +243,6 @@ val setup_tab_text_prelude_pane : string -> unit
243243

244244
val setup_prelude_pane : 'a Ace.editor -> string -> unit
245245

246-
val get_token : ?has_server:bool -> unit -> Learnocaml_data.Token.t option Lwt.t
247-
248246
val get_session : ?has_server:bool -> unit -> Learnocaml_data.Session.t option Lwt.t
249247

250248
module Display_exercise :functor

src/app/learnocaml_exercise_main.ml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,6 @@ let () =
101101
(function
102102
| Ok (_, server_id) -> Learnocaml_local_storage.(store server_id) server_id; Lwt.return_true
103103
| Error _ -> Lwt.return_false) >>= fun has_server ->
104-
let token = get_token ~has_server ()
105-
in
106104
let session = get_session ~has_server ()
107105
in
108106
(* ---- launch everything --------------------------------------------- *)
@@ -193,9 +191,9 @@ let () =
193191
let editor, ace = setup_editor solution in
194192
let module EB = Editor_button (struct let ace = ace let buttons_container = editor_toolbar end) in
195193
if has_server then
196-
EB.reload token id (Learnocaml_exercise.(access File.template exo))
194+
EB.reload session id (Learnocaml_exercise.(access File.template exo))
197195
else EB.cleanup (Learnocaml_exercise.(access File.template exo));
198-
EB.sync token session id (fun () -> Ace.focus ace; Ace.set_synchronized ace) ;
196+
EB.sync session id (fun () -> Ace.focus ace; Ace.set_synchronized ace) ;
199197
EB.download id;
200198
EB.eval top select_tab;
201199
let typecheck = typecheck top ace editor in
@@ -279,8 +277,8 @@ let () =
279277
else
280278
Some solution, None
281279
in
282-
token >>= fun token -> session >>= fun session ->
283-
sync_exercise token session id ?answer ?editor (fun () -> Ace.set_synchronized ace)
280+
session >>= fun session ->
281+
sync_exercise session id ?answer ?editor (fun () -> Ace.set_synchronized ace)
284282
>>= fun _save ->
285283
select_tab "report" ;
286284
Lwt_js.yield () >>= fun () ->

0 commit comments

Comments
 (0)