Skip to content

Commit

Permalink
Fix a bug that made it impossible to add torrents in desktop
Browse files Browse the repository at this point in the history
  • Loading branch information
ikatson committed Dec 8, 2023
1 parent 2b91292 commit 0751dbc
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 18 deletions.
17 changes: 11 additions & 6 deletions TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
- [x (partial)] per-peer stats
- [x] use some concurrent hashmap e.g. flurry or dashmap
- [x] tracing instead of logging. Debugging peers: RUST_LOG=[{peer=.*}]=debug
test-log for tests
test-log for tests
- [x] reopen read only is bugged
- [x] initializing/checking
- [x] blocks the whole process. Need to break it up. On slower devices (rpi) just hangs for a good while
Expand All @@ -19,7 +19,6 @@
- [x] for torrents with a few seeds might be cool to re-query DHT once in a while.
- [x] don't leak memory when deleting torrents (i.e. remove torrent information (seen peers etc) once the torrent is deleted)
- [x] Routing table - is it balanced properly?
- [ ]
- [x] Don't query Bad nodes
- [-] Buckets that have not been changed in 15 minutes should be "refreshed." (per RFC)
- [x] Did it, but it's flawed: starts repeating the same queries again as neighboring refreshes
Expand All @@ -33,25 +32,31 @@
- [x] Ensure that if we query the "returned" nodes, they are even closer to our request than the responding node id was.

incoming peers:

- [x] error managing peer: expected extended handshake, but got Bitfield(<94 bytes>)
- [x] do not announce when merely listing the torrent

someday:

- [x] cancellation from the client-side for the lib (i.e. stop the torrent manager)
- [x] favicons for Web UI

desktop:
- [ ] on first run show options
- [ ] allow to change options later (even with a session restart)

- [x] on first run show options
- [x] allow to change options later (even with a session restart)
- [ ] look at logs - allow writing them to files? Set RUST_LOG through API

persistence:

- [ ] store total uploaded bytes, so that on restart it comes back up

efficiency:

- [ ] once the torrent is completed, we don't need to remember old peers

refactor:

- [x] session persistence: should add torrents even if we haven't resolved it yet
- [x] where are peers stored
- [x] http api pause/unpause etc
Expand All @@ -61,5 +66,5 @@ refactor:

- [x] start from error state should be possible from UI
- [x] checking is very slow on raspberry
checked. nothing much can be done here. Even if raspberry's own libssl.so is used it's still super slow (sha1)
- [ ] .rqbit-session.json file has 0 bytes when disk full. I guess fs::rename does this when disk is full? at least on linux. Couldn't repro on MacOS
checked. nothing much can be done here. Even if raspberry's own libssl.so is used it's still super slow (sha1)
- [ ] .rqbit-session.json file has 0 bytes when disk full. I guess fs::rename does this when disk is full? at least on linux. Couldn't repro on MacOS
4 changes: 1 addition & 3 deletions crates/librqbit/src/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -203,9 +203,9 @@ fn compute_only_files<ByteBuf: AsRef<[u8]>>(
/// Options for adding new torrents to the session.
#[serde_as]
#[derive(Default, Clone, Serialize, Deserialize)]
#[serde(default)]
pub struct AddTorrentOptions {
/// Start in paused state.
#[serde(default)]
pub paused: bool,
/// A regex to only download files matching it.
pub only_files_regex: Option<String>,
Expand All @@ -214,10 +214,8 @@ pub struct AddTorrentOptions {
pub only_files: Option<Vec<usize>>,
/// Allow writing on top of existing files, including when resuming a torrent.
/// You probably want to set it, however for safety it's not default.
#[serde(default)]
pub overwrite: bool,
/// Only list the files in the torrent without starting it.
#[serde(default)]
pub list_only: bool,
/// The output folder for the torrent. If not set, the session's default one will be used.
pub output_folder: Option<String>,
Expand Down
8 changes: 6 additions & 2 deletions crates/librqbit/webui/src/components/IconButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@ import { MouseEventHandler } from "react";
export const IconButton: React.FC<{
onClick: () => void;
disabled?: boolean;
className?: string;
color?: string;
children: any;
}> = ({ onClick, disabled, color, children }) => {
}> = (props) => {
const { onClick, disabled, color, children, className, ...otherProps } =
props;
const onClickStopPropagation: MouseEventHandler<HTMLAnchorElement> = (e) => {
e.stopPropagation();
if (disabled) {
Expand All @@ -16,9 +19,10 @@ export const IconButton: React.FC<{
const colorClassName = color ? `text-${color}` : "";
return (
<a
className={`p-1 ${colorClassName}`}
className={`p-1 ${colorClassName} ${className}`}
onClick={onClickStopPropagation}
href="#"
{...otherProps}
>
{children}
</a>
Expand Down
15 changes: 8 additions & 7 deletions desktop/src/rqbit-desktop.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ import { useState } from "react";
import { RqbitWebUI } from "./rqbit-webui-src/rqbit-web";
import { CurrentDesktopState, RqbitDesktopConfig } from "./configuration";
import { ConfigModal } from "./configure";
import { IconButton } from "./rqbit-webui-src/components/IconButton";
import { BsSliders2 } from "react-icons/bs";

export const RqbitDesktop: React.FC<{
version: string;
Expand All @@ -20,15 +22,14 @@ export const RqbitDesktop: React.FC<{
<RqbitWebUI title={`Rqbit Desktop v${version}`}></RqbitWebUI>
)}
{configured && (
<a
className="bi bi-sliders2 position-absolute top-0 start-0 p-3 text-primary"
onClick={(e) => {
e.stopPropagation();
<IconButton
className="position-absolute top-0 start-0 p-3 text-primary"
onClick={() => {
setConfigurationOpened(true);
}}
href="#"
aria-label="Settings"
/>
>
<BsSliders2 />
</IconButton>
)}
<ConfigModal
show={!configured || configurationOpened}
Expand Down

0 comments on commit 0751dbc

Please sign in to comment.