Update On Fri Mar 22 19:26:22 CET 2024

This commit is contained in:
github-action[bot]
2024-03-22 19:26:23 +01:00
parent d434d36c9f
commit b5926236c5
8 changed files with 168 additions and 92 deletions

1
.github/update.log vendored
View File

@@ -594,3 +594,4 @@ Update On Tue Mar 19 19:28:36 CET 2024
Update On Wed Mar 20 14:51:04 CET 2024
Update On Wed Mar 20 15:20:33 CET 2024
Update On Fri Mar 22 14:55:10 CET 2024
Update On Fri Mar 22 19:26:11 CET 2024

View File

@@ -72,7 +72,7 @@
"@mui/icons-material": "5.15.14",
"@mui/lab": "5.0.0-alpha.169",
"@mui/material": "5.15.14",
"@mui/x-data-grid": "6.19.8",
"@mui/x-data-grid": "7.0.0",
"@tauri-apps/api": "1.5.3",
"ahooks": "3.7.10",
"axios": "1.6.8",
@@ -151,7 +151,7 @@
"telegraf": "4.16.3",
"tsx": "4.7.1",
"typescript": "5.4.3",
"vite": "5.2.2",
"vite": "5.2.3",
"vite-plugin-monaco-editor": "1.1.0",
"vite-plugin-svgr": "4.2.0"
}

View File

@@ -36,8 +36,8 @@ dependencies:
specifier: 5.15.14
version: 5.15.14(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.67)(react-dom@18.2.0)(react@18.2.0)
'@mui/x-data-grid':
specifier: 6.19.8
version: 6.19.8(@mui/material@5.15.14)(@mui/system@5.15.14)(@types/react@18.2.67)(react-dom@18.2.0)(react@18.2.0)
specifier: 7.0.0
version: 7.0.0(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@mui/material@5.15.14)(@types/react@18.2.67)(react-dom@18.2.0)(react@18.2.0)
'@tauri-apps/api':
specifier: 1.5.3
version: 1.5.3
@@ -141,7 +141,7 @@ devDependencies:
version: 7.3.1(eslint@8.57.0)(typescript@5.4.3)
'@vitejs/plugin-react':
specifier: 4.2.1
version: 4.2.1(vite@5.2.2)
version: 4.2.1(vite@5.2.3)
adm-zip:
specifier: 0.5.12
version: 0.5.12
@@ -269,14 +269,14 @@ devDependencies:
specifier: 5.4.3
version: 5.4.3
vite:
specifier: 5.2.2
version: 5.2.2(@types/node@20.11.30)(sass@1.72.0)
specifier: 5.2.3
version: 5.2.3(@types/node@20.11.30)(sass@1.72.0)
vite-plugin-monaco-editor:
specifier: npm:vite-plugin-monaco-editor-new@1.1.3
version: /vite-plugin-monaco-editor-new@1.1.3(monaco-editor@0.47.0)
vite-plugin-svgr:
specifier: 4.2.0
version: 4.2.0(typescript@5.4.3)(vite@5.2.2)
version: 4.2.0(typescript@5.4.3)(vite@5.2.3)
packages:
@@ -498,6 +498,13 @@ packages:
regenerator-runtime: 0.14.0
dev: false
/@babel/runtime@7.24.1:
resolution: {integrity: sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==}
engines: {node: '>=6.9.0'}
dependencies:
regenerator-runtime: 0.14.0
dev: false
/@babel/template@7.22.15:
resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==}
engines: {node: '>=6.9.0'}
@@ -1567,7 +1574,7 @@ packages:
'@types/react':
optional: true
dependencies:
'@babel/runtime': 7.23.9
'@babel/runtime': 7.24.1
'@mui/utils': 5.15.14(@types/react@18.2.67)(react@18.2.0)
'@types/react': 18.2.67
prop-types: 15.8.1
@@ -1587,7 +1594,7 @@ packages:
'@emotion/styled':
optional: true
dependencies:
'@babel/runtime': 7.23.9
'@babel/runtime': 7.24.1
'@emotion/cache': 11.11.0
'@emotion/react': 11.11.4(@types/react@18.2.67)(react@18.2.0)
'@emotion/styled': 11.11.0(@emotion/react@11.11.4)(@types/react@18.2.67)(react@18.2.0)
@@ -1612,7 +1619,7 @@ packages:
'@types/react':
optional: true
dependencies:
'@babel/runtime': 7.23.9
'@babel/runtime': 7.24.1
'@emotion/react': 11.11.4(@types/react@18.2.67)(react@18.2.0)
'@emotion/styled': 11.11.0(@emotion/react@11.11.4)(@types/react@18.2.67)(react@18.2.0)
'@mui/private-theming': 5.15.14(@types/react@18.2.67)(react@18.2.0)
@@ -1647,7 +1654,7 @@ packages:
'@types/react':
optional: true
dependencies:
'@babel/runtime': 7.23.9
'@babel/runtime': 7.24.1
'@types/prop-types': 15.7.11
'@types/react': 18.2.67
prop-types: 15.8.1
@@ -1655,16 +1662,15 @@ packages:
react-is: 18.2.0
dev: false
/@mui/x-data-grid@6.19.8(@mui/material@5.15.14)(@mui/system@5.15.14)(@types/react@18.2.67)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-QsOW9GhJdhvagJfUb5jpZE1MMaCLugxx0l89amxJAthMia95BlGS7jndiDEh8IQNthgzfxjAzrSv8GZpcgSEaA==}
/@mui/x-data-grid@7.0.0(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@mui/material@5.15.14)(@types/react@18.2.67)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Nwwfr+ot/di0oH/pVwIxKV2QD7QyUY/MKkTWRSKzQoJw2aiFQf1Usmvq9Fu1qsCsvMmqIFaToY7972p0cczRjw==}
engines: {node: '>=14.0.0'}
peerDependencies:
'@mui/material': ^5.4.1
'@mui/system': ^5.4.1
'@mui/material': ^5.15.14
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
dependencies:
'@babel/runtime': 7.23.9
'@babel/runtime': 7.24.1
'@mui/material': 5.15.14(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.67)(react-dom@18.2.0)(react@18.2.0)
'@mui/system': 5.15.14(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.67)(react@18.2.0)
'@mui/utils': 5.15.14(@types/react@18.2.67)(react@18.2.0)
@@ -1674,6 +1680,8 @@ packages:
react-dom: 18.2.0(react@18.2.0)
reselect: 4.1.8
transitivePeerDependencies:
- '@emotion/react'
- '@emotion/styled'
- '@types/react'
dev: false
@@ -1819,7 +1827,7 @@ packages:
rollup:
optional: true
dependencies:
'@types/estree': 1.0.3
'@types/estree': 1.0.5
estree-walker: 2.0.2
picomatch: 2.3.1
dev: true
@@ -2224,15 +2232,15 @@ packages:
/@types/estree-jsx@1.0.5:
resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
dependencies:
'@types/estree': 1.0.3
'@types/estree': 1.0.5
dev: false
/@types/estree@1.0.3:
resolution: {integrity: sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==}
dev: false
/@types/estree@1.0.5:
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
dev: true
/@types/fs-extra@11.0.4:
resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
@@ -2466,7 +2474,7 @@ packages:
/@ungap/structured-clone@1.2.0:
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
/@vitejs/plugin-react@4.2.1(vite@5.2.2):
/@vitejs/plugin-react@4.2.1(vite@5.2.3):
resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
@@ -2477,7 +2485,7 @@ packages:
'@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.6)
'@types/babel__core': 7.20.5
react-refresh: 0.14.0
vite: 5.2.2(@types/node@20.11.30)(sass@1.72.0)
vite: 5.2.3(@types/node@20.11.30)(sass@1.72.0)
transitivePeerDependencies:
- supports-color
dev: true
@@ -7326,7 +7334,7 @@ packages:
monaco-editor: 0.47.0
dev: true
/vite-plugin-svgr@4.2.0(typescript@5.4.3)(vite@5.2.2):
/vite-plugin-svgr@4.2.0(typescript@5.4.3)(vite@5.2.3):
resolution: {integrity: sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA==}
peerDependencies:
vite: ^2.6.0 || 3 || 4 || 5
@@ -7334,15 +7342,15 @@ packages:
'@rollup/pluginutils': 5.0.5
'@svgr/core': 8.1.0(typescript@5.4.3)
'@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0)
vite: 5.2.2(@types/node@20.11.30)(sass@1.72.0)
vite: 5.2.3(@types/node@20.11.30)(sass@1.72.0)
transitivePeerDependencies:
- rollup
- supports-color
- typescript
dev: true
/vite@5.2.2(@types/node@20.11.30)(sass@1.72.0):
resolution: {integrity: sha512-FWZbz0oSdLq5snUI0b6sULbz58iXFXdvkZfZWR/F0ZJuKTSPO7v72QPXt6KqYeMFb0yytNp6kZosxJ96Nr/wDQ==}
/vite@5.2.3(@types/node@20.11.30)(sass@1.72.0):
resolution: {integrity: sha512-+i1oagbvkVIhEy9TnEV+fgXsng13nZM90JQbrcPrf6DvW2mXARlz+DK7DLiDP+qeKoD1FCVx/1SpFL1CLq9Mhw==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:

View File

@@ -1,26 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_desc">適用於 Android 的通用代理工具鏈,由 Kotlin 編寫。</string>
<string name="project">專案</string>
<string name="project">計畫</string>
<string name="github">原始碼</string>
<string name="telegram">Telegram 更新頻道</string>
<string name="oss_licenses">開放原始碼授權協定</string>
<string name="oss_licenses">開放原始碼授權條款</string>
<string name="app_version">版本</string>
<string name="logcat">匯出 debug 所需資訊</string>
<string name="menu_configuration">設定檔</string>
<string name="menu_group"></string>
<string name="menu_group"></string>
<string name="menu_about">關於</string>
<string name="quick_toggle">切換</string>
<!-- group -->
<string name="group_name">群組名稱</string>
<string name="group_update">更新</string>
<string name="group_subscription_link">訂閱連</string>
<string name="group_subscription_link">訂閱連</string>
<string name="group_name_required">需要群組名稱</string>
<string name="group_create">建立新組</string>
<string name="group_create_subscription">建立新訂閱</string>
<string name="group_edit">編輯</string>
<string name="group_edit_subscription">編輯訂閱</string>
<string name="group_status_empty">空組</string>
<string name="group_status_empty">白群</string>
<string name="group_status_empty_subscription">尚未更新</string>
<string name="group_status_proxies">%d 個代理</string>
<string name="group_status_proxies_subscription">%d 個代理 | 更新於 %s</string>
@@ -55,7 +55,7 @@
<string name="speed_detail">代理: %1$s↑ %2$s↓
\n直連 %3$s↑ %4$s↓</string>
<string name="speed">%s/s</string>
<string name="connection_test_testing">測試中…</string>
<string name="connection_test_testing">正在測試…</string>
<string name="connection_test_available">成功HTTPS 握手花費 %dms</string>
<string name="connection_test_error">失敗:%s</string>
<string name="connection_test_fail">網路不可用</string>
@@ -69,7 +69,7 @@
<string name="password">密碼</string>
<string name="enc_method">加密方式</string>
<string name="protocol">設定</string>
<string name="protocol_param">協定參數</string>
<string name="protocol_param">通訊協定參數</string>
<string name="obfs">混淆</string>
<string name="obfs_param">混淆參數</string>
<string name="uuid">使用者 ID</string>
@@ -88,29 +88,29 @@
<string name="on">啟用</string>
<string name="off">停用</string>
<string name="search_apps">搜尋…</string>
<string name="scanning">掃描中…</string>
<string name="scanning">正在掃描…</string>
<string name="invert_selections">反向選取</string>
<string name="clear_selections">清除選取</string>
<string name="bypass_apps">略過</string>
<string name="show_system_apps">顯示系統應用</string>
<string name="show_system_apps">顯示系統應用程式</string>
<string name="auto_connect">自動連線</string>
<string name="auto_connect_summary">如果代理在開機或應用更新前正在行則自動</string>
<string name="direct_boot_aware">允許與解鎖前啓動</string>
<string name="direct_boot_aware_summary">您選取的設定檔將受到較少保護</string>
<string name="auto_connect_summary">如果代理在開機或應用更新前正在行則自動</string>
<string name="direct_boot_aware">允許螢幕鎖定時切換</string>
<string name="direct_boot_aware_summary">您選取的設定檔資訊將受到較少保護</string>
<!-- notification category -->
<string name="service_vpn">VPN 服務</string>
<string name="service_proxy">代理服務</string>
<string name="forward_success">SagerNet 已啟動。</string>
<string name="invalid_server">伺服器名稱無效</string>
<string name="stop">停止</string>
<string name="stopping">關閉中…</string>
<string name="stopping">正在關閉…</string>
<string name="vpn_error">%s</string>
<string name="vpn_permission_denied">建立 VPN 服務的權限被拒</string>
<string name="reboot_required">無法啟動 VPN 服務,您可能需要重新啟動您的裝置。</string>
<!-- alert category -->
<string name="profile_empty">請選一個設定檔</string>
<string name="profile_empty">請選一個設定檔</string>
<string name="connect">連線</string>
<string name="clipboard_empty">剪貼簿為空</string>
<string name="clipboard_empty">剪貼簿為空</string>
<!-- menu category -->
<string name="settings">設定</string>
<string name="edit">編輯</string>
@@ -136,25 +136,25 @@
<string name="add_profile_methods_scan_qr_code">掃描 QR 碼</string>
<string name="add_profile_methods_manual_settings">手動設定</string>
<plurals name="removed">
<item quantity="other">除 %d </item>
<item quantity="other">除 %d 個項目</item>
</plurals>
<plurals name="added">
<item quantity="other">已新增 %d 個配置</item>
<item quantity="other">已新增 %d 個代理</item>
</plurals>
<string name="undo">復原</string>
<!-- tasker -->
<!-- status -->
<string name="connecting">連線中…</string>
<string name="connecting">正在連線…</string>
<string name="vpn_connected">已連線,輕觸以檢查連線能力</string>
<string name="not_connected">未連線</string>
<!-- subscriptions -->
<string name="subscriptions">訂閱</string>
<string name="cleartext_http_warning">純文字 HTTP 流量並不安全</string>
<string name="error_title">錯誤</string>
<string name="no_proxies_found">此連不包含任何代理</string>
<string name="no_proxies_found">此連不包含任何代理</string>
<!-- plugin -->
<string name="plugin">外掛程式</string>
<string name="plugin_configure">設定…</string>
<string name="plugin_configure">設定…</string>
<string name="plugin_disabled">已停用</string>
<string name="plugin_unknown">未知外掛程式 %s</string>
<string name="plugin_untrusted">警告:此外掛程式並非來自可靠的可信來源。</string>
@@ -164,11 +164,11 @@
<string name="yes"></string>
<string name="no"></string>
<string name="apply">套用</string>
<string name="license">授權協定</string>
<string name="document"></string>
<string name="license">授權條款</string>
<string name="document"></string>
<string name="early_data_header_name">前置資料標頭</string>
<string name="certificates">憑證(鏈結)</string>
<string name="alpn">應用層協定協商</string>
<string name="certificates">憑證</string>
<string name="alpn">應用層通訊協定協商</string>
<string name="grpc_service_name">gRPC 服務名稱</string>
<string name="http_path">HTTP 路徑</string>
<string name="http_host">HTTP 主機</string>
@@ -214,7 +214,7 @@
<string name="route_proxy">代理</string>
<string name="route_bypass">繞過</string>
<string name="route_block">封鎖</string>
<string name="route_profile">設定檔…</string>
<string name="route_profile">設定檔…</string>
<string name="empty_route">空白路由規則</string>
<string name="empty_route_notice">在儲存前設定一些規則</string>
<string name="route_bypass_domain">%s 網域規則</string>
@@ -236,7 +236,7 @@
<string name="mux_concurrency">多工器同時連線數目</string>
<string name="tcp_keep_alive_interval">TCP 保持連線傳送間隔</string>
<string name="service_failed">失敗:</string>
<string name="select_profile">設定檔</string>
<string name="select_profile">設定檔</string>
<string name="proxy_chain">代理鏈結</string>
<string name="custom_config">客製化設定檔</string>
<string name="balancer">負載平衡器</string>
@@ -269,7 +269,7 @@
<string name="auto">自動</string>
<string name="enable_log">啟用記錄檔</string>
<string name="enable_log_sum">用於除錯用途</string>
<string name="list">列表</string>
<string name="list">清單</string>
<string name="random">隨機</string>
<string name="api_port">API 連接埠</string>
<string name="probe_interval">負載平衡器觀測間隔</string>
@@ -319,10 +319,10 @@
<string name="ooc_subscription_token_invalid">無效的 OOCv1 權杖</string>
<string name="update_subscription_warning">代理尚未連線,您真的希望繼續更新嗎?</string>
<string name="ooc_warning">警告</string>
<string name="ooc_missing_protocol">此訂閱需 %s 協定支援,但其未被安裝,不支援的設定檔將被忽略。</string>
<string name="ooc_missing_protocol">此訂閱需支援 %s 通訊協定,但其未被安裝,不支援的設定檔將被忽略。</string>
<string name="service_subscription">訂閱更新服務</string>
<string name="subscription_update">訂閱更新</string>
<string name="subscription_update_message">更新 %s </string>
<string name="subscription_update_message">正在更新 %s …</string>
<string name="group_filter">篩選</string>
<string name="subscription_used">已用 %s</string>
<string name="subscription_traffic">已用 %s / 剩餘 %s</string>
@@ -350,10 +350,10 @@
<string name="copy_failed">複製失敗。</string>
<string name="copy_success">成功複製!</string>
<string name="create_rule">建立規則</string>
<string name="open_market">開應用商店</string>
<string name="open_settings">開設定</string>
<string name="open_app">開應用程式</string>
<string name="copy_package_name">複製軟體包名稱</string>
<string name="open_market">應用商店</string>
<string name="open_settings">設定</string>
<string name="open_app">應用程式</string>
<string name="copy_package_name">複製應用程式套件名稱</string>
<string name="copy_label">複製名稱</string>
<string name="udp_connections">%d 個 UDP 連線</string>
<string name="tcp_connections">%d 個 TCP 連線</string>
@@ -384,31 +384,31 @@
<string name="wireguard_psk">節點預先共用金鑰</string>
<string name="warp_license">CloudFlare Warp 是一個免費的 WireGuard VPN 提供者。使用此服務表示您同意其服務條款。</string>
<string name="warp_generate">產生設定檔</string>
<string name="generating">正在產生…</string>
<string name="generating">正在產生…</string>
<string name="pcap_notice">Pcap 檔案將被儲存至 %s</string>
<string name="profile_traffic_statistics">設定檔流量統計資料</string>
<string name="resolve_destination_summary">如果目的地位址是一個網域,則基於 IPv6 策略傳出。</string>
<string name="destination_override_summary">使用被偵測到的網域複寫目的地位址,而不是僅用於路由</string>
<string name="route_opt_block_analysis">封鎖分析</string>
<string name="route_play_store">%s 谷歌Play商店規則</string>
<string name="route_play_store">%s Google Play商店規則</string>
<string name="naive_insecure_concurrency">不安全並發</string>
<string name="stun_test">NAT 行為尋找</string>
<string name="naive_insecure_concurrency_summary">使用N個並發的隧道能使網路條件較差时更加可用。但數量越多越易被偵測安全性越低。由於本項目致力於面對流量分析的安全性以不安全的方式使用違背了其初忠。
\n
\n如一定要使用請先嘗試 N=2觀察其是否解決了您的問題。強烈反對於此使用多於4個隧道。</string>
<string name="stun_attest_loading">這可能需要數分鐘…</string>
<string name="stun_test_summary">使用 STUN 確定戶端的 NAT 映射行為和 RFC 5780 中定義的 NAT 過濾行為。</string>
<string name="stun_test_summary">使用 STUN 確定戶端的 NAT 映射行為和 RFC 5780 中定義的 NAT 篩選行為。</string>
<string name="start">開始</string>
<string name="backup">備份</string>
<string name="backup_rules">路由規則</string>
<string name="invalid_backup_file">無效的備份文件</string>
<string name="invalid_backup_file">無效的備份</string>
<string name="tools_network">網路</string>
<string name="backup_settings"></string>
<string name="backup_import"></string>
<string name="backup_import_summary">入將覆蓋現有數據</string>
<string name="backup_importing">正在入…</string>
<string name="backup_groups_and_configurations">分組和配置</string>
<string name="backup_summary">如果路由規則不與配置一起備份,則自定義出站將丟失。</string>
<string name="backup_not_file">不是一個備份文件,預計 .json但 %s</string>
<string name="packet_encoding">包編碼</string>
</resources>
<string name="backup_settings"></string>
<string name="backup_import"></string>
<string name="backup_import_summary">入將覆蓋現有資料</string>
<string name="backup_importing">正在入…</string>
<string name="backup_groups_and_configurations">分組和設定檔</string>
<string name="backup_summary">如果路由規則不與設定檔一起備份,則自出站將丟失。</string>
<string name="backup_not_file">不是一個備份檔案,預計 .json但 %s</string>
<string name="packet_encoding">包編碼</string>
</resources>

View File

@@ -31,7 +31,7 @@ It is written in C++ with portability in mind, and we're actively working on bui
<a href="#building">Building</a> |
<a href="#support">Support</a> |
<a href="#license">License</a> |
<a href="https://gitlab.com/suyu-emu/suyu/-/pipelines">Pipelines</a>
<a href="https://git.suyu.dev/suyu/suyu/actions">Pipelines</a>
</p>
## Status
@@ -46,22 +46,22 @@ This project is completely free and open source, and anyone can contribute to he
Most of the development happens on GitLab. For development discussion, please join us on [Discord](https://discord.gg/suyu).
If you want to contribute, please take a look at the [Contributor's Guide](https://gitlab.com/suyu-emu/suyu/-/wikis/Contributing) and [Developer Information](https://gitlab.com/suyu-emu/suyu/-/wikis/Developer-Information).
If you want to contribute, please take a look at the [Contributor's Guide](https://git.suyu.dev/suyu/suyu/wiki/Contributing) and [Developer Information](https://git.suyu.dev/suyu/suyu/wiki/Developer-Information).
You can also contact any of the developers on Discord to learn more about the current state of suyu.
## Downloads
* __Windows__: [Releases](https://gitlab.com/suyu-emu/suyu/-/releases)
* __Linux__: [Releases](https://gitlab.com/suyu-emu/suyu/-/releases)
* __macOS__: [Releases](https://gitlab.com/suyu-emu/suyu/-/releases)
* __Android__: [Releases](https://gitlab.com/suyu-emu/suyu/-/releases)
* __Windows__: [Releases](https://git.suyu.dev/suyu/suyu/releases)
* __Linux__: [Releases](https://git.suyu.dev/suyu/suyu/releases)
* __macOS__: [Releases](https://git.suyu.dev/suyu/suyu/releases)
* __Android__: [Releases](https://git.suyu.dev/suyu/suyu/releases)
We have official builds [here.](https://gitlab.com/suyu-emu/suyu/-/releases) If any website or person is claiming to have a build for suyu, take that with a grain of salt.
We have official builds [here.](https://git.suyu.dev/suyu/suyu/releases) If any website or person is claiming to have a build for suyu, take that with a grain of salt.
## Building
* __Windows__: [Wiki page](https://gitlab.com/suyu-emu/suyu/-/wikis/Building-for-Windows)
* __Linux__: [Wiki page](https://gitlab.com/suyu-emu/suyu/-/wikis/Building-for-Linux)
* __Windows__: [Wiki page](https://git.suyu.dev/suyu/suyu/wiki/Building-for-Windows)
* __Linux__: [Wiki page](https://git.suyu.dev/suyu/suyu/wiki/Building-for-Linux)

View File

@@ -590,6 +590,7 @@ from .facebook import (
FacebookReelIE,
FacebookAdsIE,
)
from .fathom import FathomIE
from .fancode import (
FancodeVodIE,
FancodeLiveIE

View File

@@ -0,0 +1,54 @@
import json
from .common import InfoExtractor
from ..utils import (
extract_attributes,
float_or_none,
get_element_html_by_id,
parse_iso8601,
)
from ..utils.traversal import traverse_obj
class FathomIE(InfoExtractor):
_VALID_URL = r'https?://(?:www\.)?fathom\.video/share/(?P<id>[^/?#&]+)'
_TESTS = [{
'url': 'https://fathom.video/share/G9mkjkspnohVVZ_L5nrsoPycyWcB8y7s',
'md5': '0decd5343b8f30ae268625e79a02b60f',
'info_dict': {
'id': '47200596',
'ext': 'mp4',
'title': 'eCom Inucbator - Coaching Session',
'duration': 8125.380507,
'timestamp': 1699048914,
'upload_date': '20231103',
},
}, {
'url': 'https://fathom.video/share/mEws3bybftHL2QLymxYEDeE21vtLxGVm',
'md5': '4f5cb382126c22d1aba8a939f9c49690',
'info_dict': {
'id': '46812957',
'ext': 'mp4',
'title': 'Jon, Lawrence, Neman chat about practice',
'duration': 3571.517847,
'timestamp': 1698933600,
'upload_date': '20231102',
},
}]
def _real_extract(self, url):
display_id = self._match_id(url)
webpage = self._download_webpage(url, display_id)
props = traverse_obj(
get_element_html_by_id('app', webpage), ({extract_attributes}, 'data-page', {json.loads}, 'props'))
video_id = str(props['call']['id'])
return {
'id': video_id,
'formats': self._extract_m3u8_formats(props['call']['video_url'], video_id, 'mp4'),
**traverse_obj(props, {
'title': ('head', 'title', {str}),
'duration': ('duration', {float_or_none}),
'timestamp': ('call', 'started_at', {parse_iso8601}),
}),
}

View File

@@ -15,35 +15,35 @@ class XVideosIE(InfoExtractor):
_VALID_URL = r'''(?x)
https?://
(?:
(?:[^/]+\.)?xvideos2?\.com/video|
(?:www\.)?xvideos\.es/video|
(?:[^/]+\.)?xvideos2?\.com/video\.?|
(?:www\.)?xvideos\.es/video\.?|
(?:www|flashservice)\.xvideos\.com/embedframe/|
static-hw\.xvideos\.com/swf/xv-player\.swf\?.*?\bid_video=
)
(?P<id>[0-9]+)
(?P<id>[0-9a-z]+)
'''
_TESTS = [{
'url': 'https://www.xvideos.com/video4588838/motorcycle_guy_cucks_influencer_steals_his_gf',
'md5': '14cea69fcb84db54293b1e971466c2e1',
'url': 'http://xvideos.com/video.ucuvbkfda4e/a_beautiful_red-haired_stranger_was_refused_but_still_came_to_my_room_for_sex',
'md5': '396255a900a6bddb3e98985f0b86c3fd',
'info_dict': {
'id': '4588838',
'id': 'ucuvbkfda4e',
'ext': 'mp4',
'title': 'Motorcycle Guy Cucks Influencer, Steals his GF',
'duration': 108,
'title': 'A Beautiful Red-Haired Stranger Was Refused, But Still Came To My Room For Sex',
'duration': 1238,
'age_limit': 18,
'thumbnail': r're:^https://img-hw.xvideos-cdn.com/.+\.jpg',
'thumbnail': r're:^https://cdn\d+-pic.xvideos-cdn.com/.+\.jpg',
}
}, {
# Broken HLS formats
'url': 'https://www.xvideos.com/video65982001/what_s_her_name',
'md5': 'b82d7d7ef7d65a84b1fa6965f81f95a5',
'md5': '56742808292c8fa1418e4538c262c58b',
'info_dict': {
'id': '65982001',
'ext': 'mp4',
'title': 'what\'s her name?',
'duration': 120,
'age_limit': 18,
'thumbnail': r're:^https://img-hw.xvideos-cdn.com/.+\.jpg',
'thumbnail': r're:^https://cdn\d+-pic.xvideos-cdn.com/.+\.jpg',
}
}, {
'url': 'https://flashservice.xvideos.com/embedframe/4588838',
@@ -90,6 +90,18 @@ class XVideosIE(InfoExtractor):
}, {
'url': 'https://de.xvideos.com/video4588838/biker_takes_his_girl',
'only_matching': True
}, {
'url': 'https://flashservice.xvideos.com/embedframe/ucuvbkfda4e',
'only_matching': True,
}, {
'url': 'https://www.xvideos.com/embedframe/ucuvbkfda4e',
'only_matching': True,
}, {
'url': 'http://static-hw.xvideos.com/swf/xv-player.swf?id_video=ucuvbkfda4e',
'only_matching': True,
}, {
'url': 'https://xvideos.es/video.ucuvbkfda4e/a_beautiful_red-haired_stranger_was_refused_but_still_came_to_my_room_for_sex',
'only_matching': True
}]
def _real_extract(self, url):