Skip to content

Commit 6b9c88d

Browse files
committed
Add TheRun.gg Integration
LiveSplit One now supports integration with [therun.gg](https://therun.gg) for live run tracking and automatic stats uploading. Changes: - **TheRun.gg settings**: A new "TheRun.gg Integration" section in the Network settings lets users enter their upload key (obtained from [therun.gg/livesplit](https://therun.gg/livesplit)) and toggle live tracking and stats uploading independently. - **Password field**: The upload key is masked by default with a visibility toggle button. Chrome's password save prompt is suppressed via `autoComplete="off"`. - **TheRunClient integration**: A `TheRunClient` is created from the settings and receives timer events (`handleEvent`) for live tracking and stats uploading. - **Settings persistence**: The three therun.gg fields are stored as a single `TheRunGgSettings` object in IndexedDB. - **Localization**: All therun.gg labels translated in all supported languages. Changelog (en): LiveSplit One now supports [TheRun.gg](https://therun.gg) integration! Enter your upload key in the Network settings to enable live run tracking and automatic stats uploading. Changelog (de): LiveSplit One unterstützt jetzt die Integration mit [TheRun.gg](https://therun.gg)! Gib deinen Upload-Schlüssel in den Netzwerk-Einstellungen ein, um Live-Run-Tracking und automatisches Hochladen von Statistiken zu aktivieren. Changelog (fr): LiveSplit One prend désormais en charge l'intégration avec [TheRun.gg](https://therun.gg) ! Entrez votre clé d'envoi dans les paramètres réseau pour activer le suivi en direct et l'envoi automatique des statistiques. Changelog (nl): LiveSplit One ondersteunt nu integratie met [TheRun.gg](https://therun.gg)! Voer je uploadsleutel in bij de netwerkinstellingen om live run-tracking en automatisch uploaden van statistieken in te schakelen. Changelog (es): ¡LiveSplit One ahora soporta la integración con [TheRun.gg](https://therun.gg)! Introduce tu clave de subida en la configuración de red para activar el seguimiento en vivo y la subida automática de estadísticas. Changelog (it): LiveSplit One ora supporta l'integrazione con [TheRun.gg](https://therun.gg)! Inserisci la tua chiave di upload nelle impostazioni di rete per abilitare il tracciamento live e il caricamento automatico delle statistiche. Changelog (pt): O LiveSplit One agora suporta integração com o [TheRun.gg](https://therun.gg)! Introduza a sua chave de upload nas definições de rede para ativar o rastreamento ao vivo e o envio automático de estatísticas. Changelog (pt-BR): O LiveSplit One agora suporta integração com o [TheRun.gg](https://therun.gg)! Insira sua chave de upload nas configurações de rede para ativar o rastreamento ao vivo e o envio automático de estatísticas. Changelog (pl): LiveSplit One obsługuje teraz integrację z [TheRun.gg](https://therun.gg)! Wprowadź swój klucz przesyłania w ustawieniach sieci, aby włączyć śledzenie biegu na żywo i automatyczne przesyłanie statystyk. Changelog (ru): LiveSplit One теперь поддерживает интеграцию с [TheRun.gg](https://therun.gg)! Введите ключ загрузки в настройках сети, чтобы включить отслеживание забегов в реальном времени и автоматическую загрузку статистики. Changelog (ja): LiveSplit One が [TheRun.gg](https://therun.gg) との連携に対応しました!ネットワーク設定でアップロードキーを入力すると、ランのライブ追跡と統計の自動アップロードが有効になります。 Changelog (ko): LiveSplit One이 이제 [TheRun.gg](https://therun.gg) 통합을 지원합니다! 네트워크 설정에서 업로드 키를 입력하면 런 실시간 추적과 통계 자동 업로드를 활성화할 수 있습니다. Changelog (zh-Hans): LiveSplit One 现已支持 [TheRun.gg](https://therun.gg) 集成!在网络设置中输入上传密钥即可启用实时跑图追踪和统计数据自动上传。 Changelog (zh-Hant): LiveSplit One 現已支持 [TheRun.gg](https://therun.gg) 集成!在網路設定中輸入上傳密鑰即可啟用即時跑圖追蹤和統計資料自動上傳。
1 parent b658ded commit 6b9c88d

22 files changed

Lines changed: 326 additions & 25 deletions

buildCore.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ execSync(`cargo ${toolchain} run`, {
6363
});
6464

6565
execSync(
66-
`cargo ${toolchain} rustc -p livesplit-core-capi --crate-type cdylib --features wasm-web,web-rendering --target ${target} ${cargoFlags}`,
66+
`cargo ${toolchain} rustc -p livesplit-core-capi --crate-type cdylib --features wasm-web,web-rendering,therun-gg --target ${target} ${cargoFlags}`,
6767
{
6868
cwd: "livesplit-core",
6969
stdio: "inherit",

src-tauri/Cargo.lock

Lines changed: 20 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/localization/chinese-simplified.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ export function resolveChineseSimplified(text: Label): string {
3636
case Label.ServerConnection: return "服务器连接";
3737
case Label.ServerConnectionDescription: return "允许你连接到 WebSocket 服务器,通过发送各种命令来控制计时器。目前这些命令是原版 LiveSplit 支持命令的子集。";
3838
case Label.ServerConnectionExperimental: return "此功能为实验性,协议未来可能会更改。";
39+
case Label.TheRunGgIntegration: return "TheRun.gg 集成";
40+
case Label.TheRunGgIntegrationDescription: return "与 therun.gg 集成,用于实时追踪跑图并自动上传统计数据。使用此功能需要 therun.gg 的上传密钥。";
41+
case Label.TheRunGgLiveTracking: return "实时追踪";
42+
case Label.TheRunGgLiveTrackingDescription: return "启用后,每次分段操作后都会将实时分段数据发送到 therun.gg,从而可以在网站上实时追踪跑图。";
43+
case Label.TheRunGgStatsUploading: return "统计上传";
44+
case Label.TheRunGgStatsUploadingDescription: return "启用后,每次重置或完成跑图后都会将分段文件上传到 therun.gg,自动将你的跑图与网站同步。";
3945
case Label.HotkeyAlreadyInUse: return "该热键已被使用。";
4046
case Label.Start: return "开始";
4147
case Label.Resume: return "继续";

src/localization/dutch.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ export function resolveDutch(text: Label): string {
3636
case Label.ServerConnection: return "Serververbinding";
3737
case Label.ServerConnectionDescription: return "Staat toe om verbinding te maken met een WebSocket-server die de timer kan besturen door verschillende opdrachten te verzenden. De opdrachten zijn momenteel een subset van de opdrachten die de originele LiveSplit ondersteunt.";
3838
case Label.ServerConnectionExperimental: return "Deze functie is experimenteel en het protocol zal waarschijnlijk in de toekomst veranderen.";
39+
case Label.TheRunGgIntegration: return "TheRun.gg-integratie";
40+
case Label.TheRunGgIntegrationDescription: return "Integreert met therun.gg voor live run-tracking en automatisch uploaden van statistieken. Je hebt een uploadsleutel van therun.gg nodig om deze functie te gebruiken.";
41+
case Label.TheRunGgLiveTracking: return "Live tracking";
42+
case Label.TheRunGgLiveTrackingDescription: return "Wanneer ingeschakeld, worden live splitgegevens na elke splitactie naar therun.gg gestuurd, zodat de run live op de website gevolgd kan worden.";
43+
case Label.TheRunGgStatsUploading: return "Statistieken uploaden";
44+
case Label.TheRunGgStatsUploadingDescription: return "Wanneer ingeschakeld, wordt het splitsbestand na elke reset of voltooide run naar therun.gg geüpload, zodat je runs automatisch met de site worden gesynchroniseerd.";
3945
case Label.HotkeyAlreadyInUse: return "De sneltoets is al in gebruik.";
4046
case Label.Start: return "Start";
4147
case Label.Resume: return "Hervatten";

src/localization/english.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ export function resolveEnglish(text: Label): string {
3636
case Label.ServerConnection: return "Server Connection";
3737
case Label.ServerConnectionDescription: return "Allows you to connect to a WebSocket server that can control the timer by sending various commands. The commands are currently a subset of the commands the original LiveSplit supports.";
3838
case Label.ServerConnectionExperimental: return "This feature is experimental and the protocol will likely change in the future.";
39+
case Label.TheRunGgIntegration: return "TheRun.gg Integration";
40+
case Label.TheRunGgIntegrationDescription: return "Integrates with therun.gg for live run tracking and automatic stats uploading. You need an upload key from therun.gg to use this feature.";
41+
case Label.TheRunGgLiveTracking: return "Live Tracking";
42+
case Label.TheRunGgLiveTrackingDescription: return "When enabled, live split data is sent to therun.gg after every split action, enabling live run tracking on the website.";
43+
case Label.TheRunGgStatsUploading: return "Stats Uploading";
44+
case Label.TheRunGgStatsUploadingDescription: return "When enabled, the splits file is uploaded to therun.gg after every reset or finished run, automatically syncing your runs with the site.";
3945
case Label.HotkeyAlreadyInUse: return "The hotkey is already in use.";
4046
case Label.Start: return "Start";
4147
case Label.Resume: return "Resume";

src/localization/french.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ export function resolveFrench(text: Label): string {
3636
case Label.ServerConnection: return "Connexion au serveur";
3737
case Label.ServerConnectionDescription: return "Permet de se connecter à un serveur WebSocket qui peut contrôler le minuteur en envoyant diverses commandes. Les commandes sont actuellement un sous‑ensemble de celles que le LiveSplit original prend en charge.";
3838
case Label.ServerConnectionExperimental: return "Cette fonctionnalité est expérimentale et le protocole changera probablement à l’avenir.";
39+
case Label.TheRunGgIntegration: return "Intégration TheRun.gg";
40+
case Label.TheRunGgIntegrationDescription: return "S’intègre à therun.gg pour le suivi en direct des runs et l’envoi automatique des statistiques. Vous avez besoin d’une clé d’envoi therun.gg pour utiliser cette fonctionnalité.";
41+
case Label.TheRunGgLiveTracking: return "Suivi en direct";
42+
case Label.TheRunGgLiveTrackingDescription: return "Lorsqu’il est activé, les données de split en direct sont envoyées à therun.gg après chaque action de split, ce qui permet un suivi en direct sur le site.";
43+
case Label.TheRunGgStatsUploading: return "Envoi des statistiques";
44+
case Label.TheRunGgStatsUploadingDescription: return "Lorsqu’il est activé, le fichier de splits est envoyé à therun.gg après chaque réinitialisation ou run terminée, ce qui synchronise automatiquement vos runs avec le site.";
3945
case Label.HotkeyAlreadyInUse: return "Le raccourci est déjà utilisé.";
4046
case Label.Start: return "Démarrer";
4147
case Label.Resume: return "Reprendre";

src/localization/german.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ export function resolveGerman(text: Label): string {
3636
case Label.ServerConnection: return "Serververbindung";
3737
case Label.ServerConnectionDescription: return "Ermöglicht die Verbindung zu einem WebSocket‑Server, der den Timer durch das Senden verschiedener Befehle steuern kann. Die Befehle sind derzeit eine Teilmenge der Befehle, die das ursprüngliche LiveSplit unterstützt.";
3838
case Label.ServerConnectionExperimental: return "Diese Funktion ist experimentell und das Protokoll wird sich wahrscheinlich in Zukunft ändern.";
39+
case Label.TheRunGgIntegration: return "TheRun.gg-Integration";
40+
case Label.TheRunGgIntegrationDescription: return "Integriert sich mit therun.gg für Live-Run-Tracking und automatisches Hochladen von Statistiken. Für diese Funktion benötigst du einen Upload-Schlüssel von therun.gg.";
41+
case Label.TheRunGgLiveTracking: return "Live-Tracking";
42+
case Label.TheRunGgLiveTrackingDescription: return "Wenn aktiviert, werden Live-Split-Daten nach jeder Split-Aktion an therun.gg gesendet, sodass der Run live auf der Website verfolgt werden kann.";
43+
case Label.TheRunGgStatsUploading: return "Statistik-Upload";
44+
case Label.TheRunGgStatsUploadingDescription: return "Wenn aktiviert, wird die Splits-Datei nach jedem Reset oder abgeschlossenen Run zu therun.gg hochgeladen und deine Runs werden automatisch mit der Website synchronisiert.";
3945
case Label.HotkeyAlreadyInUse: return "Der Hotkey wird bereits verwendet.";
4046
case Label.Start: return "Start";
4147
case Label.Resume: return "Fortsetzen";

src/localization/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@ export enum Label {
4949
ServerConnection,
5050
ServerConnectionDescription,
5151
ServerConnectionExperimental,
52+
TheRunGgIntegration,
53+
TheRunGgIntegrationDescription,
54+
TheRunGgLiveTracking,
55+
TheRunGgLiveTrackingDescription,
56+
TheRunGgStatsUploading,
57+
TheRunGgStatsUploadingDescription,
5258
HotkeyAlreadyInUse,
5359
Start,
5460
Resume,

src/localization/italian.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ export function resolveItalian(text: Label): string {
3636
case Label.ServerConnection: return "Connessione server";
3737
case Label.ServerConnectionDescription: return "Consente di connettersi a un server WebSocket che può controllare il timer inviando vari comandi. I comandi sono attualmente un sottoinsieme di quelli supportati dal LiveSplit originale.";
3838
case Label.ServerConnectionExperimental: return "Questa funzionalità è sperimentale e il protocollo probabilmente cambierà in futuro.";
39+
case Label.TheRunGgIntegration: return "Integrazione TheRun.gg";
40+
case Label.TheRunGgIntegrationDescription: return "Si integra con therun.gg per il tracciamento live delle run e il caricamento automatico delle statistiche. Per usare questa funzionalità è necessaria una chiave di upload di therun.gg.";
41+
case Label.TheRunGgLiveTracking: return "Tracciamento live";
42+
case Label.TheRunGgLiveTrackingDescription: return "Quando è attivo, i dati live degli split vengono inviati a therun.gg dopo ogni azione di split, consentendo il tracciamento in tempo reale sul sito.";
43+
case Label.TheRunGgStatsUploading: return "Caricamento statistiche";
44+
case Label.TheRunGgStatsUploadingDescription: return "Quando è attivo, il file degli split viene caricato su therun.gg dopo ogni reset o run completata, sincronizzando automaticamente le tue run con il sito.";
3945
case Label.HotkeyAlreadyInUse: return "La scorciatoia è già in uso.";
4046
case Label.Start: return "Avvia";
4147
case Label.Resume: return "Riprendi";

0 commit comments

Comments
 (0)