@@ -4,17 +4,17 @@ use crate::gui::helpers::season_episode_str_gen;
44use crate :: gui:: troxide_widget:: { GREEN_THEME , INFO_HEADER , RED_THEME } ;
55
66use iced:: widget:: { column, text} ;
7- use iced:: Renderer ;
8- use iced_aw:: Grid ;
7+ use iced:: { Element , Renderer } ;
98
109use super :: Message ;
1110
1211pub fn status_widget (
13- series_data_grid : & mut Grid < ' _ , Message , Renderer > ,
1412 series_info : & SeriesMainInformation ,
13+ ) -> (
14+ Element < ' _ , Message , Renderer > ,
15+ Element < ' _ , Message , Renderer > ,
1516) {
1617 let title_text = text ( "Status" ) ;
17- series_data_grid. insert ( title_text) ;
1818
1919 let status_text = match SeriesStatus :: new ( series_info) {
2020 SeriesStatus :: Running => text ( "Running" ) . style ( GREEN_THEME ) ,
@@ -23,30 +23,34 @@ pub fn status_widget(
2323 SeriesStatus :: InDevelopment => text ( "In Development" ) ,
2424 SeriesStatus :: Other => text ( & series_info. status ) ,
2525 } ;
26- series_data_grid . insert ( status_text) ;
26+ ( title_text . into ( ) , status_text. into ( ) )
2727}
2828
2929pub fn average_runtime_widget (
30- series_data_grid : & mut Grid < ' _ , Message , Renderer > ,
3130 series_info : & SeriesMainInformation ,
31+ ) -> (
32+ Element < ' _ , Message , Renderer > ,
33+ Element < ' _ , Message , Renderer > ,
3234) {
3335 // since the the title part of this widget is the longest, we gonna add some space
3436 // infront of it to make the separation of column nicer
35- series_data_grid . insert ( text ( "Average runtime " ) ) ;
37+ let title_text = text ( "Average runtime " ) ;
3638 let body_widget = if let Some ( average_runtime) = series_info. average_runtime {
3739 text ( format ! ( "{} mins" , average_runtime) )
3840 } else {
3941 text ( "unavailable" )
4042 } ;
41- series_data_grid . insert ( body_widget)
43+ ( title_text . into ( ) , body_widget. into ( ) )
4244}
4345
4446pub fn genres_widget (
45- series_data_grid : & mut Grid < ' _ , Message , Renderer > ,
4647 series_info : & SeriesMainInformation ,
47- ) {
48+ ) -> Option < (
49+ Element < ' _ , Message , Renderer > ,
50+ Element < ' _ , Message , Renderer > ,
51+ ) > {
4852 if !series_info. genres . is_empty ( ) {
49- series_data_grid . insert ( text ( "Genres" ) ) ;
53+ let title_text = text ( "Genres" ) ;
5054 let mut genres = String :: new ( ) ;
5155
5256 let mut series_result_iter = series_info. genres . iter ( ) . peekable ( ) ;
@@ -56,54 +60,66 @@ pub fn genres_widget(
5660 genres. push_str ( ", " ) ;
5761 }
5862 }
59- series_data_grid. insert ( text ( genres) ) ;
63+ let genres = text ( genres) ;
64+
65+ Some ( ( title_text. into ( ) , genres. into ( ) ) )
66+ } else {
67+ None
6068 }
6169}
6270
6371pub fn language_widget (
64- series_data_grid : & mut Grid < ' _ , Message , Renderer > ,
6572 series_info : & SeriesMainInformation ,
73+ ) -> (
74+ Element < ' _ , Message , Renderer > ,
75+ Element < ' _ , Message , Renderer > ,
6676) {
67- series_data_grid . insert ( text ( "Language" ) ) ;
68- series_data_grid . insert ( if let Some ( language) = & series_info. language {
77+ let title_text = text ( "Language" ) ;
78+ let language = if let Some ( language) = & series_info. language {
6979 text ( language)
7080 } else {
7181 text ( "unavailable" )
72- } ) ;
82+ } ;
83+
84+ ( title_text. into ( ) , language. into ( ) )
7385}
7486
7587pub fn premiered_widget (
76- series_data_grid : & mut Grid < ' _ , Message , Renderer > ,
7788 series_info : & SeriesMainInformation ,
89+ ) -> (
90+ Element < ' _ , Message , Renderer > ,
91+ Element < ' _ , Message , Renderer > ,
7892) {
79- series_data_grid . insert ( text ( "Premiered" ) ) ;
93+ let title_text = text ( "Premiered" ) ;
8094 let body_text = if let Some ( premier) = & series_info. premiered {
8195 text ( premier)
8296 } else {
8397 text ( "unavailable" )
8498 } ;
8599
86- series_data_grid . insert ( body_text)
100+ ( title_text . into ( ) , body_text. into ( ) )
87101}
88102
89103pub fn ended_widget (
90- series_data_grid : & mut Grid < ' _ , Message , Renderer > ,
91104 series_info : & SeriesMainInformation ,
92- ) {
105+ ) -> Option < (
106+ Element < ' _ , Message , Renderer > ,
107+ Element < ' _ , Message , Renderer > ,
108+ ) > {
93109 // Pushing the widget to the grid only when the series has ended
94110 match SeriesStatus :: new ( series_info) {
95111 SeriesStatus :: Ended => { }
96- _ => return ,
112+ _ => return None ,
97113 }
98114
99- series_data_grid . insert ( text ( "Ended" ) ) ;
115+ let title_text = text ( "Ended" ) ;
100116 let body_text = if let Some ( ended) = & series_info. ended {
101117 text ( ended)
102118 } else {
103119 text ( "unavailable" )
104120 } ;
105121
106- series_data_grid . insert ( body_text)
122+ Some ( ( title_text . into ( ) , body_text. into ( ) ) )
107123}
108124
109125pub fn summary_widget ( series_info : & SeriesMainInformation ) -> iced:: Element < ' _ , Message , Renderer > {
@@ -118,42 +134,46 @@ pub fn summary_widget(series_info: &SeriesMainInformation) -> iced::Element<'_,
118134}
119135
120136pub fn rating_widget (
121- series_data_grid : & mut Grid < ' _ , Message , Renderer > ,
122137 series_info : & SeriesMainInformation ,
138+ ) -> (
139+ Element < ' _ , Message , Renderer > ,
140+ Element < ' _ , Message , Renderer > ,
123141) {
124- series_data_grid . insert ( text ( "Average rating" ) ) ;
125- let body_wiget = if let Some ( average_rating) = series_info. rating . average {
142+ let title_text = text ( "Average rating" ) ;
143+ let body_text = if let Some ( average_rating) = series_info. rating . average {
126144 text ( average_rating. to_string ( ) )
127145 } else {
128146 text ( "unavailable" )
129147 } ;
130148
131- series_data_grid . insert ( body_wiget )
149+ ( title_text . into ( ) , body_text . into ( ) )
132150}
133151
134152pub fn network_widget (
135- series_data_grid : & mut Grid < ' _ , Message , Renderer > ,
136153 series_info : & SeriesMainInformation ,
137- ) {
138- if let Some ( network) = & series_info. network {
154+ ) -> Option < (
155+ Element < ' _ , Message , Renderer > ,
156+ Element < ' _ , Message , Renderer > ,
157+ ) > {
158+ series_info. network . as_ref ( ) . map ( |network| {
139159 // TODO: Add a clickable link
140- series_data_grid. insert ( text ( "Network" ) ) ;
141- series_data_grid. insert ( text ( format ! (
142- "{} ({})" ,
143- & network. name, & network. country. name
144- ) ) )
145- }
160+ (
161+ text ( "Network" ) . into ( ) ,
162+ text ( format ! ( "{} ({})" , & network. name, & network. country. name) ) . into ( ) ,
163+ )
164+ } )
146165}
147166
148167pub fn webchannel_widget (
149- series_data_grid : & mut Grid < ' _ , Message , Renderer > ,
150168 series_info : & SeriesMainInformation ,
151- ) {
152- if let Some ( webchannel) = & series_info. web_channel {
169+ ) -> Option < (
170+ Element < ' _ , Message , Renderer > ,
171+ Element < ' _ , Message , Renderer > ,
172+ ) > {
173+ series_info. web_channel . as_ref ( ) . map ( |webchannel| {
153174 // TODO: Add a clickable link
154- series_data_grid. insert ( text ( "Webchannel" ) ) ;
155- series_data_grid. insert ( text ( & webchannel. name ) )
156- }
175+ ( text ( "Webchannel" ) . into ( ) , text ( & webchannel. name ) . into ( ) )
176+ } )
157177}
158178
159179pub fn next_episode_release_time_widget ( series : & Series ) -> iced:: widget:: Text < ' _ , Renderer > {
0 commit comments