11use std:: fs:: OpenOptions ;
22use rocket:: serde:: json:: Json ;
3- use std:: io:: { Cursor , Read } ;
3+ use std:: io:: { Read } ;
44use anyhow:: anyhow;
5- use image:: ImageFormat ;
65use rocket:: form:: { Contextual , Form } ;
76use rocket:: http:: { Status } ;
87use rocket:: response:: { Redirect } ;
@@ -13,15 +12,14 @@ use sqlx::{query, query_as, FromRow, SqlitePool};
1312use crate :: db:: { get_event_db, DbPool } ;
1413use crate :: { files, MaybeSessionId , QxApiToken , QxSessionId , SharedQxState } ;
1514use crate :: auth:: { generate_random_string, UserInfo } ;
16- use base64:: Engine ;
1715use chrono:: { DateTime , FixedOffset } ;
1816use rocket:: serde:: { Deserialize , Serialize } ;
1917use crate :: changes:: { ChangesRecord , PENDING , RUN_UPDATE_REQUEST } ;
2018use crate :: files:: { load_file_from_db, save_file_to_db} ;
2119use crate :: iofxml3:: parser:: parse_startlist_xml_data;
2220use crate :: qxdatetime:: QxDateTime ;
2321use crate :: runs:: { ClassesRecord , RunsRecord } ;
24- use crate :: util:: { anyhow_to_custom_error, sqlx_to_anyhow, sqlx_to_custom_error, string_to_custom_error} ;
22+ use crate :: util:: { anyhow_to_custom_error, create_qrc , sqlx_to_anyhow, sqlx_to_custom_error, string_to_custom_error} ;
2523
2624pub const START_LIST_IOFXML3_FILE : & str = "startlist-iof3.xml" ;
2725pub const RUNS_CSV_FILE : & str = "runs.csv" ;
@@ -206,16 +204,7 @@ async fn event_edit_insert(event_id: Option<EventId>, session_id: &QxSessionId,
206204 } else {
207205 EventRecord :: new ( & user. email )
208206 } ;
209- let api_token_qrc_img_data = {
210- let code = qrcode:: QrCode :: new ( event. api_token . 0 . as_bytes ( ) ) . unwrap ( ) ;
211- // Render the bits into an image.
212- let image = code. render :: < :: image:: LumaA < u8 > > ( ) . build ( ) ;
213- let mut buffer: Vec < u8 > = Vec :: new ( ) ;
214- let mut cursor = Cursor :: new ( & mut buffer) ;
215- image. write_to ( & mut cursor, ImageFormat :: Png ) . unwrap ( ) ;
216- // Encode the image buffer to base64
217- base64:: engine:: general_purpose:: STANDARD . encode ( & buffer)
218- } ;
207+ let api_token_qrc_img_data = create_qrc ( event. api_token . 0 . as_bytes ( ) ) . map_err ( anyhow_to_custom_error) ?;
219208 Ok ( Template :: render ( "event-edit" , context ! {
220209 event_id,
221210 user,
@@ -257,7 +246,16 @@ async fn get_event(event_id: EventId, session_id: MaybeSessionId, state: &State<
257246 let user = user_info_opt ( session_id. 0 . as_ref ( ) , state) . await . map_err ( anyhow_to_custom_error) ?;
258247 let is_event_owner = is_event_owner ( & event, user. as_ref ( ) ) ;
259248 let files = files:: list_files ( event_id, state) . await ?;
249+ let is_local_server = state. read ( ) . await . app_config . is_local_server ( ) ;
250+ let event_url = if is_local_server {
251+ format ! ( "http://localhost:8000/event/{event_id}" )
252+ } else {
253+ format ! ( "https://qxqx.org/event/{event_id}" )
254+ } ;
255+ let event_qrc_img_data = create_qrc ( event_url. as_bytes ( ) ) . map_err ( anyhow_to_custom_error) ?;
260256 Ok ( Template :: render ( "event" , context ! {
257+ event_url,
258+ event_qrc_img_data,
261259 user,
262260 is_event_owner,
263261 event,
0 commit comments