aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.ini63
-rw-r--r--interface.py173
2 files changed, 183 insertions, 53 deletions
diff --git a/config.ini b/config.ini
index 4f8fd58..037a2b2 100644
--- a/config.ini
+++ b/config.ini
@@ -6,27 +6,58 @@ password = changeme
6verify_tls = 0 6verify_tls = 0
7 7
8[colors] 8[colors]
9header_fg = black 9# Header
10header_bg = light gray 10header_fg = dark gray
11text_fg = white 11header_bg = black
12
13# Unfocused Media - Main Mode
14text_fg = dark gray
12text_bg = default 15text_bg = default
13focus_fg = white
14focus_bg = dark read
15text_viewed_fg = yellow 16text_viewed_fg = yellow
16text_viewed_bg = default 17text_viewed_bg = default
17focus_viewed_fg = yellow
18focus_viewed_bg = dark red
19fav_fg = light green
20fav_bg = default
21non_fav_fg = dark gray
22non_fav_bg = default
23fav_foc_fg = light green
24fav_foc_bg = dark gray
25non_fav_foc_fg = light gray
26non_fav_foc_bg = dark gray
27 18
19# Focused Media - Main Mode
20focus_fg = black
21focus_bg = dark gray
22focus_viewed_fg = black
23focus_viewed_bg = yellow
24
25# Unfocused Container - Main Mode
26container_fg = light blue
27container_bg = default
28container_viewed_fg = light magenta
29container_viewed_bg = default
30
31# Focused Container - Main Mode
32container_focus_fg = black
33container_focus_bg = light blue
34container_focus_viewed_fg = black
35container_focus_viewed_bg = light magenta
36
37# Unfocused Media - Favorites Mode
38favorite_fg = yellow
39favorite_bg = default
40non_favorite_fg = dark gray
41non_favorite_bg = default
42
43# Focused Media - Favorites Mode
44favorite_focus_fg = black
45favorite_focus_bg = yellow
46non_favorite_focus_fg = black
47non_favorite_focus_bg = dark gray
48
49# Unfocused Container - Favorites Mode
50container_nonfavorite_fg = light blue
51container_nonfavorite_bg = default
52container_favorite_fg = light magenta
53container_favorite_bg = default
54
55# Focused Container - Favorites Mode
56container_focus_nonfavorite_fg = black
57container_focus_nonfavorite_bg = light blue
58container_focus_favorite_fg = black
59container_focus_favorite_bg = light magenta
28 60
29[options] 61[options]
30autoplay = off 62autoplay = off
31search_insensitive = off 63search_insensitive = off
32
diff --git a/interface.py b/interface.py
index 817e7b1..34529ca 100644
--- a/interface.py
+++ b/interface.py
@@ -80,31 +80,80 @@ class Interface:
80 80
81 # Get colors from config file 81 # Get colors from config file
82 82
83 # Main view colors 83 # Header
84 header_fg = self.parser.get("colors", "header_fg", fallback="black") 84 header_fg = self.parser.get("colors", "header_fg", fallback="dark gray")
85 header_bg = self.parser.get("colors", "header_bg", fallback="light gray") 85 header_bg = self.parser.get("colors", "header_bg", fallback="black")
86 text_fg = self.parser.get("colors", "text_fg", fallback="white") 86
87 # Unfocused Media - Main Mode
88 text_fg = self.parser.get("colors", "text_fg", fallback="dark gray")
87 text_bg = self.parser.get("colors", "text_bg", fallback="default") 89 text_bg = self.parser.get("colors", "text_bg", fallback="default")
88 focus_fg = self.parser.get("colors", "focus_fg", fallback="white")
89 focus_bg = self.parser.get("colors", "focus_bg", fallback="dark red")
90 text_viewed_fg = self.parser.get("colors", "text_viewed_fg", fallback="yellow") 90 text_viewed_fg = self.parser.get("colors", "text_viewed_fg", fallback="yellow")
91 text_viewed_bg = self.parser.get("colors", "text_viewed_bg",fallback="default") 91 text_viewed_bg = self.parser.get("colors", "text_viewed_bg",fallback="default")
92 focus_viewed_fg = self.parser.get("colors","focus_viewed_fg",fallback="yellow") 92
93 focus_viewed_bg=self.parser.get("colors","focus_viewed_bg",fallback="dark red") 93 # Focused Media - Main Mode
94 94 focus_fg = self.parser.get("colors", "focus_fg", fallback="black")
95 # Favorites view colors 95 focus_bg = self.parser.get("colors", "focus_bg", fallback="dark gray")
96 fav_fg = self.parser.get("colors", "fav_fg", fallback = "light green") 96 focus_viewed_fg = self.parser.get("colors","focus_viewed_fg",fallback="black")
97 fav_bg = self.parser.get("colors", "fav_bg", fallback = "default") 97 focus_viewed_bg=self.parser.get("colors","focus_viewed_bg",fallback="yellow")
98 non_fav_fg = self.parser.get("colors", "non_fav_fg", fallback = "dark gray") 98
99 non_fav_bg = self.parser.get("colors", "non_fav_bg", fallback = "default") 99 # Unfocused Container - Main Mode TODO
100 fav_foc_fg = self.parser.get("colors", "fav_foc_fg", fallback = "light green") 100 container_fg = self.parser.get("colors", "container_fg", fallback="light blue")
101 fav_foc_bg = self.parser.get("colors", "fav_foc_bg", fallback = "dark gray") 101 container_bg = self.parser.get("colors", "container_bg", fallback="default")
102 non_fav_foc_fg = self.parser.get("colors","non_fav_foc_fg", 102 container_viewed_fg = self.parser.get("colors", "container_viewed_fg",
103 fallback="light gray") 103 fallback="light magenta")
104 non_fav_foc_bg = self.parser.get("colors","non_fav_foc_bg", 104 container_viewed_bg = self.parser.get("colors", "container_bg",
105 fallback="dark gray") 105 fallback="default")
106
107 # Focused Container - Main Mode TODO
108 container_focus_fg = self.parser.get("colors", "container_focus_fg",
109 fallback="black")
110 container_focus_bg = self.parser.get("colors", "container_focus_bg",
111 fallback="light blue")
112 container_focus_viewed_fg = self.parser.get("colors",
113 "container_focus_viewed_fg", fallback="black")
114 container_focus_viewed_bg = self.parser.get("colors",
115 "container_focus_viewed_bg", fallback="light magenta")
116
117
118 # Unfocused Media - Favorites Mode
119 fav_fg = self.parser.get("colors", "favorite_fg", fallback = "yellow")
120 fav_bg = self.parser.get("colors", "favorite_bg", fallback = "default")
121 non_fav_fg = self.parser.get("colors", "non_favorite_fg",
122 fallback = "dark gray")
123 non_fav_bg = self.parser.get("colors", "non_favorite_bg", fallback = "default")
124
125 # Focused Media - Favorites Mode
126 fav_foc_fg = self.parser.get("colors", "favorite_focus_fg",
127 fallback = "black")
128 fav_foc_bg = self.parser.get("colors", "favorite_focus_bg",
129 fallback = "yellow")
130 non_fav_foc_fg = self.parser.get("colors","non_favorite_focus_fg",
131 fallback="black")
132 non_fav_foc_bg = self.parser.get("colors","non_favorite_focus_bg",
133 fallback="dark gray")
134
135 # Unfocused Container - Favorites Mode TODO
136 container_nonfavorite_fg = self.parser.get("colors",
137 "container_nonfavorite_fg", fallback = "light blue")
138 container_nonfavorite_bg = self.parser.get("colors",
139 "container_nonfavorite_bg", fallback = "default")
140 container_favorite_fg = self.parser.get("colors",
141 "container_favorite_fg", fallback = "light magenta")
142 container_favorite_bg = self.parser.get("colors",
143 "container_favorite_bg", fallback = "default")
144
145 # Focused Container - Favorites Mode TODO
146 container_focus_nonfavorite_fg = self.parser.get("colors",
147 "container_focus_nonfavorite_fg", fallback = "black")
148 container_focus_nonfavorite_bg = self.parser.get("colors",
149 "container_focus_nonfavorite_bg", fallback = "light blue")
150 container_focus_favorite_fg = self.parser.get("colors",
151 "container_focus_favorite_fg", fallback = "black")
152 container_focus_favorite_bg = self.parser.get("colors",
153 "container_focus_favorite_bg", fallback = "light magenta")
106 154
107 self.palette = [ 155 self.palette = [
156 # Media
108 ('header', header_fg, header_bg), 157 ('header', header_fg, header_bg),
109 ('text', text_fg, text_bg), 158 ('text', text_fg, text_bg),
110 ('focus', focus_fg, focus_bg), 159 ('focus', focus_fg, focus_bg),
@@ -114,7 +163,19 @@ class Interface:
114 ('fav-foc', fav_foc_fg, fav_foc_bg), 163 ('fav-foc', fav_foc_fg, fav_foc_bg),
115 ('non-fav', non_fav_fg, non_fav_bg), 164 ('non-fav', non_fav_fg, non_fav_bg),
116 ('non-fav-foc', non_fav_foc_fg, non_fav_foc_bg), 165 ('non-fav-foc', non_fav_foc_fg, non_fav_foc_bg),
117 ('error', 'dark red', 'black'), 166 # Containers
167 ('container', container_fg, container_bg),
168 ('container_viewed', container_viewed_fg,container_viewed_bg),
169 ('container_focus', container_focus_fg,container_focus_bg),
170 ('container_focus_viewed', container_focus_viewed_fg,
171 container_focus_viewed_bg),
172 ('container_nonfavorite', container_nonfavorite_fg,
173 container_nonfavorite_bg),
174 ('container_favorite', container_favorite_fg, container_favorite_bg),
175 ('container_focus_nonfavorite', container_focus_nonfavorite_fg,
176 container_focus_nonfavorite_bg),
177 ('container_focus_favorite', container_focus_favorite_fg,
178 container_focus_favorite_bg)
118 ] 179 ]
119 180
120 181
@@ -230,6 +291,8 @@ class Interface:
230 self.input.insert_text("search ") 291 self.input.insert_text("search ")
231 elif key == "esc": 292 elif key == "esc":
232 self.clear_buffer() 293 self.clear_buffer()
294 elif key == " ":
295 self.clear_buffer()
233 else: 296 else:
234 self.input_buffer.append(key) 297 self.input_buffer.append(key)
235 self.parse_buffer() 298 self.parse_buffer()
@@ -421,6 +484,7 @@ class Interface:
421 if not self.search_mode and not self.info_mode: 484 if not self.search_mode and not self.info_mode:
422 self.display_contents = content 485 self.display_contents = content
423 486
487 # Info Mode
424 if self.info_mode: 488 if self.info_mode:
425 content = content[0].split("\n") 489 content = content[0].split("\n")
426 for line in content: 490 for line in content:
@@ -428,27 +492,60 @@ class Interface:
428 self.content.set_focus(0) 492 self.content.set_focus(0)
429 return 493 return
430 494
495 # Main, Favorites, or Search Mode
431 for item in content: 496 for item in content:
497
432 title = item["Name"] 498 title = item["Name"]
433 499
500 # Favorites Mode
434 if self.show_favorites: 501 if self.show_favorites:
435 if item["UserData"]["IsFavorite"]: 502 # Media
436 self.content.append(urwid.AttrWrap( 503 if self.is_media(item):
437 urwid.Text(title), 'fav', 'fav-foc') 504 if item["UserData"]["IsFavorite"]:
438 ) 505 self.content.append(urwid.AttrWrap(
506 urwid.Text(title), 'fav', 'fav-foc')
507 )
508 else:
509 self.content.append(urwid.AttrWrap(
510 urwid.Text(title), 'non-fav', 'non-fav-foc')
511 )
512 # Container
439 else: 513 else:
440 self.content.append(urwid.AttrWrap( 514 if item["UserData"]["IsFavorite"]:
441 urwid.Text(title), 'non-fav', 'non-fav-foc') 515 self.content.append(urwid.AttrWrap(
442 ) 516 urwid.Text(title), 'container_favorite',
517 'container_focus_favorite')
518 )
519 else:
520 self.content.append(urwid.AttrWrap(
521 urwid.Text(title), 'container_nonfavorite',
522 'container_focus_nonfavorite')
523 )
524
525 # Main or Search Mode
443 else: 526 else:
444 if item["UserData"]["Played"] and item["Type"] != "Audio": 527 # Media
445 self.content.append(urwid.AttrWrap( 528 if self.is_media(item):
446 urwid.Text(title), 'text_viewed', 'focus_viewed') 529 if item["UserData"]["Played"] and item["Type"] != "Audio":
447 ) 530 self.content.append(urwid.AttrWrap(
531 urwid.Text(title), 'text_viewed', 'focus_viewed')
532 )
533 else:
534 self.content.append(urwid.AttrWrap(
535 urwid.Text(title), 'text', 'focus')
536 )
537 # Container
448 else: 538 else:
449 self.content.append(urwid.AttrWrap( 539 if item["UserData"]["Played"] and item["Type"] != "Audio":
450 urwid.Text(title), 'text', 'focus') 540 self.content.append(urwid.AttrWrap(
451 ) 541 urwid.Text(title), 'container_viewed',
542 'container_focus_viewed')
543 )
544 else:
545 self.content.append(urwid.AttrWrap(
546 urwid.Text(title), 'container', 'container_focus')
547 )
548
452 549
453 self.content.set_focus(self.focus) 550 self.content.set_focus(self.focus)
454 551
@@ -561,7 +658,10 @@ class Interface:
561 658
562 player.playlist_pos = 0 659 player.playlist_pos = 0
563 count = 0 660 count = 0
564 while count < AUTOPLAY_LIMIT: 661 while count < AUTOPLAY_LIMIT and count < len(autoplay_items):
662 # Increase focus only if new item is played
663 if count > 0:
664 self.focus += 1
565 current_item = autoplay_items[count] 665 current_item = autoplay_items[count]
566 pct_played, sec_played = self.get_playstate(focus_item["Id"]) 666 pct_played, sec_played = self.get_playstate(focus_item["Id"])
567 player.wait_until_playing() 667 player.wait_until_playing()
@@ -570,7 +670,6 @@ class Interface:
570 self.jellyfin.mark_watched(focus_item["Id"]) 670 self.jellyfin.mark_watched(focus_item["Id"])
571 self.set_playstate(focus_item["Id"], 100.0, 0) 671 self.set_playstate(focus_item["Id"], 100.0, 0)
572 count += 1 672 count += 1
573 self.focus += 1
574 else: 673 else:
575 url = self.jellyfin.get_url(focus_item["Id"]) 674 url = self.jellyfin.get_url(focus_item["Id"])
576 pct_played, sec_played = self.get_playstate(focus_item["Id"]) 675 pct_played, sec_played = self.get_playstate(focus_item["Id"])