Commit Graph

72 Commits

Author SHA1 Message Date
Casey Rodarmor
6328118c00
Use open crate to open files and URLs
Opening URLs on Windows is very complex, so delegate to the
`open` crate.

type: changed
2020-04-07 19:01:31 -07:00
Casey Rodarmor
972a1ec628
Merge Github Actions workflows
type: development
2020-04-07 19:01:30 -07:00
Casey Rodarmor
86aeec3ce9
Fix release process issues
- Trigger GitHub Actions workflow on release tags
- Make build script tolerate not being called in git directory
- Omit git hash in created by message if not built in git directory
- Test created by message format

type: distribution
2020-04-07 19:01:29 -07:00
Casey Rodarmor
498549b35c
Allow reading torrent metainfo from stdin
Torrent metainfo can be read from standard input by passing `-`:

    cat a.torrent | imdl torrent verify --input -
    cat a.torrent | imdl torrent link --input -
    cat a.torrent | imdl torrent show --input -

type: added
2020-04-07 19:01:29 -07:00
Casey Rodarmor
1c84172ad4
Skip torrent file creation with imdl torrent create --dry-run
Torrent files will not be written to disk with `--dry-run`:

    imdl torrrent create --input foo --dry-run

type: added
2020-04-07 19:01:28 -07:00
Casey Rodarmor
0d7c1c0c27
Print magnet link to stdout with --link
Magnet links can be printed to standard output with:

    imdl torrent create --input PATH --link

type: added
2020-04-07 19:01:28 -07:00
Casey Rodarmor
d8055c6e6a
Allow opening magnet links after creation
Magnet links can now be opened after creation:

    imdl torrent link --open --input METAINFO

type: added
2020-04-07 19:01:28 -07:00
Casey Rodarmor
aeb9d8b317
Add name and peers to magnet links
Add additional data to magnet links in `imdl torrent link`.

- Set the `dn` query parameter with `metinfo.info.name`
- Add peers to the `x.pe` query parameter:

    imdl torrent link --peer HOST:PORT

type: added
2020-04-07 19:01:28 -07:00
Casey Rodarmor
57a358e458
Allow creating magnet links with imdl torrent link
Magnet links can now be created from a metainfo file with:

    imdl torrent link --input METAINFO

type: added
2020-04-07 19:01:27 -07:00
Casey Rodarmor
3257614c4f
Print correct and incorrect MD5 checksums in color
type: changed
2020-04-07 19:01:27 -07:00
Casey Rodarmor
1cac9ab924
Use imdl-indicatif
The `0.1.0` release is coming up, and a prerequisite to publish to
crates.io is to not depend on any non crates.io dependency.

We're using the `{binary_bytes_per_sec}` formatting spec, which is only
in my fork.

I published my fork to crates.io as `imdl-indicatif`, and this diff
starts depending on that fork.

type: distribution
2020-04-07 19:01:27 -07:00
Casey Rodarmor
0033e8381f
Test imdl torrent verify output
- Test all individual `FileError` variants
- Test terminal colors
- Test multiple and single file torrents

type: testing
2020-04-07 19:01:27 -07:00
Casey Rodarmor
2ea5e0b384
Deny clippy::too_many_arguments
type: development
2020-04-07 19:01:26 -07:00
Casey Rodarmor
1532113782
Print individual file torrent verification errors
If torrent verification fails, print all errors with individual files.

type: changed
2020-04-07 19:01:26 -07:00
Casey Rodarmor
1daa18ef9a
Add progress messages and bar to imdl torrent verify
type: added
2020-04-07 19:01:26 -07:00
Casey Rodarmor
5a0bd2dda7
Add braille spinner char explanation and legend
type: documentation
2020-04-07 19:01:25 -07:00
Casey Rodarmor
2edf8a4fab
Style imdl torrent create progress messages
type: changed
2020-04-07 19:01:25 -07:00
Casey Rodarmor
8c0d918607
Use concat!(...) to format braille tick chars
type: reform
2020-04-07 19:01:22 -07:00
Casey Rodarmor
c3879db06f
Remove matches macro
type: reform
2020-04-07 19:01:16 -07:00
Casey Rodarmor
bb34936c2f
Only write spinner and progress bar when connected to terminal
type: fixed
2020-04-07 19:01:16 -07:00
Casey Rodarmor
2cfdad2597
Fail early if destination .torrent file exists
Check if torrent file to create exists and fail early.

type: changed
2020-04-07 19:01:16 -07:00
Casey Rodarmor
4371bb1402
Improve spinner and progress bar
- Switch to my branch of indicatif on github
- Use binary braille spinner
- Use fine-grained progress bar
- Improve template formatting
- Use SI units for bytes/s

type: changed
2020-04-07 19:01:16 -07:00
Casey Rodarmor
b25b389ae6
Rename Target to OutputTarget
Making it specific to output allows us to be more specific in the
display message, and possibly add output-specific code in the future.

type: reform
2020-04-07 19:01:16 -07:00
Casey Rodarmor
0de2b1719e
Only show torrent summary on create with --show
The torrent summary is large, and makes it easy to miss the create
progress bar and messages. Only show summary if the user passes
`--show` / `-S` to `imdl torrent create`.

type: changed
2020-04-07 19:01:16 -07:00
Casey Rodarmor
06947fd63e
Make table names more greppable
- Use lowercase table names when priting to terminal
- Use `Creation Date` instead of `Created`, to make it
  distinct from the `Created` field

type: changed
2020-04-07 19:01:15 -07:00
RJ Rybarczyk
bdaec27caf
Add piece hashing progress bar
type: added
2020-04-07 19:01:15 -07:00
RJ Rybarczyk
c6cd78f565
Add progress messages to imdl torrent create
- Add messages showing overall progress
- Add file search spinner

type: added
2020-04-07 19:01:15 -07:00
Casey Rodarmor
21a87a46f3
Improve imdl torrent create flags
Add short flags and make some long flags shorter.

type: added
2020-04-07 19:01:15 -07:00
Casey Rodarmor
3276f2d043
Add short flags to imdl torrent {show,verify}
type: added
2020-04-07 19:01:15 -07:00
Casey Rodarmor
027b229df1
Test piece-hashing edge cases
- Uneven last piece
- Even last piece
- Piece that spans multiple files
- Multiple pieces in one file

type: testing
2020-04-07 19:01:14 -07:00
Casey Rodarmor
2b19a62134
Test creating torrents from . and ..
Test that torrent gets actual name of directory, and is created in the
correct location.

type: testing
2020-04-07 19:01:14 -07:00
Casey Rodarmor
fa6d4e6ad0
Revise command line value names
Make command line value names make sense in context. For example,
`--announce URL` instead of `--announce ANNOUNCE`.

type: documentation
2020-04-07 19:01:14 -07:00
Casey Rodarmor
cba238470d
Remove long_help in favor of help
Maintaining two help strings in order to have a shorter help message
doesn't seem worth it.

type: documentation
2020-04-07 19:01:14 -07:00
Casey Rodarmor
4fffa777b4
Refactor Opt into Arguments, Options, and Subcommand
type: reform
2020-04-07 19:01:14 -07:00
RJ Rybarczyk
eb8efaf528
Fix hidden method unused arg warning
type: fixed
2020-04-07 19:01:13 -07:00
Casey Rodarmor
f2a5f13729
Format with unstable rustfmt options
- Format with nightly rustfmt
- Enable unstable options in rustfmt.toml
- Turn off git text file detection, so newlines are always unix newlines

type: reform
2020-04-07 19:01:07 -07:00
Casey Rodarmor
d71bdffda1
Refactor tests and improve verification
Improve verification somewhat, but mostly refactor tests
to use test tree, and be nicer to read and write.

type: changed
2020-04-07 19:01:07 -07:00
Casey Rodarmor
2fb5bdb933
Test that metainfo bencode representation is correct
Check that metadata is serialized to expected bencode representation.

type: testing
2020-04-07 19:01:06 -07:00
Casey Rodarmor
1227628306
Use list of SHA1 digests for piece list
type: reform
2020-04-07 19:01:06 -07:00
Casey Rodarmor
9787344d9e
Fix torrent verify about message
type: fixed
2020-04-07 19:01:05 -07:00
Casey Rodarmor
165a7ea444
Support adding DHT bootstrap nodes to created torrents
The --dht-node flag can be used to add DHT bootstrap nodes to new torrents.

This is the only piece of metainfo-related functionality in BEP 5, so we can mark BEP
5 as implemented.

type: added
2020-04-07 19:01:05 -07:00
Casey Rodarmor
6549850dac
Add initial implementation of imdl torrent verify
Adds the command `imdl` torrent verify` to verify the contents of torrents.

This implementation is extremely naive. It does successfully verify torrents,
but it will produce unsatisfying results when a torrent fails verification. In
particular, it won't give any information about which pieces in a file were
corrupt.

type: added
2020-04-07 19:01:05 -07:00
Casey Rodarmor
b0f449b6ae
Drop serde_bencode in favor of bendy
For now depend on my branch on Github, until serde support and the value
type land in the main repo.

type: reform
2020-04-07 19:01:05 -07:00
Casey Rodarmor
9b696f78a7
Don't display tier labels if tiers only contain a single entry
type: changed
2020-04-07 19:01:05 -07:00
Casey Rodarmor
f7e9e80f97
Show files in single-file mode
Since it may be useful for scripting purposes, show file list, even for
single-file torrents.

type: changed
2020-04-07 19:01:04 -07:00
Casey Rodarmor
43d87c06b6
Display torrent file tree
Display the contents of torrents as tree of files when showing torrents
with `imdl torrent show` and after `imdl torrent create`.

The formatting and structure of the code was lifted entirely from torf.

type: added
2020-04-07 19:01:04 -07:00
Casey Rodarmor
a574368ffc
Allow including and excluding files from torrent with globs
To include only files that match a glob, pass `--glob GLOB`. To exclude
files that match a glob, pass `--glob GLOB`. Multiple globs may be
passed, with later globs taking precedence over earlier ones.

type: added
2020-04-07 19:01:04 -07:00
Casey Rodarmor
9158c230df
Skip hidden files, symlinks, and junk in created torrents
By default, skip the following when creating a torrent:

- Junk files, like `Thumbs.db`
- Files and directories that begin with a `.`
- Files and directories that have the OS or Windows hidden attribute set
- Symlinks

These can be overridden with, respectively:
- `--include-junk`
- `--include-hidden`
- `--include-hidden`
- `--follow-symlinks`

type: changed
2020-04-07 19:01:04 -07:00
Casey Rodarmor
3739a92857
Support creating multi-file torrents
type: added
2020-04-07 19:01:04 -07:00
Casey Rodarmor
551617de4f
Don't overwrite destination torrent without --force
type: changed
2020-04-07 19:01:04 -07:00