File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -42,6 +42,5 @@ url = "2.5"
4242regex = " 1.12"
4343rusqlite = { version = " 0.39" , features = [" bundled" ] }
4444dirs = " 6.0.0"
45- minijinja = " 2.20.0"
4645base64 = " 0.22.1"
4746actix-cors = " 0.7.1"
Original file line number Diff line number Diff line change 483483
484484 < div class ="status-bar ">
485485 < span class ="accent "> RuTorrent</ span >
486- < span > v{{ version }} </ span >
486+ < span id =" versionText " > v— </ span >
487487 < span id ="lastUpdated "> —</ span >
488488 </ div >
489489</ div >
609609 }
610610
611611 function startDashboard ( ) {
612+ fetchVersion ( ) ;
612613 fetchTorrents ( ) ;
613614 if ( pollTimer ) {
614615 clearInterval ( pollTimer ) ;
657658 toast ( 'Logged out' , 'success' ) ;
658659 } ) ;
659660
661+ // ── Fetch version ─────────────────────────────────────────
662+ async function fetchVersion ( ) {
663+ try {
664+ const resp = await fetch ( '/version' ) ;
665+ if ( ! resp . ok ) {
666+ throw new Error ( 'Failed to fetch version' ) ;
667+ }
668+ const data = await resp . json ( ) ;
669+ document . getElementById ( 'versionText' ) . textContent =
670+ `v${ data . version } ` ;
671+ } catch ( err ) {
672+ console . error ( err ) ;
673+ document . getElementById ( 'versionText' ) . textContent =
674+ 'v?' ;
675+ }
676+ }
677+
660678 // ── Fetch torrents ─────────────────────────────────────────
661679 async function fetchTorrents ( ) {
662680 try {
765783 document . getElementById ( 'deleteBtn' ) . disabled =
766784 selectedNames . size === 0 ;
767785
786+ // TODO:
787+ // 1. lastUpdated is not rendered in the UI
788+ // 2. Use /GET torrent to produce timestamp
768789 document . getElementById ( 'lastUpdated' ) . textContent =
769790 'Updated ' + new Date ( ) . toLocaleTimeString ( ) ;
770791
Original file line number Diff line number Diff line change 11use base64:: { engine:: general_purpose, Engine as _} ;
2- use crate :: { constant , settings} ;
2+ use crate :: settings;
33use actix_web:: { web, HttpRequest , HttpResponse , Responder } ;
4- use minijinja:: { context, Environment } ;
54use serde_json:: json;
65
7- fn build_env ( ) -> Environment < ' static > {
8- let mut env = Environment :: new ( ) ;
9- env. add_template ( "index.html" , include_str ! ( "templates/index.html" ) )
10- . unwrap ( ) ;
11- env
12- }
13-
14- pub async fn index_page (
15- metadata : web:: Data < constant:: MetaData > ,
16- ) -> impl Responder {
17- let env = build_env ( ) ;
18- let tmpl = env. get_template ( "index.html" ) . unwrap ( ) ;
19- let rendered = tmpl
20- . render ( context ! {
21- version => metadata. pkg_version,
22- } )
23- . unwrap ( ) ;
6+ pub async fn index_page ( ) -> impl Responder {
247 HttpResponse :: Ok ( )
258 . content_type ( "text/html; charset=utf-8" )
26- . body ( rendered )
9+ . body ( include_str ! ( "templates/index.html" ) )
2710}
2811
2912fn base64_decode ( value : & str ) -> Result < String , Box < dyn std:: error:: Error > > {
You can’t perform that action at this time.
0 commit comments