@@ -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-
11861162let 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
12101191module Display_exercise =
12111192 functor (
0 commit comments