@@ -55,22 +55,14 @@ use ffmpeg::ffi::AV_TIME_BASE;
5555use general_settings:: GeneralSettingsStore ;
5656use kameo:: { Actor , actor:: ActorRef } ;
5757use notifications:: NotificationType ;
58- use png:: { ColorType , Encoder } ;
5958use recording:: InProgressRecording ;
60- use relative_path:: RelativePathBuf ;
61- use scap:: {
62- capturer:: Capturer ,
63- frame:: { Frame , VideoFrame } ,
64- } ;
6559use scap_targets:: { Display , DisplayId , WindowId , bounds:: LogicalBounds } ;
6660use serde:: { Deserialize , Serialize } ;
6761use serde_json:: json;
6862use specta:: Type ;
6963use std:: {
7064 collections:: BTreeMap ,
71- fs:: File ,
7265 future:: Future ,
73- io:: BufWriter ,
7466 marker:: PhantomData ,
7567 path:: { Path , PathBuf } ,
7668 process:: Command ,
@@ -309,9 +301,6 @@ pub struct RequestStartRecording {
309301 pub mode : RecordingMode ,
310302}
311303
312- #[ derive( Deserialize , specta:: Type , Serialize , tauri_specta:: Event , Debug , Clone ) ]
313- pub struct RequestNewScreenshot ;
314-
315304#[ derive( Deserialize , specta:: Type , Serialize , tauri_specta:: Event , Debug , Clone ) ]
316305pub struct RequestOpenRecordingPicker {
317306 pub target_mode : Option < RecordingTargetMode > ,
@@ -1250,135 +1239,6 @@ async fn upload_screenshot(
12501239 Ok ( UploadResult :: Success ( share_link) )
12511240}
12521241
1253- #[ tauri:: command]
1254- #[ specta:: specta]
1255- #[ instrument( skip( app, _state) ) ]
1256- async fn take_screenshot ( app : AppHandle , _state : MutableState < ' _ , App > ) -> Result < ( ) , String > {
1257- let id = uuid:: Uuid :: new_v4 ( ) . to_string ( ) ;
1258-
1259- let recording_dir = app
1260- . path ( )
1261- . app_data_dir ( )
1262- . unwrap ( )
1263- . join ( "screenshots" )
1264- . join ( format ! ( "{id}.cap" ) ) ;
1265-
1266- std:: fs:: create_dir_all ( & recording_dir) . map_err ( |e| e. to_string ( ) ) ?;
1267-
1268- let ( width, height, bgra_data) = {
1269- let options = scap:: capturer:: Options {
1270- fps : 1 ,
1271- output_type : scap:: frame:: FrameType :: BGRAFrame ,
1272- show_highlight : false ,
1273- ..Default :: default ( )
1274- } ;
1275-
1276- if let Some ( window) = CapWindowId :: Main . get ( & app) {
1277- let _ = window. hide ( ) ;
1278- }
1279-
1280- let mut capturer =
1281- Capturer :: build ( options) . map_err ( |e| format ! ( "Failed to construct error: {e}" ) ) ?;
1282- capturer. start_capture ( ) ;
1283- let frame = capturer
1284- . get_next_frame ( )
1285- . map_err ( |e| format ! ( "Failed to get frame: {e}" ) ) ?;
1286- capturer. stop_capture ( ) ;
1287-
1288- if let Some ( window) = CapWindowId :: Main . get ( & app) {
1289- let _ = window. show ( ) ;
1290- }
1291-
1292- match frame {
1293- Frame :: Video ( VideoFrame :: BGRA ( bgra_frame) ) => Ok ( (
1294- bgra_frame. width as u32 ,
1295- bgra_frame. height as u32 ,
1296- bgra_frame. data ,
1297- ) ) ,
1298- _ => Err ( "Unexpected frame type" . to_string ( ) ) ,
1299- }
1300- } ?;
1301-
1302- let now = chrono:: Local :: now ( ) ;
1303- let screenshot_name = format ! (
1304- "Cap {} at {}.png" ,
1305- now. format( "%Y-%m-%d" ) ,
1306- now. format( "%H.%M.%S" )
1307- ) ;
1308- let screenshot_path = recording_dir. join ( & screenshot_name) ;
1309-
1310- let app_handle = app. clone ( ) ;
1311- let recording_dir = recording_dir. clone ( ) ;
1312- tokio:: task:: spawn_blocking ( move || -> Result < ( ) , String > {
1313- let mut rgba_data = vec ! [ 0 ; bgra_data. len( ) ] ;
1314- for ( bgra, rgba) in bgra_data. chunks_exact ( 4 ) . zip ( rgba_data. chunks_exact_mut ( 4 ) ) {
1315- rgba[ 0 ] = bgra[ 2 ] ;
1316- rgba[ 1 ] = bgra[ 1 ] ;
1317- rgba[ 2 ] = bgra[ 0 ] ;
1318- rgba[ 3 ] = bgra[ 3 ] ;
1319- }
1320-
1321- let file = File :: create ( & screenshot_path) . map_err ( |e| e. to_string ( ) ) ?;
1322- let w = & mut BufWriter :: new ( file) ;
1323-
1324- let mut encoder = Encoder :: new ( w, width, height) ;
1325- encoder. set_color ( ColorType :: Rgba ) ;
1326- encoder. set_compression ( png:: Compression :: Fast ) ;
1327- let mut writer = encoder. write_header ( ) . map_err ( |e| e. to_string ( ) ) ?;
1328-
1329- writer
1330- . write_image_data ( & rgba_data)
1331- . map_err ( |e| e. to_string ( ) ) ?;
1332-
1333- AppSounds :: Screenshot . play ( ) ;
1334-
1335- let now = chrono:: Local :: now ( ) ;
1336- let screenshot_name = format ! (
1337- "Cap {} at {}.png" ,
1338- now. format( "%Y-%m-%d" ) ,
1339- now. format( "%H.%M.%S" )
1340- ) ;
1341-
1342- use cap_project:: * ;
1343- RecordingMeta {
1344- platform : Some ( Platform :: default ( ) ) ,
1345- project_path : recording_dir. clone ( ) ,
1346- sharing : None ,
1347- pretty_name : screenshot_name,
1348- inner : RecordingMetaInner :: Studio ( cap_project:: StudioRecordingMeta :: SingleSegment {
1349- segment : cap_project:: SingleSegment {
1350- display : VideoMeta {
1351- path : RelativePathBuf :: from_path (
1352- screenshot_path. strip_prefix ( & recording_dir) . unwrap ( ) ,
1353- )
1354- . unwrap ( ) ,
1355- fps : 0 ,
1356- start_time : None ,
1357- } ,
1358- camera : None ,
1359- audio : None ,
1360- cursor : None ,
1361- } ,
1362- } ) ,
1363- upload : None ,
1364- }
1365- . save_for_project ( )
1366- . unwrap ( ) ;
1367-
1368- NewScreenshotAdded {
1369- path : screenshot_path,
1370- }
1371- . emit ( & app_handle)
1372- . ok ( ) ;
1373-
1374- Ok ( ( ) )
1375- } )
1376- . await
1377- . map_err ( |e| format ! ( "Task join error: {e}" ) ) ??;
1378-
1379- Ok ( ( ) )
1380- }
1381-
13821242#[ tauri:: command]
13831243#[ specta:: specta]
13841244#[ instrument( skip( app) ) ]
@@ -1970,7 +1830,6 @@ pub async fn run(recording_logging_handle: LoggingHandle, logs_dir: PathBuf) {
19701830 recording:: list_windows_with_thumbnails,
19711831 windows:: refresh_window_content_protection,
19721832 general_settings:: get_default_excluded_windows,
1973- take_screenshot,
19741833 list_audio_devices,
19751834 close_recordings_overlay_window,
19761835 fake_window:: set_fake_window_bounds,
@@ -2050,7 +1909,6 @@ pub async fn run(recording_logging_handle: LoggingHandle, logs_dir: PathBuf) {
20501909 RecordingStopped ,
20511910 RequestStartRecording ,
20521911 RequestOpenRecordingPicker ,
2053- RequestNewScreenshot ,
20541912 RequestOpenSettings ,
20551913 RequestScreenCapturePrewarm ,
20561914 NewNotification ,
0 commit comments