qbit_api_rs/types/
sync.rs

1use super::torrents::{CategoriesResponse, InfoState};
2use super::transfer::ConnectionStatus;
3use serde::{self, Deserialize, Serialize};
4use std::collections::HashMap;
5
6/// # `/api/v2/sync/maindata`
7#[derive(Debug, Clone, Default, Serialize)]
8pub struct MaindataQuery {
9    pub rid: u64,
10}
11
12/// # `/api/v2/sync/maindata`
13#[derive(Debug, Clone, Deserialize)]
14pub struct MaindataResponse {
15    pub rid: u64,
16    pub full_update: Option<bool>,
17    pub torrents: Option<MaindataTorrentsResponse>,
18    pub torrents_removed: Option<Vec<String>>,
19    pub categories: Option<CategoriesResponse>, // Note: catagories are not mentioned in docs
20    pub categories_removed: Option<Vec<String>>,
21    pub tags: Option<Vec<String>>,
22    pub tags_removed: Option<Vec<String>>,
23    pub queueing: Option<bool>,
24    pub server_state: Option<ServerState>, // Note: server_state are not mentioned in docs
25}
26
27/// # `/api/v2/sync/maindata`
28/// [`MaindataResponse::torrents`]
29#[derive(Debug, Clone, Deserialize)]
30#[serde(transparent)]
31pub struct MaindataTorrentsResponse {
32    pub data: HashMap<String, MaindataTorrentsResponseItem>,
33}
34
35/// # `/api/v2/sync/maindata`
36/// [`MaindataTorrentsResponse::data`]
37///
38/// `Note`: similar to `TorrentsInfoResponseItem` but no `hash` field
39#[derive(Debug, Clone, Deserialize)]
40pub struct MaindataTorrentsResponseItem {
41    pub added_on: Option<u64>,
42    pub amount_left: Option<u64>,
43    pub auto_tmm: Option<bool>,
44    pub category: Option<String>,
45    pub completed: Option<i64>,
46    pub completion_on: Option<u64>,
47    pub dl_limit: Option<i64>,
48    pub dlspeed: Option<i64>,
49    pub downloaded: Option<i64>,
50    pub downloaded_session: Option<i64>,
51    pub eta: Option<i64>,
52    pub f_l_piece_prio: Option<bool>,
53    pub force_start: Option<bool>,
54    // pub hash: String,
55    pub last_activity: Option<u64>,
56    pub magnet_uri: Option<String>,
57    pub max_ratio: Option<f64>,
58    pub max_seeding_time: Option<i64>,
59    pub name: Option<String>,
60    pub num_complete: Option<i64>,
61    pub num_incomplete: Option<i64>,
62    pub num_leechs: Option<i64>,
63    pub num_seeds: Option<i64>,
64    pub priority: Option<i64>,
65    pub progress: Option<f64>,
66    pub ratio: Option<f64>,
67    pub ratio_limit: Option<f64>,
68    pub save_path: Option<String>,
69    pub seeding_time_limit: Option<i64>,
70    pub seen_complete: Option<i64>,
71    pub seq_dl: Option<bool>,
72    pub size: Option<i64>,
73    pub state: Option<InfoState>,
74    pub super_seeding: Option<bool>,
75    pub tags: Option<String>,
76    pub time_active: Option<i64>,
77    pub total_size: Option<i64>,
78    pub tracker: Option<String>,
79    pub up_limit: Option<i64>,
80    pub uploaded: Option<i64>,
81    pub uploaded_session: Option<i64>,
82    pub upspeed: Option<i64>,
83}
84
85/// # `/api/v2/sync/maindata`
86/// [`MaindataResponse::server_state`]
87#[derive(Debug, Clone, Deserialize)]
88pub struct ServerState {
89    pub alltime_dl: Option<u64>,
90    pub alltime_ul: Option<u64>,
91    pub average_time_queue: Option<u64>,
92    pub free_space_on_disk: Option<u64>,
93    pub global_ratio: Option<String>,
94    pub queued_io_jobs: Option<u64>,
95    pub queueing: Option<bool>,
96    pub read_cache_hits: Option<String>,
97    pub read_cache_overload: Option<String>,
98    pub refresh_interval: Option<u64>,
99    pub total_buffers_size: Option<u64>,
100    pub total_peer_connections: Option<u64>,
101    pub total_queued_size: Option<u64>,
102    pub total_wasted_session: Option<u64>,
103    pub use_alt_speed_limits: Option<bool>,
104    pub write_cache_overload: Option<String>,
105
106    pub dl_info_speed: Option<u64>,
107    pub dl_info_data: Option<u64>,
108    pub up_info_speed: Option<u64>,
109    pub up_info_data: Option<u64>,
110    pub dl_rate_limit: Option<u64>,
111    pub up_rate_limit: Option<u64>,
112    pub dht_nodes: Option<u64>,
113    pub connection_status: Option<ConnectionStatus>,
114}
115
116/// # `/api/v2/sync/torrentPeers`
117#[derive(Debug, Clone, Default, Serialize)]
118pub struct TorrentPeersQuery {
119    pub hash: String,
120    pub rid: u64,
121}
122
123/// # `/api/v2/sync/torrentPeers`
124///
125/// `Note`: The response's format remains TODO status in docs
126#[derive(Debug, Clone, Default, PartialEq, Deserialize)]
127pub struct TorrentPeersResponse {
128    pub full_update: bool,
129    pub peers: HashMap<String, TorrentPeer>,
130}
131
132/// # `/api/v2/sync/torrentPeers`
133/// [`TorrentPeersResponse::peers`]
134#[derive(Debug, Clone, PartialEq, Deserialize)]
135pub struct TorrentPeer {
136    pub client: String,
137    pub connection: String,
138    pub country: String,
139    pub country_code: String,
140    pub dl_speed: u64,
141    pub downloaded: u64,
142    pub files: String,
143    pub flags: String,
144    pub flags_desc: String,
145    pub ip: String,
146    pub peer_id_client: String,
147    pub port: u16,
148    pub progress: f64,
149    pub relevance: f64,
150    pub up_speed: u64,
151    pub uploaded: u64,
152}