Flutter Transmission RPC控制插件dart_transmission_rpc的使用
Flutter Transmission RPC 控制插件 dart_transmission_rpc
的使用
概述
dart_transmission_rpc
是一个用 Dart 实现的 Transmission RPC 客户端,支持 rpc-version>=14
。更多详细信息可以查看 Transmission/rpc-spec.md。
功能
会话功能
- ✅ session-get
- ✅ session-set
- ✅ session-stats
- ✅ blocklist-update
- ✅ port-test
- ✅ session-close
- ✅ queue-move-top
- ✅ queue-move-up
- ✅ queue-move-down
- ✅ queue-move-bottom
- ✅ free-space
- ✅ group-set
- ✅ group-get
种子功能
- ✅ torrent-start
- ✅ torrent-start-now
- ✅ torrent-stop
- ✅ torrent-verify
- ✅ torrent-reannounce
- ✅ torrent-set
- ✅ torrent-get
- ✅ torrent-add
- ✅ torrent-remove
- ✅ torrent-set-location
- ✅ torrent-rename-path
开始使用
添加依赖
使用 dart pub add
命令
dart pub add dart_transmission_rpc
或者手动添加到 pubspec.yaml
dependencies:
...
dart_transmission_rpc: any # 或指定版本
然后运行 dart pub get
或 flutter pub get
。
使用示例
初始化客户端
import 'package:dart_transmission_rpc/client.dart';
final client = TransmissionRpcClient(
username: "admin",
password: "123456"
);
await client.init();
获取会话信息
// 获取会话信息
final sessionInfo = await client.sessionGet(null);
print(sessionInfo.param?.version);
获取种子信息
// 获取种子信息
final torrentInfo = await client.torrentGet([
TorrentGetArgument.name,
TorrentGetArgument.id,
TorrentGetArgument.hashString,
TorrentGetArgument.addedDate,
TorrentGetArgument.pieces,
]);
print(torrentInfo.param?.torrents);
添加种子
// 添加种子
await client.torrentAdd(
TorrentAddRequestArgs(
fileInfo: TorrentAddFileInfo.byMetainfo(
io.File("demo/demo_test.torrent").readAsBytesSync()),
downloadDir: "/downloads/complete",
labels: ["test", "test1"],
),
);
// 或通过磁力链接添加种子
await client.torrentAdd(
TorrentAddRequestArgs(
fileInfo: TorrentAddFileInfo.byFilename(
"magnet:?xt=urn:btih:cce82738e2f9217c5631549b0b8c1dfe12331503&dn=debian-12.5.0-i386-netinst.iso"),
downloadDir: "/downloads",
labels: ["test", "test1", "test2"],
),
);
其他操作
启动种子
await client.torrentStart(const TorrentIds([TorrentId(id: 2)]));
停止种子
await client.torrentStop(const TorrentIds([TorrentId(id: 2)]));
验证种子
await client.torrentVerify(const TorrentIds([TorrentId(id: 2)]));
重新公告
await client.torrentReannounce(const TorrentIds([TorrentId(id: 2)]));
设置种子位置
final result1 = await client.torrentAdd(
TorrentAddRequestArgs(
fileInfo: TorrentAddFileInfo.byMetainfo(
io.File("demo/demo_test.torrent").readAsBytesSync()),
downloadDir: "/downloads/complete",
),
);
final ids = TorrentIds([TorrentId(id: result1.param!.torrent!.id.id!.toInt())]);
await client.torrentSetLocation(
TorrentSetLocationArgs(ids: ids, location: "/downloads"));
重命名路径
final result1 = await client.torrentAdd(
TorrentAddRequestArgs(
fileInfo: TorrentAddFileInfo.byMetainfo(
io.File("demo/demo_test.torrent").readAsBytesSync()),
downloadDir: "/downloads/complete",
),
);
final ids = TorrentIds([TorrentId(id: result1.param!.torrent!.id.id!.toInt())]);
await client.torrentRenamePath(TorrentRenamePathArgs(
id: ids.first,
oldPath: "debian-12.5.0-i386-netinst.iso",
newName: "debian-12.5.0-i386-netinst.rename.iso"));
完整示例代码
import 'dart:io' as io;
import 'package:dart_transmission_rpc/client.dart';
Future<void> main() async {
final client = TransmissionRpcClient(
username: "admin",
password: "123456"
);
await client.init();
// 获取会话信息
final sessionInfo = await client.sessionGet(null);
print(sessionInfo.param?.version);
// 获取种子信息
final torrentInfo = await client.torrentGet([
TorrentGetArgument.name,
TorrentGetArgument.id,
TorrentGetArgument.hashString,
TorrentGetArgument.addedDate,
TorrentGetArgument.pieces,
]);
print(torrentInfo.param?.torrents);
// 添加种子
await client.torrentAdd(
TorrentAddRequestArgs(
fileInfo: TorrentAddFileInfo.byMetainfo(
io.File("demo/demo_test.torrent").readAsBytesSync()),
downloadDir: "/downloads/complete",
labels: ["test", "test1"],
),
);
// 通过磁力链接添加种子
await client.torrentAdd(
TorrentAddRequestArgs(
fileInfo: TorrentAddFileInfo.byFilename(
"magnet:?xt=urn:btih:cce82738e2f9217c5631549b0b8c1dfe12331503&dn=debian-12.5.0-i386-netinst.iso"),
downloadDir: "/downloads",
labels: ["test", "test1", "test2"],
),
);
}
更多关于Flutter Transmission RPC控制插件dart_transmission_rpc的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Transmission RPC控制插件dart_transmission_rpc的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 dart_transmission_rpc
插件来控制 Transmission BitTorrent 客户端的示例代码。这个插件允许你通过 RPC (Remote Procedure Call) 接口与 Transmission 客户端进行交互。
首先,确保你已经在 Flutter 项目中添加了 dart_transmission_rpc
依赖。你可以在 pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
dart_transmission_rpc: ^最新版本号 # 请替换为实际的最新版本号
然后运行 flutter pub get
来获取依赖。
下面是一个示例代码,展示如何使用 dart_transmission_rpc
来获取 Transmission 客户端的会话状态:
import 'package:flutter/material.dart';
import 'package:dart_transmission_rpc/dart_transmission_rpc.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
TransmissionClient? _client;
SessionInfo? _sessionInfo;
String _status = "Connecting...";
@override
void initState() {
super.initState();
connectToTransmission();
}
void connectToTransmission() async {
// 替换为你的 Transmission RPC 地址、端口、用户名和密码
const rpcUrl = "http://your-transmission-rpc-address:9091/rpc";
const rpcUsername = "your-rpc-username";
const rpcPassword = "your-rpc-password";
try {
_client = await TransmissionClient.connect(rpcUrl, rpcUsername, rpcPassword);
_sessionInfo = await _client!.getSessionInfo();
setState(() {
_status = "Connected!";
});
} catch (e) {
setState(() {
_status = "Failed to connect: ${e.message}";
});
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Transmission RPC Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
_status,
style: TextStyle(fontSize: 24),
),
if (_sessionInfo != null) {
Text(
"Download Speed: ${_sessionInfo!.downloadSpeed!} KB/s",
style: TextStyle(fontSize: 18),
),
Text(
"Upload Speed: ${_sessionInfo!.uploadSpeed!} KB/s",
style: TextStyle(fontSize: 18),
),
Text(
"Active Torrents: ${_sessionInfo!.activeTorrentCount!}",
style: TextStyle(fontSize: 18),
),
}
],
),
),
),
);
}
@override
void dispose() {
_client?.close();
super.dispose();
}
}
解释
- 依赖导入:首先,我们导入了
dart_transmission_rpc
包。 - 连接 Transmission:在
initState
方法中,我们尝试连接到 Transmission RPC 服务器。连接成功后,我们获取会话信息并更新 UI。 - UI 更新:根据连接状态和会话信息,我们更新 UI 以显示相关信息。
- 资源释放:在
dispose
方法中,我们确保在组件销毁时关闭客户端连接。
注意事项
- 请确保 Transmission RPC 服务器正在运行,并且你已经正确配置了 RPC 地址、端口、用户名和密码。
dart_transmission_rpc
插件的具体 API 和方法可能会随着版本的更新而变化,请参考最新的文档。
希望这个示例代码能帮助你理解如何使用 dart_transmission_rpc
插件来控制 Transmission BitTorrent 客户端。如果你有更具体的需求或问题,欢迎进一步提问!