1
1
< svg (click) ="goBack() " class ="arrow " fill ="currentColor " viewBox ="0 0 24 24 ">
2
- < path
3
- d ="M2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12M18,11H10L13.5,7.5L12.08,6.08L6.16,12L12.08,17.92L13.5,16.5L10,13H18V11Z " />
2
+ < path
3
+ d ="M2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12M18,11H10L13.5,7.5L12.08,6.08L6.16,12L12.08,17.92L13.5,16.5L10,13H18V11Z "
4
+ />
4
5
</ svg >
5
6
< div class ="container px-5 ">
6
- < h2 class ="mt-4 mb-4 text-center "> Settings</ h2 >
7
- < div class ="row align-items-center ">
8
- < div class ="col-4 ">
9
- < label [ngbTooltip] ="'Where recorded livestreams will be saved' "> Recording path</ label >
10
- </ div >
11
- < div class ="col ">
12
- < div class ="d-flex align-items-center ">
13
- < span class ="selectable " *ngIf ="!settings.recording_path " id ="default-path "> ~/Home/Videos</ span >
14
- < span class ="selectable " *ngIf ="settings.recording_path "> {{settings.recording_path}}</ span >
15
- < button (click) ="selectFolder() " class ="btn btn-primary btn-sm ms-4 d-inline-flex align-items-center ">
16
- < span > Change</ span >
17
- < svg fill ="currentColor " class ="ms-2 folder " viewBox ="0 0 24 24 ">
18
- < path
19
- d ="M19,20H4C2.89,20 2,19.1 2,18V6C2,4.89 2.89,4 4,4H10L12,6H19A2,2 0 0,1 21,8H21L4,8V18L6.14,10H23.21L20.93,18.5C20.7,19.37 19.92,20 19,20Z " />
20
- </ svg >
21
- </ button >
22
- </ div >
23
- </ div >
7
+ < h2 class ="mt-4 mb-4 text-center "> Settings</ h2 >
8
+ < div class ="row align-items-center ">
9
+ < div class ="col-4 ">
10
+ < label [ngbTooltip] ="'Where recorded livestreams will be saved' "> Recording path</ label >
24
11
</ div >
12
+ < div class ="col ">
13
+ < div class ="d-flex align-items-center ">
14
+ < span class ="selectable " *ngIf ="!settings.recording_path " id ="default-path "
15
+ > ~/Home/Videos</ span
16
+ >
17
+ < span class ="selectable " *ngIf ="settings.recording_path "> {{
18
+ settings.recording_path
19
+ }}</ span >
20
+ < button
21
+ (click) ="selectFolder() "
22
+ class ="btn btn-primary btn-sm ms-4 d-inline-flex align-items-center "
23
+ >
24
+ < span > Change</ span >
25
+ < svg fill ="currentColor " class ="ms-2 folder " viewBox ="0 0 24 24 ">
26
+ < path
27
+ d ="M19,20H4C2.89,20 2,19.1 2,18V6C2,4.89 2.89,4 4,4H10L12,6H19A2,2 0 0,1 21,8H21L4,8V18L6.14,10H23.21L20.93,18.5C20.7,19.37 19.92,20 19,20Z "
28
+ />
29
+ </ svg >
30
+ </ button >
31
+ </ div >
32
+ </ div >
33
+ </ div >
25
34
26
- < div class ="row mt-3 align-items-center ">
27
- < div class ="col-4 ">
28
- < span
29
- [ngbTooltip] ="'Launch parameters applied to all channels. Leave as-is if you don\'t know what this is' "> Global
30
- MPV Parameters</ span >
31
- </ div >
32
- < div class ="col ">
33
- < textarea #mpvParams id ="mpvParams " [(ngModel)] ="settings.mpv_params "
34
- placeholder ="mpv params like: --hwdec auto. Don't touch this unless you know what you're doing! "
35
- class ="form-control "> </ textarea >
36
- </ div >
35
+ < div class ="row mt-3 align-items-center ">
36
+ < div class ="col-4 ">
37
+ < span
38
+ [ngbTooltip] ="
39
+ 'Launch parameters applied to all channels. Leave as-is if you don\'t know what this is'
40
+ "
41
+ > Global MPV Parameters</ span
42
+ >
37
43
</ div >
44
+ < div class ="col ">
45
+ < textarea
46
+ #mpvParams
47
+ id ="mpvParams "
48
+ [(ngModel)] ="settings.mpv_params "
49
+ placeholder ="mpv params like: --hwdec auto. Don't touch this unless you know what you're doing! "
50
+ class ="form-control "
51
+ > </ textarea >
52
+ </ div >
53
+ </ div >
38
54
39
- < div class ="row mt-3 align-items-center ">
40
- < div class ="col-4 ">
41
- < span > Default view</ span >
42
- </ div >
43
- < div class ="col ">
44
- < select (ngModelChange) ="updateSettings() " [(ngModel)] ="settings.default_view " class ="form-control ">
45
- < option [ngValue] ="viewModeEnum.All "> All</ option >
46
- < option [ngValue] ="viewModeEnum.Categories "> Categories</ option >
47
- < option [ngValue] ="viewModeEnum.Favorites "> Favorites</ option >
48
- </ select >
49
- </ div >
55
+ < div class ="row mt-3 align-items-center ">
56
+ < div class ="col-4 ">
57
+ < span > Default view</ span >
58
+ </ div >
59
+ < div class ="col ">
60
+ < select
61
+ (ngModelChange) ="updateSettings() "
62
+ [(ngModel)] ="settings.default_view "
63
+ class ="form-control "
64
+ >
65
+ < option [ngValue] ="viewModeEnum.All "> All</ option >
66
+ < option [ngValue] ="viewModeEnum.Categories "> Categories</ option >
67
+ < option [ngValue] ="viewModeEnum.Favorites "> Favorites</ option >
68
+ </ select >
50
69
</ div >
70
+ </ div >
51
71
52
- < div class ="row mt-3 align-items-center ">
53
- < div class ="col-4 ">
54
- < span > Volume on start</ span >
55
- </ div >
56
- < div class ="col d-inline-flex ">
57
- < input type ="range " style ="flex-grow: 10; width: auto; " step ="1 " class ="form-range " min ="0 " max ="100 "
58
- [(ngModel)] ="settings.volume " (ngModelChange) ="updateSettings() ">
59
- < span style ="flex-grow: 0.5; " class ="text-end "> {{settings.volume}}</ span >
60
- </ div >
72
+ < div class ="row mt-3 align-items-center ">
73
+ < div class ="col-4 ">
74
+ < span > Volume on start</ span >
61
75
</ div >
76
+ < div class ="col d-inline-flex ">
77
+ < input
78
+ type ="range "
79
+ style ="flex-grow: 10; width: auto "
80
+ step ="1 "
81
+ class ="form-range "
82
+ min ="0 "
83
+ max ="100 "
84
+ [(ngModel)] ="settings.volume "
85
+ (ngModelChange) ="updateSettings() "
86
+ />
87
+ < span style ="flex-grow: 0.5 " class ="text-end "> {{ settings.volume }}</ span >
88
+ </ div >
89
+ </ div >
62
90
63
- < div class ="row mt-3 align-items-center ">
64
- < div class ="col-4 ">
65
- < span
66
- [ngbTooltip] ="'Depending on your provider/internet connection, using no caching would give you a lower latency and a more stable experience' "> Use
67
- stream caching</ span >
68
- </ div >
69
- < div class ="col ">
70
- < div class ="form-check form-switch ">
71
- < input [(ngModel)] ="settings.use_stream_caching " (ngModelChange) ="updateSettings() "
72
- class ="form-check-input " type ="checkbox ">
73
- </ div >
74
- </ div >
91
+ < div class ="row mt-3 align-items-center ">
92
+ < div class ="col-4 ">
93
+ < span > Re-stream port</ span >
94
+ </ div >
95
+ < div class ="col ">
96
+ < input
97
+ class ="form-control "
98
+ style ="width: 10rem "
99
+ type ="number "
100
+ [(ngModel)] ="settings.restream_port "
101
+ />
75
102
</ div >
103
+ </ div >
76
104
77
- < div class ="row mt-3 align-items-center ">
78
- < div class ="col-4 ">
79
- < span > Refresh all sources on start</ span >
80
- </ div >
81
- < div class ="col ">
82
- < div class ="form-check form-switch ">
83
- < input [(ngModel)] ="settings.refresh_on_start " (ngModelChange) ="updateSettings() "
84
- class ="form-check-input " type ="checkbox ">
85
- </ div >
86
- </ div >
105
+ < div class ="row mt-3 align-items-center ">
106
+ < div class ="col-4 ">
107
+ < span
108
+ [ngbTooltip] ="
109
+ 'Depending on your provider/internet connection, using no caching would give you a lower latency and a more stable experience'
110
+ "
111
+ > Use stream caching</ span
112
+ >
113
+ </ div >
114
+ < div class ="col ">
115
+ < div class ="form-check form-switch ">
116
+ < input
117
+ [(ngModel)] ="settings.use_stream_caching "
118
+ (ngModelChange) ="updateSettings() "
119
+ class ="form-check-input "
120
+ type ="checkbox "
121
+ />
122
+ </ div >
87
123
</ div >
124
+ </ div >
88
125
89
- < h2 class ="mt-4 mb-4 text-center "> Sources</ h2 >
90
- < ng-container *ngFor ="let source of sources; let i = index ">
91
- < div [ngClass] ="{'mt-3': i != 0} ">
92
- < app-source-tile [source] ="source "> </ app-source-tile >
93
- </ div >
94
- </ ng-container >
126
+ < div class ="row mt-3 align-items-center ">
127
+ < div class ="col-4 ">
128
+ < span > Refresh all sources on start</ span >
129
+ </ div >
130
+ < div class ="col ">
131
+ < div class ="form-check form-switch ">
132
+ < input
133
+ [(ngModel)] ="settings.refresh_on_start "
134
+ (ngModelChange) ="updateSettings() "
135
+ class ="form-check-input "
136
+ type ="checkbox "
137
+ />
138
+ </ div >
139
+ </ div >
140
+ </ div >
95
141
96
- < div class ="mt-4 d-flex flex-wrap gap-3 ">
97
- < button [disabled] ="memory.Loading " (click) ="addSource() "
98
- class ="btn btn-primary d-inline-flex align-items-center ">
99
- < span > Add source </ span >
100
- < svg class ="plus ms-1 " fill ="currentColor " viewBox ="0 0 24 24 ">
101
- < path d ="M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z " />
102
- </ svg >
103
- </ button >
104
- < button [disabled] ="memory.Loading " (click) ="refreshAll() "
105
- class ="btn btn-secondary d-inline-flex align-items-center "> Refresh all
106
- < svg class ="refresh ms-1 " xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 24 24 ">
107
- < path fill ="currentColor "
108
- d ="M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z " />
109
- </ svg >
110
- </ button >
111
- < button ngbTooltip ="Use this if an upgrade didn't fix a bug you're experiencing "
112
- class ="btn btn-danger d-inline-flex align-items-center " [disabled] ="memory.Loading "
113
- (click) ="nuke() "> Delete everything
114
- < svg class ="nuke ms-1 " xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 24 24 ">
115
- < path fill ="currentColor "
116
- d ="M14.04,12H10V11H5.5A3.5,3.5 0 0,1 2,7.5A3.5,3.5 0 0,1 5.5,4C6.53,4 7.45,4.44 8.09,5.15C8.5,3.35 10.08,2 12,2C13.92,2 15.5,3.35 15.91,5.15C16.55,4.44 17.47,4 18.5,4A3.5,3.5 0 0,1 22,7.5A3.5,3.5 0 0,1 18.5,11H14.04V12M10,16.9V15.76H5V13.76H19V15.76H14.04V16.92L20,19.08C20.58,19.29 21,19.84 21,20.5A1.5,1.5 0 0,1 19.5,22H4.5A1.5,1.5 0 0,1 3,20.5C3,19.84 3.42,19.29 4,19.08L10,16.9Z " />
117
- </ svg >
118
- </ button >
142
+ < h2 class ="mt-4 mb-4 text-center "> Sources</ h2 >
143
+ < ng-container *ngFor ="let source of sources; let i = index ">
144
+ < div [ngClass] ="{ 'mt-3': i != 0 } ">
145
+ < app-source-tile [source] ="source "> </ app-source-tile >
119
146
</ div >
147
+ </ ng-container >
120
148
149
+ < div class ="mt-4 d-flex flex-wrap gap-3 ">
150
+ < button
151
+ [disabled] ="memory.Loading "
152
+ (click) ="addSource() "
153
+ class ="btn btn-primary d-inline-flex align-items-center "
154
+ >
155
+ < span > Add source </ span >
156
+ < svg class ="plus ms-1 " fill ="currentColor " viewBox ="0 0 24 24 ">
157
+ < path d ="M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z " />
158
+ </ svg >
159
+ </ button >
160
+ < button
161
+ [disabled] ="memory.Loading "
162
+ (click) ="refreshAll() "
163
+ class ="btn btn-secondary d-inline-flex align-items-center "
164
+ >
165
+ Refresh all
166
+ < svg class ="refresh ms-1 " xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 24 24 ">
167
+ < path
168
+ fill ="currentColor "
169
+ d ="M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z "
170
+ />
171
+ </ svg >
172
+ </ button >
173
+ < button
174
+ ngbTooltip ="Use this if an upgrade didn't fix a bug you're experiencing "
175
+ class ="btn btn-danger d-inline-flex align-items-center "
176
+ [disabled] ="memory.Loading "
177
+ (click) ="nuke() "
178
+ >
179
+ Delete everything
180
+ < svg class ="nuke ms-1 " xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 24 24 ">
181
+ < path
182
+ fill ="currentColor "
183
+ d ="M14.04,12H10V11H5.5A3.5,3.5 0 0,1 2,7.5A3.5,3.5 0 0,1 5.5,4C6.53,4 7.45,4.44 8.09,5.15C8.5,3.35 10.08,2 12,2C13.92,2 15.5,3.35 15.91,5.15C16.55,4.44 17.47,4 18.5,4A3.5,3.5 0 0,1 22,7.5A3.5,3.5 0 0,1 18.5,11H14.04V12M10,16.9V15.76H5V13.76H19V15.76H14.04V16.92L20,19.08C20.58,19.29 21,19.84 21,20.5A1.5,1.5 0 0,1 19.5,22H4.5A1.5,1.5 0 0,1 3,20.5C3,19.84 3.42,19.29 4,19.08L10,16.9Z "
184
+ />
185
+ </ svg >
186
+ </ button >
187
+ </ div >
121
188
</ div >
122
189
123
190
< div class ="author mt-5 mb-4 ">
124
- < p >
125
- < a href ="https://github.com/Fredolx/open-tv/discussions/69 " target ="_blank ">
126
- Made by Frédéric Lachapelle with ❤️
127
- < br > Please consider donating to support future updates
128
- < br > Open TV is currently not sustainable and needs your support
129
- </ a >
130
- </ p >
131
- </ div >
191
+ < p >
192
+ < a href ="https://github.com/Fredolx/open-tv/discussions/69 " target ="_blank ">
193
+ Made by Frédéric Lachapelle with ❤️
194
+ < br / > Please consider donating to support future updates < br /> Open TV is currently not
195
+ sustainable and needs your support
196
+ </ a >
197
+ </ p >
198
+ </ div >
0 commit comments