Commit Graph

180 Commits

Author SHA1 Message Date
Jordan Petridis
c303c697a9
EpisodeWidget: Wire the total_size label again.
The size might be provided by the rss feed but not alwasy. Additionally it might be
missleading so when a download starts we replace the label with the
HTTP ContentLength header.
2018-06-02 19:25:25 +03:00
Jordan Petridis
9466c5ea10
EpisodeWidget: Wire the cancel button. 2018-06-01 21:30:56 +03:00
Jordan Petridis
1268fcf1cc
EpisodeWidget: Wire the download button. 2018-06-01 19:08:56 +03:00
Jordan Petridis
86d06fa879
EpisodeWidget: Wire the play button again. 2018-06-01 16:49:06 +03:00
Jordan Petridis
cfe79a73d6
EpisodeWidget: Initial refactor.
State machines were a fun experiement but a nightmare to deal with
after the fact. This is the first steps for a refactor in a tradition
style with the goal to ultimatly making it easy to and port to relm.
2018-06-01 16:19:33 +03:00
Jordan Petridis
667deef5f2
Use a mpmc channel instead of the mspc from the std. 2018-05-28 20:49:12 +03:00
Zander Brown
e181a9837a Merge upstream master 2018-05-21 12:01:32 +01:00
Zander Brown
c6ce888cc7 Define an app-menu with About & Quit actions
Rename some paths for auto resource magic
2018-05-19 20:38:36 +01:00
Jordan Petridis
d47bbd6131
Remove explicit and not needed inline calls.
This code is not performance critical and the compiler will already
inline whatever it thinks it might benefit it.
2018-05-13 22:08:25 +03:00
Jordan Petridis
c96b39d597
Fix all the clippy warnings! 2018-04-30 14:13:54 +03:00
Jordan Petridis
2c8ff2d2f2
Cargo fmt 2018-04-28 14:19:55 +03:00
Jordan Petridis
03bd951848
EpisodeWidget: Handle updating states, withotu having to reload the views.
This code is ugly and terrible but it works™. Previsously when a download
would finish it would refresh all the views. Now the if the widget get's
into the Donwloading state, it will setup a callback that will check
periodicly if it's still downloading and update the widget state when
the episode stops downloading.
2018-04-28 14:09:26 +03:00
Jordan Petridis
af5b27d0fc
EpisodeWidget: Replace Arc<Mutex<Widget>> with Rc<RefCell<Widget>>.
Since gtk Widgets are not Send, and the callbacks all run in the gtk
main loop, it *should* not be possible that 2 things try to access the
same widget at the same time.
2018-04-20 07:26:56 +03:00
Jordan Petridis
7c03266d16
Inline a bunch of stuff. 2018-04-17 09:04:18 +03:00
Jordan Petridis
b8995d838a
ShowWidget: Move listbox population to widgets/show.rs 2018-04-17 04:44:55 +03:00
Jordan Petridis
a0154c5919
lazy_load: Add the ability to execute a callbakc on finish
When iteration of data is finished, None will be returned and
the or_else() block will be executed. Now a callback can be
passed that will be executd when the iteration/loading finishes.
2018-04-17 03:13:01 +03:00
Jordan Petridis
bc6eeec663
Replace if Let Err(_) with .map_err().ok() patterns.
I dislike the indentation and the noise if let adds.
2018-04-16 04:03:44 +03:00
Jordan Petridis
87421ce74d
Cargo fmt 2018-04-13 04:35:50 +03:00
Jordan Petridis
47a58a9e65
Improve formatting 2018-04-12 02:49:27 +03:00
Jordan Petridis
27c4fd9b30
Remove .expect() call on channel that can be dropped. 2018-04-12 02:42:52 +03:00
Jordan Petridis
b86f288e86
EpidoseWidget: Recalculate widget's state when cancel is clicked.
Previously we would refresh all the views when download/cancel
button was clicked. This was done mainly to avoid zombie widget bugs
that would arise from shared state.

Now we still refresh all the background views but not the visible one.
Instead the widget has the reponsibility of recalculating it's state.
2018-04-12 02:00:23 +03:00
Jordan Petridis
67bdd3664a
EpisodeWidget: Remove Widget::set/get name calls.
I don't even remember why this was there.
2018-04-12 00:13:43 +03:00
Jordan Petridis
8d4fdb8ece
EpidoseWidget: Only refresh background views when download is clicked. 2018-04-11 23:59:08 +03:00
Jordan Petridis
29cf5940f5 Lazy_load: move to utils module and make it public. 2018-04-10 16:57:08 +00:00
Jordan Petridis
4b4f5c39d4 Lazy_load: improve the naming scheme. 2018-04-10 16:57:08 +00:00
Jordan Petridis
5069430a3a Lazy_load: remove unnecessary clone of an Rc pointer. 2018-04-10 16:57:08 +00:00
Jordan Petridis
28d7373779 Lazy_load: Use IntoIterator for T, instead of Iterator. 2018-04-10 16:57:08 +00:00
Jordan Petridis
9d5fa04d49 Lazy_load: accept an iterator instead a Vec<_> over T. 2018-04-10 16:57:08 +00:00
Jordan Petridis
43bf8b3f15 Lazy_load: Avoid manually indexing.
make the data: Vec<T> mutable, then reverse the vector
so it can be used as a stack, and then use the ::pop()
method to retrieve the item.

This also avoid the constrain for Clone on T.
2018-04-10 16:57:08 +00:00
Jordan Petridis
ed80605755 Move the lazy_load logic to a Generic function. 2018-04-10 16:57:08 +00:00
Jordan Petridis
cc84a4637d EpisodesListBox: Do not block while fetching episode backlog. 2018-04-10 16:57:08 +00:00
Jordan Petridis
701b759ba2 EpisodesListBox: Add each widget lazyly. 2018-04-10 16:57:08 +00:00
Jordan Petridis
9cb2782ef9 ShowWidget: Initial Lazier evaluation of the widgets. 2018-04-10 16:57:08 +00:00
Jordan Petridis
370ba2d461
dlmanager: minor cleanup. 2018-04-04 21:36:23 +03:00
Jordan Petridis
f693c986ec
Add an empty_show if Show has no episodes. 2018-03-28 13:24:26 +03:00
Jordan Petridis
9f3a5a13b3
EpisodeWidget: Some RefCell are not really necessary. 2018-03-16 20:11:17 +02:00
Jordan Petridis
030fed6d12
EpisodeWidget: Just in case there was a deadlock. 2018-03-13 04:57:11 +02:00
Jordan Petridis
fc9579cd51
EpisodeWidget: Replace some Mutexs with RefCells.
The state machines are not send and the code is sequnecial.
We only need `&mut machine` refference to pass to `take_mut::take`
to change the state of the machine. In 2/3 cases we can even use
`.get_mut()` method and even avoid the dynamic borrow checks at
runtime. For the `TitleMachine` The only thing that will hold
a refference to it after initialization will be the play_button
callback. So it's justifiable to use `RefCell` insetead of a `Mutex`.
2018-03-13 04:44:06 +02:00
Jordan Petridis
74712b5410
EpisodeWidget: Remove unnecessary Arcs.
`DateMachine` and `DurationMachine` are only mutated during initialization
and thus do not need shared ownership.
`TitleMachine` is only mutated during initialization and after that only
the callback will keep holding a referrence to it. The `EpisodeWidget`s
get dropped after initialization. So it's justifiable to use `Rc<Mutex<T>>`
instead of `Arc`.
2018-03-13 03:47:46 +02:00
Jordan Petridis
2a6e0b0e07
Merge branch 'master' into state-machines-experiements 2018-02-22 12:14:55 +00:00
Jordan Petridis
c856b88008
EpisodeWidget: Add a Date state machine. 2018-02-19 18:14:34 +00:00
Jordan Petridis
ae25dd65bf
Cargo clippy and fmt. 2018-02-19 09:58:47 +00:00
Jordan Petridis
a88a1c5f1f
MediaMachine: Expose an interface to update the ProgressBar and local_size. 2018-02-17 19:49:43 +02:00
Jordan Petridis
0cd678cc1d
MediaMachine: Expose an interface to update total_size label. 2018-02-16 17:18:02 +02:00
Jordan Petridis
c9bf58af66
EpisodeWidget: Expose cancel button from the state machine. 2018-02-16 16:05:48 +02:00
Jordan Petridis
ed87a00225
EpisodeWidget: Cleanup parts of the state machine. 2018-02-16 14:43:16 +02:00
Jordan Petridis
bcc3608c04
EpisodeWidget: Split ButtonState enum from the MediaMachine.
Add a ButtonState Machine which represents the state of total_size
label, play button, and download button. Also implemented the
update/determine_state function for ButtonState.

Also implemented required generic functions for MediaMachine<X,Y,Z>
that convert it to the desired state.
2018-02-16 13:32:13 +02:00
Jordan Petridis
973d47ee05
EpisodeWidget: Expose the connect_clicked callbacks from the statemachine enum. 2018-02-15 18:07:21 +02:00
Jordan Petridis
f50c990d93
Yay, finally something that works. 2018-02-15 11:33:56 +02:00
Jordan Petridis
72eef6f104
Running in circles. 2018-02-15 11:08:21 +02:00