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
|
Give user the option to start where they left off or from the start or from the start (for manga).
Add grid-view when thumbnails are visible.
Add scrollbar.
Somehow deal with youtube banning ip when searching too often.
When continuing to read manga from a different page from the first and there is no cache for the chapter, then start downloading from the current page instead of page 1.
Show progress of manga in the history tab (current chapter out of total chapters).
Animate page navigation.
Add greentext support for 4chan quotes.
Add support for special formatting for posts by admins on imageboards.
For image boards, track (You)'s and show notification when somebody replies to your post.
Go to next chapter when reaching the end of the chapter in image endless mode.
Make code blocks on matrix and 4chan use monospace and have a background of a different color, also syntax coloring?
Allow deleting watch history with delete key (and show confirmation).
Add navigation to nyaa.si submitter torrents.
Create a large texture and add downloaded images to it. This will save memory usage because sfml has to use power of two textures (and so does opengl internally) for textures, so if you have multiple textures they will use more memory than one large texture with the same texture data.
Use fallback cjk font for regular sf::Text as well (search, tabs, chapter name when viewing a page, path in file-manager, etc). That should also result in better performance on pinephone.
Fix some japanese fonts not rendering (half width alphanumeric?).
Extract thumbnail from images that are being downloaded, while its downloading and show that while the full image is downloading (upscaled, or with blurhash).
Add setting to disable sending typing events to the server (matrix).
Take code from dchat to support gifs (inline in text) and support animated webp (either animated or as a static thumbnail).
Scrolling in images still messes up the |current| page sometimes, need a way to fix this.
Show filename at the bottom when viewing an image/video on 4chan.
Use https://github.com/simdjson/simdjson as a json library in other parts than matrix.
Sanitize check: do not allow pasting more than 2gb of text.
Add autocomplete for matrix commands.
Add option to disable autosearch and search when pressing enter instead or something? this would be needed for mobile phones where typing is slow.
Render view to a rendertexture and render that instead of redrawing every time every time.
Provide a way to specify when notifications should be received (using matrix api) and also read the notification config from matrix. Also provide a way to disable notifications globally.
Use quickmedia to show image in matrix rooms, instead of mpv.
Add command to ban users.
Support peertube (works with mpv, but need to implement search and related videos).
Add a tab for common directories and recently accessed files/directories (the directories would be the directory of used files).
Provide a way to go to the first unread message in matrix and also show a marker in the body (maybe a red line?) where the first unread message is.
Cleanup keybindings. Some require ctrl, some dont.
Set the icon of the window to be the icon of the plugin. Nice for KDE, GNOME, etc with titlebars.
If --no-audio is used then music should be played with a lightweight music player instead. MPV is heavy even for music (60mb RAM). Maybe use sfml audio functions?
Update 4chan thread in real time, just like 4chan-x.
Remove tidy dependency and use my own html-parser.
Add option to sort by other than timestamp for nyaa.si.
Add url preview for matrix (using matrix api, fallback to client url preview (using our own url preview project) if disabled by the homeserver).
IMPORTANT: Cleanup old messages in matrix (from matrix plugin), and instead either save them to disk or refetch them from server when going up to read old messages. (High memory usage, high disk space)
Do not try to reload/redownload thumbnail that fails to download after its cleared when its no longer visible on screen and then becomes visible.
Show google recaptcha on youtube when search/play fails, which can happen when using tor.
Show notifications when we receive a message in a matrix room even if we are not mentioned. This happens when we have set to receive notifications for all messages.
If there are multiple users with the same name in a matrix room, then display the user id beside the displayname.
Show 4chan warnings as warnings instead of ban when posting a message (show the warning message) and then post the message.
Add tabs. Using tabs with tabbed is not as good of a solution as it would use much more memory (opengl context cost) and with our own tabs, we can clear thumbnails and other cache when a tab is in the background. Changing tab either with ctrl+tab or mouse click. ctrl+enter to open a new tab. Ctrl+q or ctrl+w to close a tab.
Remove related videos that have already been watched (except the first related video, which is the "watch next" video, usually the next part of a serie).
Add F5 to refresh page.
Allow choosing which translation/scanlation to use on mangadex. Right now it uses the latest one, which is most likely to be the best.
Retry download if it fails.
Readd autocomplete, but make it better with a proper list. Also readd 4chan login page.
Modify sfml to use GL_COMPRESSED_LUMINANCE and other texture compression modes (in sf::Texture). This reduces memory usage by half.
Decrease memory usage even further (mostly in matrix /sync when part of large rooms) by using rapidjson SAX style API to stream json string into SAX style parsing.
Sometimes we fail to get images in mangadex, most common reason being that the manga is licensed and we can't view the manga on mangadex. QuickMedia should implement mangaplus and redirect us to mangaplus plugin to view the manga, or simply show that we cant view the manga because its licensed.
Show redacted messages even when part of the initial sync in matrix. Right now they are hidden while new sync redacted messages are not.
to fix this we could perhaps replace the newly created body items for replies when loading old messages and one of the old messages is also one of the embedded messages (by event id).
Add button to skip to next video. MPV has this feature when setting "next" video (can be done over IPC).
Use a custom allocator that replaces malloc/realloc/free/new/delete to release memory properly, using munmap in free/delete. The C allocator doesn't do that! memory usage remains high after one large allocation. The C allocator only marks it as free.
Merge |Page::search| and |Page::get_page|. get_page with page 0 should be the same as search.
Disable posting in 4chan thread if closed (thread json contains "closed" field for OP).
Read image exif into to apply image rotation. This is common in images taken on phones. If not done, the width and height will also be mixed and thumbnail fallback size will be incorrectly calculated (for example in matrix).
Handle M_LIMIT_EXCEEDED in matrix
Maybe dont clear cache for body items when filtering.
Pressing enter on a pinned message should go to the message in the messages tab.
Display file list for nyaa.
Remove reply formatting for NOTICE in matrix as well.
Implement our own encryption for matrix. This is also needed to make forwarded message work. Pantalaimon ignores them!
Modify matrix sync to download and parse json but not handle it, and then add a function to handle the json. This would allow us to remove all the mutex code if we would call that new method from the main thread.
Fetch replies/pinned message using multiple threads.
Show in room tags list when there is a message in any of the rooms in the tag.
Show images while they download by showing them as scanlines starting from the top. Needed for slow websites such as 4chan.
Use curl parallel download instead of downloading with multiple threads. This can be done with multiple -O parameters.
Add functionality to ignore users in matrix. This is done with an ignore request and we wont get messages and invites from that user anymore. Also add option to ignore in the invites page.
Add keybind to go to invites page from any page.
Show marker beside pinned messages tab name if there are new pinned messages.
Make /logout work everywhere, not only in room message input (or add a logout button to settings tab?).
Add a notifications tab to show messages that mention us in all rooms (and then press enter to go to that message in that room), also add a unread/mentioned rooms list tab to only show rooms with unread messages or mentions.
Disable message input in matrix when muted.
Preview rooms?
Handle matrix token being invalidated while running.
Update upload limit if its updated on the server.
Editing a reply removes reply formatting (both in body and formatted_body). Element also does this when you edit a reply twice. This breaks element mobile that is unable to display replied-to messages without correct formatting (doesn't fetch the replied-to message). This also removes the mentioned name which breaks mention for reply.
Implement m.room.tombstone.
Show a marker when a room uses encryption.
Scroll tabs if there are more than 3 tab items and show arrow on left/right side when there are more items to see.
Make a shader for Text for changing color instead of updating the text geometry. Or loop vertices and set their color to the new color without updating the text geometry.
Automatically retry sending messages that fails to send (after timeout). These failed to send messages should be stored on disk and retried when going back to the room or restarting QuickMedia.
Also make message deletion provisional (make it gray while its deleting the message).
Continue matrix requests when switching room, instead of resetting them when going from chat page to room list page (such as post message request).
Improve /sync by not removing cached data on initial sync, and also always append data to sync file instead of overwriting sync file on "initial sync". Also cache "since", but take into consideration that not all messages are fetched on the initial sync,
then add a gap between old messages from before sync and after sync so we can fetch the messages between the old messages and new messages and remove the gap when the fetched messages contains any of the old messages. After the sync, ignored users messages should be removed from the cache and messages list. Also take into consideration unignoring users.
Fetching of previous messages should also be saved in the /sync file and messages fetched with get_message_by_id, which would cache embedded items and pinned messages; also cache users.
If manga page fails to download then show "failed to download image" as text and bind F5 to refresh (retry download).
Use <img src to add custom emojis, and add setting for adding/removing custom emoji.
Set window title when room name changes in matrix.
Create multiple BodyItem types. BodyItem has a lot of fields and most of them are not always used.
Add grid view to matrix and navigate between them using alt+arrow keys.
Remove display names from reactions if there are many reactions, and instead group them into: reaction (#number of this type of reaction); for example: 👍 2.
Make reaction and deleted message provisional.
Allow removing reactions.
When fetching previous messages in matrix, fetching until there are 0 messages or until there is at least 1 visible item. This is needed because right now we could fetch 10 messages, all which are delete/edit/react and it will look like there are no more messages to fetch to the user.
QuickMedia crashes if you enter a room that you have left before. This could happen if cache is loaded that has a room that is then getting removed when sync is finished.
Limit size of Entry and scroll content instead.
Instead of doing a GET for the first N bytes to check if a video is streamable, start streaming the video and if the first bytes doesn't contain MOOV then wait until the whole video has downloaded before playing it.
Implement matrix spoiler, see: https://github.com/matrix-org/matrix-doc/blob/master/proposals/2010-spoilers.md.
Replace sfml font glyph loading completely with FreeType. There is a very old bug in sfml that causes text to get corrupt sometimes. Im guessing this happens when adding new characters to the font atlas and that coordinates for the glyphs become incorrect?
Add arguments to pipe plugin to pass input and output fifo for sending commands to QuickMedia and receiving events.
Create a workaround for dwm terminal swallow patch stealing mpv when moving QuickMedia to another monitor sometimes. Maybe check for structure notify events on mpv and reparent and select input on the mpv window again?
Add option to decline and mute user in invites. This is to combat invite spam, where muted users cant invite you.
Add an option to select video resolution, if we want to use less power and less bandwidth for example.
Check what happens with xsrf_token if comments are not fetched for a long time. Does it time out? if so do we need to refetch the video page to get the new token?.
Add support for comments in live youtube videos, api is at: https://www.youtube.com/youtubei/v1/live_chat/get_live_chat?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8.
Make video visible when reading comments (youtube).
When ui is scaled then the predicted thumbnail size will be wrong since its scaled in Body but not in the plugins where they are requested.
Check if get_page handlers in pages need to check if next batch is valid. If the server returns empty next batch we shouldn't fetch the first page...
Cloudflare kicks in when downloading manga on manganelo.. figure out a way to bypass it. This doesn't seem to happen when using python requests as is done in AutoMedia.
Replace cppcodec with another library for base64 url encoding/decoding. Its way too large for what it does.
Revert back to old fuzzy search code or use levenshtein distance, then reorder items by best match. This could be done by having a second vector of indices and use that vector everywhere body items by index is accessed (including selected_item). Also perform the search in Body::draw when search term has been modified. This allows us to automatically update that new vector.
Update subscriptions page either with f5 and automatically update it when adding/removing subscriptions.
Update room name and topic text in ui when they change.
Support webp directly without using ffmpeg to convert it to a png.
Add client side 4chan file size limit (note, webm has different limit than images).
Add client side 4chan max comment chars limit.
Dynamically fetch 4chan api key, if it ever changes in the future. Same for youtube.
Set curl download limits everywhere (when saving to file, downloading to json, etc...).
In the downloader if we already have the url in thumbnail/video cache, then copy it to the destination instead of redownloading it. This would also fix downloading images when viewing a manga page.
Update timestamp of messages posted with matrix (and move them to the correct place in the timeline) when we receive the message from the server. This is needed when the localtime is messed up (for example when rebooting from windows into linux).
Remove dependency on imagemagick and create a function that forks the processes and creates a thumbnail from an input filepath and output filepath. That new process can use sf::Image to load and save the images.
|