- Migrate the empty view to a common view which vertically centers
itself to the screen's bounds
- Don't initialize underlying state variables in init as this is
discouraged behavior. Instead, hook the source list editor to an ID
that refreshes when an existing source list URL has been set
Signed-off-by: kingbri <bdashore3@proton.me>
The inset grouped list style has a top inset that adds extra space
between the navigation bar title and the list rows. Use introspect
to remove this space on UITableView and UICollectionView (for iOS 16).
Sections completely ignore the introspect changes, so add a section
header which removes the list row insets.
Signed-off-by: kingbri <bdashore3@proton.me>
- Make about header scrollable
- Add no sources text
- Add no source lists text
- Make edit source list start with current url
- Add loading indicator for versions
Updates are sent via an alert on starting the app. This can be
disabled in the settings menu.
A full version struct has been completed for flexible comparisons.
Version history can also be viewed in settings in case a user wants
to download an earlier version of the app.
Updates track Github releases.
Signed-off-by: kingbri <bdashore3@gmail.com>
When a search result is selected, there is usually a delay due to
the debrid dance of API routes for grabbing a download link to stream.
Add a loading indicator and prevent any other tasks from loading
unless the user cancels it.
iOS 14.5 was a huge update which added many QoL SwiftUI changes that
are consistent to modern iOS versions.
However, Ferrite supports iOS versions less than 14.5, mainly 14.3.
More fixes had to be added to make sure UI is consistent across
all OS versions.
Signed-off-by: kingbri <bdashore3@gmail.com>
Adds support for website APIs both complex and simple. This commit
only supports GET requests to APIs. POST request support can be added
on request.
Client IDs and secrets are also supported. They can be added via
source settings or automatically set by a website endpoint.
Also fetch sources for scraping using the backgroundContext and remove
some functions from using the main actor.
Signed-off-by: kingbri <bdashore3@gmail.com>
- Fix how abrupt search cancellations work
- Add a no results prompt if no results are found
- Clean up how scraping model results are returned on error
- Allow a base URL and dynamic base URL to be provided together
Signed-off-by: kingbri <bdashore3@gmail.com>
Search results are wiped when the user switches to a new tab in the
app, but this should only be executed when the search is running.
Fortunately, just tracking the ProgressView's status should fix this
problem.
Signed-off-by: kingbri <bdashore3@gmail.com>
If a user searched after cancelling the search the first time,
the first search would still continue.
Assign the search task to navigation view and automatically cancel
it and dismiss the searchbar when the user switches to a different
tab.
Also add a ProgressView to show which source is being parsed.
Signed-off-by: kingbri <bdashore3@gmail.com>
Sources can now be updated based on the repo ID. To preserve repo IDs
across single URL links, the source lists can be edited and the ID
is transferred over.
Signed-off-by: kingbri <bdashore3@gmail.com>
List IDs are used to link a source list with an actual source. Each
list entry has a unique ID that a user can compare with a source
to see if it's legitimate.
Source IDs are just identifiers for sources. Not sure what to do with
these yet but they may be useful for the future.
Signed-off-by: kingbri <bdashore3@gmail.com>
RSS parsing has been added as a method to parse source since they're
easier on the website's end to parse.
Source settings have been added. The only current setting is the fetch
mode which selects which parser/scraper to use. By default, if an RSS
parser is found, it's selected.
A source now has info shown regarding versioning and authorship. A source
list's repository name and author string are now required.
Signed-off-by: kingbri <bdashore3@gmail.com>
Sources are now completely changed to use a more flexible API. This
uses a fully native source system, so there will be 0 overhead on
resource usage and performance.
JSON objects specify what is fetched and displayed by Ferrite when
searching torrents.
Sources now include sizes, seeders, and leechers for any site that
specifies them.
The versioning and repo naming framework has been added, but will be
displayed in another update.
API support will be included in another update.
Signed-off-by: kingbri <bdashore3@gmail.com>
Add a ListRowButtonView which runs a function and include a label.
Use this to style magnet choice buttons.
Signed-off-by: kingbri <bdashore3@gmail.com>
WebTor is a website to view magnet links on the web for free. It
has an API to include magnets, so why not?
Suggested by BlackSwordsman in Discord.
Signed-off-by: kingbri <bdashore3@gmail.com>
In iOS 15, a searchbar will become inherited if a sheet call is
within the searchable view and its children.
Migrate the sheet call outside the search results view.
Signed-off-by: kingbri <bdashore3@gmail.com>
I was accidentally calling dismiss on failure which dismisses the
alert and breaks how presentation is handled on sheets.
Signed-off-by: kingbri <bdashore3@gmail.com>
These sources will be converted to be more flexible with JavaScript
in the future.
The source catalog is populated by adding a source list in settings
then installing a source from the catalog.
Sources can be enabled or disabled when using Ferrite.
Signed-off-by: kingbri <bdashore3@gmail.com>
Batch torrents are torrents that have multiple files bundled within
one torrent file.
RealDebrid does support these, but it is difficult to get them to work.
The main flow requires setting a specific combination in RealDebrid
to allow for link generation. However, this is not intuitive to users
and is bad API design on RealDebrid's part.
Ferrite's implementation presents users with all the possible files
from batches (duplicates deleted) and selects the user-chosen file
to download. That way, only the user chosen file is presented to
play on an external video player.
This still needs work for optimization purposes, but this commit
does produce a working build.
Signed-off-by: kingbri <bdashore3@gmail.com>