1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
|
TODO: A way to see the path of the currently selected item in any grouplike
element. Each item in the path should be a button that, when pressed,
makes the MAIN grouplike view navigate there.
(Done!)
TODO: A "shuffle queue" button!
(Half-way done -- the functionality is there, press "S", but there's no
button for it yet.)
TODO: A "clear queue" button.
TODO: A way to jump to an item with a particular name. Probably press "/".
It'd be nice if the closest match got highlighted while you were typing.
(Done!)
TODO: "Queue to play next"... maybe also a cursor in the queue list, which
would tell after what track to place newly-queued items?
(Done!)
TODO: Scroll to the selected track once it starts playing when selected from
the queue.
TODO: process.on('SIGWINCH', () => ...) -- detect terminal resize!!
(Done!)
TODO: Pressing enter in the queue seems to not be doing the right thing?
It should NOT move the selected item anywhere in the queue; it should
just select and play that track.
(Done!)
TODO: iTunes downloader - test this.
TODO: Warn if no mkfifo (means controls won't work).
TODO: file:// support for crawl-local.
(Done!)
TODO: Pass YouTube playlist or http://.../playlist.json-like URLs to use them
as playlists (crawl automatically).
(Done!)
TODO: There's some weird glitch where, if downloaderArg is missing (=== ""),
it'll play.. something by Jake Chudnow?? -- Okay, looks like it's using
~/.mtui/downloads/<locallink, etc>/ as the directory for where it would
put the download file (because it's .../localink/ + encode(dlArg) and
dlArg is empty). The way the cache works is that it checks if there is
already a file in that directory, and there IS: a directory for another
track download! But the cache doesn't know this; it just thinks that
directory is the MP3 file (or whatever). So it returns it. MPV works fine
if you pass it a directory that contains music files, so in my case,
72_food (by Jake Chudnow) plays. (That's the first thing returned by
readdir, I suppose.)
(Done!)
TODO: Mouse support, obviously.
TODO: Ctrl-O'ing a playlist sets the left-pane's selected index to the second
item, for some reason. (Regardless of what you had selected before..)
TODO: "Open in new tab" in the Open prompt.
TODO: Inspect the inevitable memory issues that are absolutely 100% sure to
become a problem with opening playlists on the fly.
TODO: Cancelling the "enter a playlist source" dialog shouldn't also stop the
current song.
(Done!)
TODO: Move TabberElement to tui-lib, at some point.
TODO: Make PathElements selectable (again).
(Done!)
TODO: Make the tabber UI show handy information, like what tab you've got
selected, how many tabs there are, the usual (same way a browser tabber
works).
(Done!)
TODO: A "bookmarked playlists" list in the UI, so you can quickly load up
playlists you often use. (Let anything go here, like YT playlist URLs,
file paths, etc.)
TODO: Get rid of "WARNING: unable to extract uploader nickname", which comes
from youtube-dl.
(Done!)
TODO: Fix crashes related to the window resizing while a download is occurring
(i.e. the braille "download spinner" is showing). Very weird!
TODO: Investigate performance issues with very very long ListScrollForms.
(Done!)
TODO: At some point, putting mtui downloads in ~/.mtui - but preferrably with
a more humanish structure - would be quite nice..!
(Done! Yeeeeeeees!!!!!!!!)
TODO: Press "M" to show a context menu. (Done!)
TODO: Figure out a keybinding for Mark (in edit mode) - probably Ctrl-M.
(I prefer Ctrl to be used for functions that will open a dialog of some
sort, though..)
TODO: Only show scrollbars if the form is actually scrollable. (This would make
context menus look better.)
TODO: "Play" (now), in the context menu, should act like a queue-up-next, not a
queue-at-end. (Done!)
TODO: Make the queue code more sane.
(Done!)
TODO: Figure out when the "queue" context menu options should immediately play
the track. Currently, they don't ever initiate playing (besides the
"Play now" option).
(Done! Sorta. There are now just "play" and "queue" buttons. These use
the options chosen ("where" and "order"). Previously, combinations of
those made up menu options, e.g. "queue at end". Now they're separate
controls and the play/queue button you pick decides whether they play
right away or not.)
TODO: A "remove from queue" option for tracks and groups, which removes them
and their children from the queue.
(Done!)
TODO: After the end of a shuffled queue, the next song from the group of the
last track is played (and so on, until the group is empty). This seems
definitely wrong.
(Done! At the end of a shuffle queue, it just stops now.)
TODO: Show a preview of where "Jump to" will go while typing.
(Done!)
TODO: Cancelling "Jump to" should return the selected index to whatever it was
before.
(Done!)
TODO: Entering more than one key "at once" into a text input element will only
move the cursor right by one character, not by the length of the inputted
text. (This is an issue when pasting or spamming the keyboard.) Should be
fixed in tui-lib.
(Done!)
TODO: Pressing space while an "Up (to <group>)" button is selected both
activates the button and pauses music (because the app detects that the
space key is pressed). This is definitely wrong (it should do one or the
other - I'm not too sure which, yet, but probably the latter). (Done!)
TODO: If a track's file is a symlink, the "From:" label should show where it
links to.
TODO: The "Up (to <group>)" and "(This group has no items)" elements are not
quite buttons nor grouplike items. They should be more consistent with
actual grouplike items (i.e. same behavior and appearance), and should
be less buggy.
(Done!)
TODO: "Distribute" options in play/queue menu -- "don't distribute", "spread
(across queue?) evenly", "spread randomly".
(Done!)
TODO: Investigate how to make "distribute" options work better when the
currently-playing song is contained in the group to be distributed.
TODO: The "distribute" options shouldn't show up when you've only got a track
selected! But imagine you already had a "distribute" option selected when
you open up the menu on a track. Is there a way to not mutate the index
of the whereControl in that case (until the user changes the option)?
Like the DS home screen.
TODO: If you remove tracks from the queue that are above the currently selected
track of the queue, the selection index won't change -- so the actual
selected track will become something different. No good!
TODO: Arbitrary queue! I.e, you specify the downloadURL, then it queues that
item.
TODO: A "distribute children" option (with better wording)! Like manually
queueing each child group to be distributed evenly one by one, but
automatic.
More on that thought...I don't think I want to have "clumps" of like,
one of a song from EVERY album right at the start and the end, when we
do that. (Well maybe not the end, but definitely at the start.) If we
pretend there's "fake" items at the start of the group before we
distribute it, I think we'll get better results - that fake item will be
placed at the start, letting the rest of the group get distributed in
better order. (Of course, the fake item is just an offset in the math.
It isn't an actual item that will get added to the queue.)
TODO: Remove ALL children before queueing, THEN queue them - including any math
for distribution. Might give interesting results...or maybe it wouldn't
be any different. Worth investigating!
TODO: A "play later" option for songs in the queue, identical to distributing
randomly the single track; if the track is already playing, it should
skip to the next song before shuffling.
(Done!)
TODO: Loop one song!
(Done!)
TODO: Volume controls!
(Done!)
TODO: Metadata, in memory.
(Done!)
TODO: Load metadata from storage.
(Done!)
TODO: Restore metadata, if it's recognized as similar to an old path.
(Basically: How do we deal with moving files around? We'll also want some
sort of a manager to get rid of unused metadata, if wanted..... on the
one hand, it'll be saving precious kilobytes, but on the other, people
might not want to keep a record of moved or deleted tracks at all, so it
could actually be useful.)
TODO: Don't store duplicate metadata entries (prereq for tags, custom metadata,
etc) for the same track. Do it symlink-style -- map downloader arg to
actual key used for metadata (downloaded file path).
(Done!)
TODO: Metadata process status bar.
(Done!)
TODO: Add Vim arrow keys. Please forgive me.
(Done!)
TODO: Use some other key for toggling loop (besides L), so we can make full use
of HJKL arrow keys.
TODO: In the queue, remove the track number, if possible! Search if all tracks
(or a majority?? maybe later if it becomes a problem...) follow the same
track number format (i.e. start with a number), and if so, remove from
the displayed name. Otherwise, the number is probably just part of the
track's actual name and shouldn't be removed.
(Done!)
TODO: An indicator for the number of tracks in the queue!
(Done!)
TODO: "Reveal" option in queue listing context menu.
(Done!)
TODO: A menubar!
(Done!)
TODO: Make pressing the de-focus menubar key restore the selection even if you
selected the menubar by clicking on it.
TODO: Make the queue length element react to being very squished.
TODO: Don't close the menubar menus when an option is chosen!
Instead, reload that menu to reflect the changes. Handy so that you can
easily press a specific action (e.g. "play later") several times in
succession.
TODO: Color theme picker!! Make sure to save the choice in ~/.mtui, of course!
TODO: An "interweaved" option in the "order" picker - works like putting every
sub-group into a new queue, each time distributing evenly, then using
that as the group to queue according to the "where" picker.
|