Compare commits

..

4460 Commits

Author SHA1 Message Date
e476dbe25b limit feeds and delete materialized views 2024-08-14 19:38:54 +02:00
e319c35f09 Videos: use intermediary variable when using CONFIG.po_token 2024-08-13 20:56:09 +02:00
2d18ff1f80 Add ability to set po_token and visitordata ID (#4789)
This PR adds two new config option, to pass a PO token (config 'po_token') and
a visitor ID (config 'visitor_data') to Youtube. These two strings are required
to play videos using the WEB client.

Warning: These strings gives much more identifiable information to Google!

If the po_token setting is filled in, then the WEB client is used. If not, the
Android client is used. TvHtml5ScreenEmbed will still be used as a fallback.

Script for generating po_token and visitor_data:
https://github.com/iv-org/youtube-trusted-session-generator

Helps with issue 4734
2024-08-13 20:35:43 +02:00
2d7869b48b Add support for an external signature server (#4772)
This PR adds support for inv_sig_helper, which offloads the player fetching,
function extraction and signature parsing, which in turn allows to use the
web client to watch videos.

When the new config option "signature_server" is not set, the logic for the
external signature server is not enabled and invidious behaves like before.

This PR also updates the crystal overrides because the stdlib changed quite
a while ago (See issue 11049 at crystal-lang/crystal) and those were required
to properly use TCP/unix sockets.

Closes issue 4649
2024-08-13 20:26:59 +02:00
88b9f17388 Ameba: Fix Naming/VariableNames (#4790)
Related to issue 2231
2024-08-13 20:26:15 +02:00
7a7d1137d6 Translations update from Hosted Weblate (#4659) 2024-08-13 20:25:52 +02:00
3add83c49e Update Norwegian Bokmål translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Petter Reinholdtsen <pere-weblate@hungry.com>
2024-08-13 19:51:36 +02:00
a8825a27d4 Update Serbian (cyrillic) translation
Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Bulgarian translation

Update German translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jose Delvani <delvani.eletricista@gmail.com>
Co-authored-by: Least Significant Bite <leastsignificantbite@proton.me>
Co-authored-by: NEXI <nexiphotographer@gmail.com>
Co-authored-by: Radoslav Lelchev <rlelchev@abv.bg>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: Unacceptium <unacceptium@proton.me>
Co-authored-by: hiatsu0 <hietsu@gmail.com>
2024-08-13 19:51:36 +02:00
bedcf97fbf Update Korean translation
Co-authored-by: Conflict3618 <won_ennui_0i@icloud.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2024-08-13 19:51:36 +02:00
89c17f2127 Update Serbian (cyrillic) translation
Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Bulgarian translation

Update German translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jose Delvani <delvani.eletricista@gmail.com>
Co-authored-by: Least Significant Bite <leastsignificantbite@proton.me>
Co-authored-by: NEXI <nexiphotographer@gmail.com>
Co-authored-by: Radoslav Lelchev <rlelchev@abv.bg>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: Unacceptium <unacceptium@proton.me>
Co-authored-by: hiatsu0 <hietsu@gmail.com>
2024-08-13 19:51:36 +02:00
905fed66d1 Update Finnish translation
Update Finnish translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Bulgarian translation

Update German translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jiri Grönroos <jiri.gronroos@iki.fi>
Co-authored-by: Jose Delvani <delvani.eletricista@gmail.com>
Co-authored-by: Least Significant Bite <leastsignificantbite@proton.me>
Co-authored-by: NEXI <nexiphotographer@gmail.com>
Co-authored-by: Radoslav Lelchev <rlelchev@abv.bg>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: Tuomas Hietala <tuomas.hietala@iki.fi>
Co-authored-by: Unacceptium <unacceptium@proton.me>
Co-authored-by: hiatsu0 <hietsu@gmail.com>
2024-08-13 19:51:36 +02:00
f837d99eab Update Persian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Wireless Acquired <clcsdtxsl@proton.me>
2024-08-13 19:51:36 +02:00
86ec5ad6e0 Update Swedish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
2024-08-13 19:51:36 +02:00
ae93146f47 Update French translation
Update French translation

Update French translation

Update French translation

Co-authored-by: ABCraft19 <lesenfantsbergaoui@gmail.com>
Co-authored-by: Duc-Thomas <duckiduc.dev@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Patricio Carrau <duckycb@proton.me>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2024-08-13 19:51:36 +02:00
e538410262 Update Dutch translation
Update Dutch translation

Co-authored-by: Dick Groskamp <dikgro@yahoo.co.uk>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Martijn Westerink <martijn.westerink.86@gmail.com>
2024-08-13 19:51:36 +02:00
8ad19f06ee Update Serbian (cyrillic) translation
Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Bulgarian translation

Update German translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jose Delvani <delvani.eletricista@gmail.com>
Co-authored-by: Least Significant Bite <leastsignificantbite@proton.me>
Co-authored-by: NEXI <nexiphotographer@gmail.com>
Co-authored-by: Radoslav Lelchev <rlelchev@abv.bg>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: Unacceptium <unacceptium@proton.me>
Co-authored-by: hiatsu0 <hietsu@gmail.com>
2024-08-13 19:51:36 +02:00
366732b4fd Update Serbian (cyrillic) translation
Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Bulgarian translation

Update German translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jose Delvani <delvani.eletricista@gmail.com>
Co-authored-by: Least Significant Bite <leastsignificantbite@proton.me>
Co-authored-by: NEXI <nexiphotographer@gmail.com>
Co-authored-by: Radoslav Lelchev <rlelchev@abv.bg>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: Unacceptium <unacceptium@proton.me>
Co-authored-by: hiatsu0 <hietsu@gmail.com>
2024-08-13 19:51:36 +02:00
32ea9cfe16 Update Icelandic translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
2024-08-13 19:51:36 +02:00
53a60bf7bd Update Portuguese translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Sergio Marques <so.boston.android@gmail.com>
2024-08-13 19:51:36 +02:00
2d485b18a4 Update Welsh translation
Add Welsh translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: newidyn <grugallt@protonmail.ch>
2024-08-13 19:51:36 +02:00
5cb1688c78 Update Catalan translation
Co-authored-by: Daniel <trikaphundo@users.noreply.hosted.weblate.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2024-08-13 19:51:36 +02:00
456b00a699 Update Ukrainian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
2024-08-13 19:51:36 +02:00
84aded85c5 Update Serbian (cyrillic) translation
Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Bulgarian translation

Update German translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jose Delvani <delvani.eletricista@gmail.com>
Co-authored-by: Least Significant Bite <leastsignificantbite@proton.me>
Co-authored-by: NEXI <nexiphotographer@gmail.com>
Co-authored-by: Radoslav Lelchev <rlelchev@abv.bg>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: Unacceptium <unacceptium@proton.me>
Co-authored-by: hiatsu0 <hietsu@gmail.com>
2024-08-13 19:51:36 +02:00
e99b591855 Update Russian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Stepan <iam@amphetom.fun>
2024-08-13 19:51:36 +02:00
7cf7cce0b2 Update Greek translation
Update Greek translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Open Contribution <open.alat4@slmail.me>
Co-authored-by: mpt.c <open.alat4@slmail.me>
2024-08-13 19:51:36 +02:00
f842033eb5 Update Serbian (cyrillic) translation
Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Bulgarian translation

Update German translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jose Delvani <delvani.eletricista@gmail.com>
Co-authored-by: Least Significant Bite <leastsignificantbite@proton.me>
Co-authored-by: NEXI <nexiphotographer@gmail.com>
Co-authored-by: Radoslav Lelchev <rlelchev@abv.bg>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: Unacceptium <unacceptium@proton.me>
Co-authored-by: hiatsu0 <hietsu@gmail.com>
2024-08-13 19:51:36 +02:00
c9fb19431d Update Serbian (cyrillic) translation
Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Update Bulgarian translation

Update German translation

Update Serbian (cyrillic) translation

Update Serbian translation

Update Finnish translation

Update Italian translation

Update Hungarian translation

Update Portuguese (Brazil) translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jose Delvani <delvani.eletricista@gmail.com>
Co-authored-by: Least Significant Bite <leastsignificantbite@proton.me>
Co-authored-by: NEXI <nexiphotographer@gmail.com>
Co-authored-by: Radoslav Lelchev <rlelchev@abv.bg>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: Unacceptium <unacceptium@proton.me>
Co-authored-by: hiatsu0 <hietsu@gmail.com>
2024-08-13 19:51:36 +02:00
4b8bfe1201 use docker compose instead of docker-compose for CI 2024-08-13 15:02:02 +02:00
e6c39f9e3a add pot= parameter now required by youtube 2024-08-13 14:37:35 +02:00
5e38ef59da Ameba: Fix Lint/UselessAssign (#4795)
Related to issue 2231
2024-08-11 13:38:29 +02:00
80ffc442f2 HTML: Add rel="noreferrer noopener" to external links (#4667)
Note: Does not add rel="noreferrer noopener" to:
 * links in channel description
 * links in video descriptions
 * links in video comments

Related to issue 4267
2024-08-11 13:35:57 +02:00
9bf754ed4f Remove unused methods in Invidious::LogHandler (#4812)
Closes issue 4791
2024-08-11 11:45:56 +02:00
fa6c5158c5 Ameba: Fix Lint/NotNilAfterNoBang (#4796)
Related to issue 2231
2024-08-11 11:45:05 +02:00
b45310c7d4 Ameba: Fix unused argument Lint warnings (#4805)
Related to issue 2231
2024-08-11 11:43:56 +02:00
eb2dfe0ab1 Ameba: i18next.cr fixes (#4806)
Related to issue 2231
2024-08-11 11:41:36 +02:00
cc36a82933 SigHelper: Fix some logic errors raised during code review 2024-08-07 23:26:10 +02:00
7798faf234 SigHelper: Make signature server optional and configurable 2024-08-07 23:25:35 +02:00
ec1bb5db87 SigHelper: Add support for PLAYER_UPDATE_TIMESTAMP opcode 2024-08-07 23:25:32 +02:00
3b7e45b7bc SigHelper: Small fixes + suggestions from code review 2024-08-07 23:12:38 +02:00
e098c27a45 Remove unused methods in Invidious::LogHandler 2024-07-28 16:44:30 -07:00
90e94d4e6c Merge pull request #4792 from syeopite/disable-ameba-rules
Ameba: Disable rules
2024-07-27 02:31:31 +00:00
6506b8dbfc Ameba: Fix Naming/PredicateName 2024-07-25 20:08:26 -07:00
61d75050e4 SigHelper: Use 'URI.parse' instead of 'URI.new'
Co-authored-by: Brahim Hadriche <brahim.hadriche@gmail.com>
2024-07-25 22:13:08 +02:00
10e5788c21 Videos: Send player sts when required 2024-07-25 22:13:08 +02:00
b509aa91d5 SigHelper: Fix many issues 2024-07-25 22:13:08 +02:00
ec8b7916fa Videos: Make use of the video decoding 2024-07-25 22:13:08 +02:00
56a7488161 Helpers: Add inv_sig_helper client 2024-07-25 22:13:08 +02:00
a845752fff Jobs: Remove the signature function update job 2024-07-25 22:13:08 +02:00
63a729998b Misc: Sync crystal overrides with current stdlib 2024-07-25 22:13:07 +02:00
205f988491 Ameba: Fix Naming/MethodNames 2024-07-24 20:04:44 -07:00
0db3b830b7 Ameba: Fix Lint/HashDuplicatedKey 2024-07-24 20:03:41 -07:00
c8fb75e6fd Ameba: Fix Lint/UnusedBlockArgument 2024-07-24 19:59:20 -07:00
636a6d0be2 Ameba: Fix Lint/UnusedArgument 2024-07-24 19:57:54 -07:00
3415507e4a Ameba: undo Lint/NotNilAfterNoBang in signatures.cr
File is set to be removed with #4772
2024-07-24 19:48:34 -07:00
53223f99b0 Add ability to set po_token and visitordata ID 2024-07-24 19:28:47 +02:00
325561e755 Channel: parse subscriber count and channel banner (#4785)
This PR adds support for parsing the newer channel header format
(banner + subscription parsing)

Before this change:
* 0 subscribers
* No banner image

After this change:
* Example with Mr Breast channel: 299M
* Image banner is visible

Closes issue 4783
2024-07-21 17:24:09 +02:00
09bf09befe Player: Fix playback position of already watched videos (#4731)
Trying to watch an already watched video will make the video start 15 seconds
before the end. This is not very comfortable when listening to music or
watching/listening playlists over and over.

This can be easily tested on any instance with the "Save playback position"
enabled in the Preferences.

Closes issue 3976
2024-07-21 17:24:06 +02:00
7fdbda612f Videos: Fix genre url being unusable (#4717)
Closes issue 4700
2024-07-21 17:24:03 +02:00
4f60feee17 API: Fix out of bound error on empty playlists (#4696)
Before this PR, Invidious assumed that every playlist had at least one video.
When a playlist had no videos, Invidious was throwing an "Index out of bounds"
exception.

The following API endpoints were impacted:
* api/v1/playlists/:plid
* api/v1/auth/playlists/:plid

Fixes issue 4679
2024-07-21 17:24:01 +02:00
733bd27a5c Handle playlists cataloged as Podcast (#4695)
Videos of a playlist cataloged as podcast are called "episodes" therefore
Invidious was not able to find video in the text value inside the stats array.

Test case: "/playlist?list=PLDu-Eh5lUs1a4irCbnxMIB6FrUMaTXgVF"

Fixes issue 4688
2024-07-21 17:23:58 +02:00
1ff0775f4b API: Fix duplicated query parameters in proxied video URLs (#4587)
This pull request fixes that bug that was causing the query parameters to get
doubled in the streaming URLs when '?local=true' is passed to the
'/api/v1/videos/{id}' API endpoint.

Before: host/path?parameters?parameters
After: host/path?parameters

No associated open issue
2024-07-21 17:23:53 +02:00
e62d4db752 API: Return actual stream height, width and fps (#4586)
At the moment Invidious will return hardcoded data for the 'size',
'qualityLabel' and 'fps' fields for streams, when such hardcoded data is
available, otherwise it just omits those fields from the response (e.g. with
the AV1 formats). Those issues are especially noticable when Invidious claims
that 50fps streams have 60fps and when it claims that the dimensions for a
vertical video are landscape. The DASH manifests that Invidious generates
already use the correct information.

This pull request corrects that issue by returning the information that
YouTube provides instead of hardcoded values and also fixes the long
standing bug of Invidious claiming that audio streams have 30 fps.

Here are two test cases:
50/25/13fps: https://youtu.be/GbXYZwUigCM (/api/v1/videos/GbXYZwUigCM)
vertical video: https://youtu.be/hxQwWEOOyU8 (/api/v1/videos/hxQwWEOOyU8)

Originally these problems were going to be solved by the complete refactor
of stream handling in 3620, but as that pull request got closed by the stale
bot over a month ago and has such a massive scope that it would require a
massive amount of work to complete it, I decided to open this pull request
that takes a less radical approach of just fixing bugs instead of a full
on refactoring.

FreeTube generates it's own DASH manifests instead of using Invidious' one,
so that it can support multiple audio tracks and HDR. Unfortunately due to
the missing and inaccurate information in the API responses, FreeTube has
to request the DASH manifest from Invidious to extract the height, width and
fps. With this pull request FreeTube could rely just on the API response,
saving that extra request to the Invidious instance. It would also make it
possible for FreeTube to use the vp9 streams with Invidious, which would
reduce the load on the video proxies.

Closes issue 4131
2024-07-21 17:23:50 +02:00
8b1da2001e Preferences: Fix handling of modified source code URL(#4437)
Before this PR, setting the modified code repo URL through the preferences
page in Invidious was broken:

* the HTML input tag for this field had invalid type "input"
  (though browser falls back on text input)

* the URL was used to set the "checked" property and not as a plain value,
  which makes no sense for a text-based input (and resulted in a blank field)

* when the submitted field is empty, the retrieved value was an empty 'String'
  instead of 'nil', causing the "modified source code URL" to be an empty
  'href' link which just pointed to the current page

No associated open issue
2024-07-21 17:23:48 +02:00
5a12005b48 API: Fix URL for vtt subtitles (#4221)
For 'fmt=vtt' to work, the 'fmt' parameter needs to be replaced
in the original caption api URL.

No associated open issue
2024-07-21 17:23:44 +02:00
8575794bad Exclude spec/parsers_helper from Lint/SpecFilename
False positive
2024-07-17 12:52:13 -07:00
fad0a4f52d Ameba: Fix Lint/UselessAssign 2024-07-17 12:39:40 -07:00
fa50e0abf4 Simplify last_node retrieval
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2024-07-17 12:21:48 -07:00
76ab51e219 Ameba: Disable Naming/BlockParameterName 2024-07-17 12:17:05 -07:00
8258062ec5 Ameba: Fix Lint/NotNilAfterNoBang 2024-07-15 17:36:00 -07:00
8d9723d43c Disable Naming/AccessorMethodName rule
Most cases of Naming/AccessorMethodName are false positives
2024-07-11 21:15:45 -07:00
8a90add310 Ameba: Fix Naming/VariableNames
Fix Naming/VariableNames in comment renderer

Fix Naming/VariableNames in helpers/utils

Fix Naming/VariableNames in api/v1/misc.cr
2024-07-11 20:56:28 -07:00
c45e710845 Disable Documentation/DocumentationAdmonition rule 2024-07-11 20:47:24 -07:00
593257a750 Fix typo 2024-07-11 20:45:27 -07:00
bad92093bf Channels: Add sort options to streams (#4224) 2024-07-10 22:28:22 +02:00
436a61e3bb API: Fix error code for disabled popular endpoint (#4296)
When visiting /api/v1/popular and popular endpoint is disabled
Before:

500 {"error":"Closed stream"}

After

403 {"error":"Administrator has disabled this endpoint."}
2024-07-10 22:25:31 +02:00
5e0f55333a Allow embedding videos in local HTML files (#4450)
The current Content Security Policy does not allow to embed videos
inside local HTML files which are viewed in the browser via the file
protocol. This commit adds the file protocol to the allowed frame
ancestors, so that the embedded videos load correctly in local HTML
files.

This behaviour is consistent which how the official YouTube website
allows to embed videos from itself.

Closes issue 4448
2024-07-10 22:24:18 +02:00
de61b163a3 CI: Bump Crystal version matrix (#4654) 2024-07-10 22:21:17 +02:00
99c7e9e800 YtAPI: Remove API keys like official clients (#4655)
This PR removes API keys from innertube requests, as the official clients
did it too.
2024-07-10 22:19:51 +02:00
e9bab06e90 HTML: Use full URL in the og:image property (#4675)
Some opengraph implementations don't support a URL without the domain
therefore failing to fetch the video thumbnail and channel image.
This pull request basically fixes that.
2024-07-10 22:17:45 +02:00
a56a724a55 Rewrite transcript logic to be more generic (#4747)
The transcript logic in Invidious was written specifically as a workaround for
captions, and not transcripts as a feature.

This PR genericises the logic as so it can be used to implement transcripts
within Invidious.

The most notable change is the added parsing of section headings when it was
previously skipped over in favor of regular lines.
2024-07-10 22:14:56 +02:00
0a54e26536 CI: Run Ameba (#4753)
This PR simply adds Ameba to the CI but doesn't actually fix any of the
detected issues.
2024-07-10 22:13:45 +02:00
d135e5b7f7 CI: Add release based containers (#4763)
This PR changes the current master based container to use "master" tag instead
of "latest" tag and adds a new workflow to build a container on each new
release which has the "latest" tag, and a tag based on the current released
version.
2024-07-10 22:11:01 +02:00
911dad6935 Channel: parse subscriber count and channel banner 2024-07-09 14:43:14 -04:00
220cc9bd2f Typo
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2024-07-04 10:14:19 -07:00
aace30b2b4 Bump nightly container build workflow crystal ver 2024-07-04 10:11:36 -07:00
64d1f26ece Fix trigger for stable container build 2024-07-01 21:39:14 -07:00
8f5c6a602b Rename container workflows 2024-07-01 21:35:08 -07:00
dd38eef41a Add workflow to build container on release 2024-06-24 11:45:00 -07:00
848ab1e9c8 Specify which workflow builds from master 2024-06-24 11:36:11 -07:00
933802b897 Use "master" label for master container build 2024-06-24 11:34:55 -07:00
3bac467a8c Call as? instead of as to not force string conversion 2024-06-19 12:52:53 +02:00
248df785d7 Update spec and rollback to last commits changes 2024-06-18 20:55:14 +02:00
6b429575bf Update ameba version 2024-06-16 16:22:01 -07:00
e0ed094cc4 Cache ameba binary 2024-06-16 13:29:06 -07:00
a644d76497 Update ameba config 2024-06-16 13:21:55 -07:00
45fd4a1968 Add job to lint code through Ameba in CI 2024-06-16 13:21:55 -07:00
e82c965e89 Player: Fix video playback for videos that have already been watched.
Trying to watch an already watched video will make the video start 15
seconds before the end of the video. This is not very comfortable when
listening to music or watching/listening playlists over and over.
2024-06-15 18:15:51 -04:00
f466116cd7 Extract label for transcript in YouTube response 2024-06-13 09:07:20 -07:00
5b519123a7 Raise error when transcript does not exist 2024-06-11 18:46:34 -07:00
0224162ad2 Rewrite transcript logic to be more generic
The transcript logic in Invidious was written specifically
as a workaround for captions, and not transcripts as a feature.

This commit genericises the logic a bit as so it can be used for
implementing transcripts within Invidious' API and UI as well.

The most notable change is the added parsing of section headings
when it was previously skipped over in favor of regular lines.
2024-06-11 18:23:01 -07:00
04ca64691b Make solution complaint with spec 2024-05-30 22:37:55 +02:00
5957523624 Improve code quallity 2024-05-30 22:13:30 +02:00
629599f940 Fix change in parser file 2024-05-30 21:57:15 +02:00
31ad708206 fix: Handle nil value for genreUcid in Video struct 2024-05-30 21:56:33 +02:00
1ae14cc224 move helm chart to a dedicated github repository (#4711) 2024-05-27 00:40:43 +02:00
3b773c4f77 Fix missing commas 2024-05-14 19:02:41 +02:00
57e606cb43 Add back missing resolution field 2024-05-14 19:02:41 +02:00
f57aac5815 Fix the missing p in the quality labels.
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2024-05-14 19:02:41 +02:00
71a821a7e6 Return actual height, width and fps for streams in /api/v1/videos 2024-05-14 19:02:32 +02:00
e0d0dbde3c API: Check if playlist has any videos on it.
Invidious assumes that every playlist will have at least one video
because it needs to check for the `index` key. So if there is no videos
on a playlist, there is no `index` key and Invidious throws
`Index out of bounds`
2024-05-13 21:07:46 -04:00
90fcf80a8d Handle playlists cataloged as Podcast
Videos of a playlist cataloged as podcast are called episodes therefore
Invidious was not able to find `video` in the `text` value inside the
stats array.
2024-05-13 19:39:46 -04:00
c4fec89a9b Apply suggestions from code review 2024-05-10 11:23:11 -07:00
9d66676f2d Use full URL in the og:image property. 2024-05-01 22:21:18 -04:00
f696f96824 Add rel="noreferrer noopener" to external links 2024-04-30 03:40:19 +00:00
2fdb6dd644 CI: Bump Crystal version in docker too 2024-04-27 21:02:37 +02:00
470245de54 YtAPI: Remove API keys like official clients 2024-04-27 20:48:42 +02:00
b0ec359028 CI: Bump Crystal version matrix 2024-04-27 20:01:19 +02:00
eda7444ca4 Update changelog 2024-04-27 00:17:01 +02:00
79b342aee5 Rename legacy changelog file 2024-04-27 00:14:46 +02:00
0ab6d9e748 Videos: Use android test suite client (#4650)
"Temporary" fix, until a better and more permanent solution is found.

Closes issue 4584
2024-04-26 23:54:24 +02:00
6f889dc695 Trending: Un-nest category if this is the only one (#4600)
Trending music was returning less than 24 videos which was getting
filtered out. Since multiple categories only appears on the default
trending page, we don't need to do that filtering for Music, Gaming or movies.

Closes issue 4596
2024-04-26 23:52:44 +02:00
8eaaeb1c74 API: Add bitrate to formatStreams too (#4590)
Before this PR, the bitrate was only returned for the 'adaptiveFormats'.
They are now also returned the 'formatStreams'.

No linked issue
2024-04-26 23:49:44 +02:00
7c1d2714e0 Comments: Add support for new format (#4576)
The new comment format is similar to the description's commandRuns.

This should fix the issues with most comments but there are still
some more changes that would need to be made like adding support for
formatting (bold, italic, underline) and channel emojis.

Fixes issue 4566
2024-04-26 23:48:15 +02:00
c94c6f4b83 Remove legacy proxy code (#4570)
Also fixes the build on nightly as the offending code was removed.

Related to
https://github.com/iv-org/invidious/pull/4270#issuecomment-1858876952
2024-04-26 23:44:47 +02:00
f1fd197cbc API: convey info "is post live" from Youtube response (#4569)
Returns the 'isPostLiveDvr' field in the videos API when the video
is a post-live DVR (= ended livestream that hasn't been reprocessed
into VOD yet).

Example taken 10 minutes after that livestream ended:
/api/v1/videos/euqnWk-uP6M

{
  ...
  "isPostLiveDvr": true,
  ...
}

Partially fixes 4421
2024-04-26 23:44:30 +02:00
bd549f21e9 API: Add 'authorVerified' field on recommended videos (#4562)
Closes 3323
2024-04-26 23:36:08 +02:00
48ad864572 Videos: Add support for new likes format (#4462)
YouTube added a new format for like data in December 2023.
This PR adds support for parsing saod new format.

Related: LuanRT/YouTube.js issue 557

Closes 4419
2024-04-26 23:30:30 +02:00
bcb679e653 Proxy: Handle non-200 HTTP codes on DASH manifests (#4429)
Before this PR, Invidious assumed that fetching the DASH manifest from
YouTube will always be successful and didn't check the status code.

That meant that if YouTube gave a rate-limiting page, invidious would
return an HTTP 200 response with the 'application/dash+xml' Content-Type
header and the YouTube ratelimiting page as the body.

No associated issue
2024-04-26 23:25:54 +02:00
b163afecb7 API: Parse channel's tags (#4294)
Example from an auto generated channel (Minecraft - Topic):
/api/v1/channels/UCQvWX73GQygcwXOTSf_VDVg

{
  ...
  "tags":[
    "Video game","Indie game","Xbox One","New Nintendo 3DS",
    "PS3","Nintendo Switch","Wii U","Fire OS",
    "Mac operating systems","Apple TV","Xbox 360",
    "PlayStation Vita","PS4","Windows","Linux","Nintendo 3DS",
    "iOS","Windows Phone","iPadOS","Java","Android","tvOS",
    "ChromeOS"
  ]
  ...
}

Example from another channel (Mr Beast):
/api/v1/channels/UCX6OQ3DkcsbYNE6H8uQQuVA

{
  ...
  "tags":["mrbeast6000","beast","mrbeast","Mr.Beast","mr"]
  ...
}

No associated issue
2024-04-26 23:20:30 +02:00
5855e9d188 Translations update from Hosted Weblate (#4164) 2024-04-26 23:19:23 +02:00
33f316c864 Videos: Remove AndroidScreenEmbed client 2024-04-26 23:15:34 +02:00
be291e8f0f Videos: Copy captions over between responses 2024-04-26 22:33:08 +02:00
d49c762609 YtAPI: Add more client infos for Android test suite 2024-04-26 22:26:45 +02:00
7f3ddad12e Videos: Use android test suite client 2024-04-26 22:03:59 +02:00
01e2a5e89d Update Lombard translation
Update translation files

Updated by "Remove blank strings" hook in Weblate.

Update Lombard translation

Add Lombard translation

Co-authored-by: Federico <fv4@users.noreply.hosted.weblate.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2024-04-25 18:35:09 +02:00
bff0b5c85a Update Serbian (cyrillic) translation
Update Serbian (cyrillic) translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: NEXI <nexiphotographer@gmail.com>
2024-04-25 18:35:09 +02:00
2da63bf36d Update Chinese (Simplified) translation
Update Chinese (Simplified) translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
2024-04-25 18:35:09 +02:00
7546cb511d Update Chinese (Traditional) translation
Update Chinese (Traditional) translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
2024-04-25 18:35:09 +02:00
200cfd7579 Update Portuguese (Portugal) translation
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2024-04-25 18:35:09 +02:00
6ed872d72b Update English (United States) translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Lime bar <limebarartist@gmail.com>
2024-04-25 18:35:09 +02:00
58dc63671a Update Korean translation
Update Korean translation

Update Korean translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: simmon <simmon@nplob.com>
Co-authored-by: xrfmkrh <rF3nMd7sRKezjF2vcEQo@protonmail.com>
2024-04-25 18:35:08 +02:00
eba0699c48 Update Serbian translation
Update Serbian translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: NEXI <nexiphotographer@gmail.com>
2024-04-25 18:35:08 +02:00
e3018e00c4 Update Swedish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
2024-04-25 18:35:08 +02:00
b54d45504f Update Spanish translation
Update Spanish translation

Update Spanish translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
2024-04-25 18:35:08 +02:00
64eef948bd Update Dutch translation
Co-authored-by: Gert-dev <Gert-dev@users.noreply.hosted.weblate.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2024-04-25 18:35:08 +02:00
3f9c7b6c19 Update Interlingua translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Software In Interlingua <softinterlingua@gmail.com>
2024-04-25 18:35:08 +02:00
c60d2561d1 Update Arabic translation
Update Arabic translation

Update Arabic translation

Update Arabic translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Rex_sa <rex.sa@pm.me>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2024-04-25 18:35:08 +02:00
0de3b0a96d Update Italian translation
Update Italian translation

Co-authored-by: Federico <fv4@users.noreply.hosted.weblate.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2024-04-25 18:35:08 +02:00
5551b613d3 Update Polish translation
Update Polish translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Matthaiks <kitynska@gmail.com>
2024-04-25 18:35:08 +02:00
ef7f3f5bd4 Update Hindi translation
Update Hindi translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Scrambled777 <weblate.scrambled777@simplelogin.com>
2024-04-25 18:35:08 +02:00
c8369f9dbb Update Croatian translation
Update Croatian translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Milo Ivir <mail@milotype.de>
2024-04-25 18:35:08 +02:00
8d75d6431a Update Vietnamese translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Knight Hat <knightchanelgaming@gmail.com>
2024-04-25 18:35:08 +02:00
a6bcf0280c Update Portuguese translation
Update Portuguese translation

Update Portuguese translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Co-authored-by: Sergio Marques <so.boston.android@gmail.com>
2024-04-25 18:35:08 +02:00
97c4263530 Update Czech translation
Update Czech translation

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2024-04-25 18:35:08 +02:00
dd01b0f5eb Update Japanese translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: maboroshin <maboroshin@users.noreply.hosted.weblate.org>
2024-04-25 18:35:08 +02:00
197b3972a9 Update Ukrainian translation
Update Ukrainian translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2024-04-25 18:35:08 +02:00
cbbaded209 Update Bengali translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Tauhid Alam Rifty <tauhidalamrifty@gmail.com>
2024-04-25 18:35:08 +02:00
066b1c35cc Update Romanian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Wiktor Muzynski <wiktormuzynski@gmail.com>
2024-04-25 18:35:08 +02:00
25cbfd0681 Update Basque translation
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2024-04-25 18:35:08 +02:00
a2f9707b3f Update Danish translation
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2024-04-25 18:35:08 +02:00
89c008211d Update German translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Lenny Angst <lenny@familie-angst.ch>
2024-04-25 18:35:08 +02:00
e92d250a1c Update Portuguese (Brazil) translation
Update Portuguese (Brazil) translation

Update Portuguese (Brazil) translation

Update Portuguese (Brazil) translation

Update Portuguese (Brazil) translation

Update Portuguese (Brazil) translation

Update Portuguese (Brazil) translation

Update Portuguese (Brazil) translation

Update Portuguese (Brazil) translation

Update Portuguese (Brazil) translation

Update Portuguese (Brazil) translation

Update Portuguese (Brazil) translation

Co-authored-by: André Marcelo Alvarenga <andrealvarenga@gmx.net>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jose Delvani <delvani.eletricista@gmail.com>
Co-authored-by: joaooliva <joaooliva@protonmail.com>
2024-04-25 18:35:08 +02:00
668c130f01 Update Turkmen translation
Add Turkmen translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Hydyr Sopyyew <sopyyewhydyr46@gmail.com>
2024-04-25 18:35:08 +02:00
f7ae680c25 Update Turkish translation
Update Turkish translation

Update Turkish translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
2024-04-25 18:35:08 +02:00
24de19d06f only ignore smaller trending categories on default trending tab 2024-04-23 23:51:22 -04:00
f313162fa1 Add bitrate to formatStreams in /api/v1/videos/{id} response 2024-04-21 12:53:31 +02:00
b90cf286fc Fix duplicate query parameters in URLs when local=true for /api/v1/videos/{id} 2024-04-20 20:46:01 +02:00
2b6e71b553 Simplify cvm assignment logic + improve formatting
Co-Authored-By: Samantaz Fox <coding@samantaz.fr>
2024-04-20 10:25:51 -04:00
d1eae10147 make authorVerified a bool value 2024-04-16 18:21:45 -04:00
fbf07e18aa Parse links in the comments
Co-Authored-By: Samantaz Fox <coding@samantaz.fr>
2024-04-11 08:58:33 -04:00
de2287963f fix loading replies to comments, remove unneeded code
Co-Authored-By: Samantaz Fox <coding@samantaz.fr>
2024-04-10 18:32:20 -04:00
039212ed91 escape html, add todo comment 2024-04-10 18:21:53 -04:00
a9f55aa310 fix lint, improve performance 2024-04-10 18:21:53 -04:00
c27bb90e4d Add support for new comment format 2024-04-10 18:21:53 -04:00
b673695aa2 Merge pull request #4561 from ChunkyProgrammer/use-trending-api-for-health-checks
Use Trending API for health checks
2024-04-10 20:21:17 +07:00
990931ff67 Remove legacy proxy code 2024-04-07 11:08:12 -07:00
bfd9c9876e Parse if video is post live dvr and include it in API 2024-04-07 10:26:33 -04:00
2a029b4d8c Add field for authorVerified for recommended videos when using the API 2024-04-04 20:20:27 -04:00
170eef58fd Use trending api for health checks 2024-04-04 19:10:27 -04:00
a9e8aabe1f Merge commit '08390acd0c17875fddb84cabba54197a5b5740e4' into fix/popular-disabled-error 2024-04-01 10:03:37 -04:00
b0c6bdf44c use 403 code 2024-04-01 10:03:29 -04:00
c5eb10b21f Revert "Fix error code for disabled popular endpoint"
This reverts commit 1363fb8094.
2024-04-01 10:02:49 -04:00
08390acd0c Update workaround used to fetch streaming URLs (#4552)
Thanks to LuanRT (From youtube.js) for the fix!

Closes issue 4498
2024-03-31 18:42:10 +02:00
1a2d408d38 Update shorts params 2024-03-31 11:37:13 -04:00
72fe8af850 Merge branch 'master' into stream-sort 2024-03-26 12:19:45 +00:00
0aaa3e6a08 API: Parse channel's tags 2024-03-11 13:31:14 -04:00
499aed37dd Fix handling of modified source code URL setting 2024-03-10 17:51:29 +01:00
99a5e9cbc4 Merge pull request #4473 from SamantazFox/bump-api-clients
YoutubeAPI: bump client versions
2024-03-08 11:23:03 +01:00
619aa3ff05 YoutubeAPI: bump client versions 2024-03-06 21:36:15 +01:00
5ceeefa236 add support for new likes format 2024-03-01 23:45:29 -05:00
4adb4c00d2 routes: Allow embedding videos in local HTML files (fixes #4448)
The current Content Security Policy does not allow to embed videos
inside local HTML files which are viewed in the browser via the file
protocol. This commit adds the file protocol to the allowed frame
ancestors, so that the embedded videos load correctly in local HTML
files.

This behaviour is consistent which how the official YouTube website
allows to embed videos from itself.

Signed-off-by: Tomasz Wilczyński <twilczynski@naver.com>
2024-02-24 20:01:16 +01:00
e8a36985af API: Add APIHandler back (#4431)
This handler should no have been removed in 4276, as it adds the required CORS
header (Access-Control-Allow-Origin) for public acces to the API.

Thanks to iBicha for noticing this!
2024-02-19 00:16:17 +01:00
962ce23cc2 WebVTT::Builder: Add logic to escape special chars (#4414)
Note: WebVTT does allow some tags in the cue payload in some circumstances
while this PR just blindly escapes everything:
https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API#cue_payload_text_tags
2024-02-19 00:16:17 +01:00
e0ce59d3e8 Channels: Add support for multi-image community posts (#4412)
This PR adds a CSS-only image carousel for community posts with more than
one image attached.

Closes issue 3522
2024-02-19 00:16:17 +01:00
c5a3112e49 CSS: expand #contents width on small screens (#4405)
The #contents div now takes the full width on small screens (< 1280px).
All page elements have a little more room, especially the video titles.
2024-02-19 00:16:17 +01:00
d3703baba9 I18n: Add missing translation strings (#4424)
Closes issue 3120
2024-02-19 00:15:44 +01:00
20203f4ec0 I18n: Fix a typo in Finnish localization (#4375) 2024-02-18 23:53:16 +01:00
732553519e Translations update from Hosted Weblate (#4164) 2024-02-18 23:51:53 +01:00
a957b0fb7c remove trailing white spaces 2024-02-16 16:22:43 -05:00
26429bee3f make it so interpolation text can be a hash
Co-Authored-By: Samantaz Fox <coding@samantaz.fr>
2024-02-15 21:45:22 -05:00
ef6b766b29 Add support for multi image community posts 2024-02-15 21:45:21 -05:00
1e6ec605e8 Remove usage of depends_on (#4383) 2024-02-15 22:59:00 +01:00
60f6a345d9 Locales: Fix broken i18Next v3/v4 plurals
Languages impacted: es, fa, pt
2024-02-15 22:12:04 +01:00
d1dddc1adc Locales: Remove Cyrillic text from Serbian (Latin) 2024-02-15 21:37:17 +01:00
00ef004029 Update Norwegian Bokmål translation
Co-authored-by: Deleted User <noreply+73135@weblate.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2024-02-15 18:02:15 +01:00
7ff11e4c44 Update Serbian (cyrillic) translation
Update Serbian (cyrillic) translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: NEXI <nexiphotographer@gmail.com>
2024-02-15 18:02:15 +01:00
8db2e060d9 Update Chinese (Simplified) translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
2024-02-15 18:02:15 +01:00
8b0cbd2a29 Update Chinese (Traditional) translation
Co-authored-by: Jeff Huang <s8321414@gmail.com>
2024-02-15 18:02:15 +01:00
d2ce519559 Update Slovenian translation
Co-authored-by: Damjan Gerl <damjan@damjan.net>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2024-02-15 18:02:15 +01:00
219b587945 Update Korean translation
Update Korean translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: simmon <simmon@nplob.com>
Co-authored-by: xrfmkrh <rF3nMd7sRKezjF2vcEQo@protonmail.com>
2024-02-15 18:02:15 +01:00
e8810509c1 Update Albanian translation
Update Albanian translation

Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2024-02-15 18:02:15 +01:00
9688200caf Update Serbian translation
Update Serbian translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: NEXI <nexiphotographer@gmail.com>
2024-02-15 18:02:15 +01:00
26a50eb4e8 Update Persian translation
Update Persian translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kaambiz <kambizx@gmail.com>
2024-02-15 18:02:15 +01:00
0ce945bfa8 Update Swedish translation
Update Swedish translation

Update Swedish translation

Co-authored-by: Deleted User <noreply+73135@weblate.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Max Bengtzén <aura.kettles.0h@icloud.com>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
2024-02-15 18:02:15 +01:00
aadf848ee6 Update French translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jean Mareilles <waged1266@tutanota.com>
2024-02-15 18:02:15 +01:00
53ce2a1a9a Update Spanish translation
Update Spanish translation

Update Spanish translation

Update Spanish translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
2024-02-15 18:02:15 +01:00
1d5100462b Update Dutch translation
Update Dutch translation

Co-authored-by: Deleted User <noreply+73135@weblate.org>
Co-authored-by: Gert-dev <Gert-dev@users.noreply.hosted.weblate.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2024-02-15 18:02:15 +01:00
986515dc5b Update Indonesian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
2024-02-15 18:02:15 +01:00
1d906aeecc Update Interlingua translation
Add Interlingua translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Software In Interlingua <softinterlingua@gmail.com>
2024-02-15 18:02:15 +01:00
426b472a15 Update Arabic translation
Update Arabic translation

Update Arabic translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Rex_sa <rex.sa@pm.me>
2024-02-15 18:02:15 +01:00
1493e6a086 Update Italian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
2024-02-15 18:02:14 +01:00
3767ab2eeb Update Polish translation
Update Polish translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Matthaiks <kitynska@gmail.com>
2024-02-15 18:02:14 +01:00
fea36fc639 Update Hindi translation
Update Hindi translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Saurmandal <saurmandal@protonmail.com>
Co-authored-by: Snwglb <wishitwasarchived@gmail.com>
2024-02-15 18:02:14 +01:00
a16235d3b9 Update Croatian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Milo Ivir <mail@milotype.de>
2024-02-15 18:02:14 +01:00
99a3bd4fff Update Vietnamese translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Tran Viet Duc <deli50@protonmail.com>
2024-02-15 18:02:14 +01:00
4aed0e1102 Update Portuguese translation
Update Portuguese translation

Update Portuguese translation

Update Portuguese translation

Co-authored-by: Filipe Martins <mvrtinsbeats@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jener Gomes <jenerg1@gmail.com>
Co-authored-by: SC <lalocas@protonmail.com>
Co-authored-by: jamerLamer <akHarINlMYExpSmVPDRT@proton.me>
2024-02-15 18:02:14 +01:00
833c711cba Update Czech translation
Update Czech translation

Co-authored-by: Fjuro <ifjuro@proton.me>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2024-02-15 18:02:14 +01:00
7e1deea15e Update Catalan translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: victor dargallo <victordargallo@disroot.org>
2024-02-15 18:02:14 +01:00
b9ae1a61da Update Japanese translation
Update Japanese translation

Update Japanese translation

Update Japanese translation

Update Japanese translation

Update Japanese translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: maboroshin <maboroshin@users.noreply.hosted.weblate.org>
2024-02-15 18:02:14 +01:00
f062c18b82 Update Ukrainian translation
Update Ukrainian translation

Update Ukrainian translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Сергій <sergiy.goncharuk.1@gmail.com>
2024-02-15 18:02:14 +01:00
f21a532c0d Update Bulgarian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Radoslav Lelchev <rlelchev@abv.bg>
2024-02-15 18:02:14 +01:00
8cec7ba004 Update Russian translation
Update Russian translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Noise Maker <vh0d@disroot.org>
Co-authored-by: hikiko4ern <25303622+hikiko4ern@users.noreply.github.com>
2024-02-15 18:02:14 +01:00
8169cd8977 Update Danish translation
Co-authored-by: Grooty12 <weblate@grooty.site>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2024-02-15 18:02:14 +01:00
8ffc569ebd Update German translation
Update German translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Lenny Angst <lenny@familie-angst.ch>
Co-authored-by: Radoslav Lelchev <rlelchev@abv.bg>
2024-02-15 18:02:14 +01:00
736f35332a Update Portuguese (Brazil) translation
Update Portuguese (Brazil) translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: joaooliva <joaooliva@protonmail.com>
2024-02-15 18:02:14 +01:00
c52c6d3c9a Update Turkish translation
Update Turkish translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
2024-02-15 18:02:14 +01:00
7b84bdb29b API: Add APIHandler back
This handler should no have been removed in 4276, as it adds the required CORS
header (Access-Control-Allow-Origin) for public acces to the API.

Thanks to iBicha for noticing this!
2024-02-13 21:05:26 +01:00
5c0b6d8afa Stats: Fix two swapped function names (#4376)
The function names `count_users_active_6m` and `count_users_active_1m` were
swapped. As the names were swapped on both sides (declaration and use), this
had no functional impact.

No related isse was tracked.
2024-02-12 22:34:13 +01:00
c85b908613 API: Fix missing wildcards after login redirect (#4348)
This PR fixes an issue where the `scopes` parameter would see its wildmark
characters (*) removed during the login page redirection, after that a call
to `/authorize_token` was made while the user was not logged in.

Closes issue 4200
2024-02-12 22:30:48 +01:00
f32764c840 HTML: Preserve playlist in "Watch on YouTube" link (#4342)
It seems that at some point, Youtube changed the URL parameter from `plid`
to `list` and we didn't notice. This fixes that.

Closes #3929
2024-02-12 22:23:44 +01:00
d30dae43fe HTML: Add title to toggle theme icon (#4320) 2024-02-12 22:20:14 +01:00
338d3d9f86 CSS: Fix thumbnails' aspect ratio to prevent CLS (#4278)
Force the thumbnails aspect ratio to 16/9 in order to prevent Cumulative Layout
Shifting (CLS) from hapenning during lazy loading.

It also fixes the problematic, taller thumbnails that Youtube returns for
playlists.

Closes issue 4002
2024-02-12 22:19:14 +01:00
1f51255f2f API: Remove the fields parameter (#4276)
Multiple users have reported that the fields parameter is slowing down API
response times significantly. As most API endpoints are already optimized to
make as few requests as possible to Youtube, there is no point in limiting the
output. Furthermore, the added processing might be part of the broader memory
leak problem (See 1438).

In addition, the small increase in data output is not much of an issue compared
to the huge video proxy that lies next to this API.

No related issue tracked
2024-02-12 22:10:45 +01:00
dcbe52c9fb Videos: Use start time and end time for clips (#4264)
This PR parses the start and end time for clips.

It also adds a new, dedicated API endpoint (`/api/v1/clips/{id}`) for
retrieving the start and end time of a clip.

Here is a sample response from that new endpoint (`video` is a video object,
as described in https://docs.invidious.io/api/common_types/#videoobject):

GET `/api/v1/clips/UgkxxPM3BRphCAPLP88YoUGuj79KXPfpNNO_?pretty=1`

Response:
```
{
  "startTime": 8842.645,
  "endTime": 8855.856,
  "clipTitle": "✂️ Kirby is pink!",
  "video": {}
}
```

Closes issue 3921
2024-02-12 22:10:16 +01:00
bd5df3af5f API: Unescape search suggestions (#4218)
Previously, the suggestion were HTML encoded. This PR fixes that.
2024-02-12 22:03:33 +01:00
9bd2072e1d API: Add playlist and start time to resolve_url
This adds `playlistId` and `startTimeSeconds` to /api/v1/resolveurl if these
informations were returned by Youtube's endpoint.
2024-02-12 22:01:08 +01:00
3b4358dbd4 Extractors: Don't error if AuthorId does not exist (#3869)
Some playlist author's don't have a YouTube channel, so does movies.
This caused various extractors (related videos, search) to fail.

Closes the following issues:
2530, 3349, 3766, 3812, 4133
2024-02-12 21:54:17 +01:00
72bcd3cc72 Handle non-200 status codes for YouTube DASH manifests 2024-02-12 18:55:15 +01:00
cf686202e0 Merge pull request #4423 from tleydxdy/xml-namespace
Fix pubsub feed parsing
2024-02-12 08:29:44 +01:00
6b33820f1f Add missing translation strings
closes #3120
2024-02-08 19:01:19 -05:00
98c421e9f5 Fix when video from pubsub is a scheduled event 2024-02-08 18:58:23 -05:00
c864a63b6d Fix pubsub feed parsing
similar to what's done in #3793, this is causing an assert on my instance
2024-02-08 17:05:11 -05:00
0ad2eff2a4 WebVTT::Builder: Add logic to escape special chars 2024-01-30 15:25:45 -08:00
c005ada487 fix: prevent censoring of self-harm related search queries (#4403)
* fix: prevent censoring of self-harm related search queries

* fix: yt_filters_spec with new flag
2024-01-29 14:59:25 +01:00
4a339df5c4 CSS: expand #contents width on small screens 2024-01-27 00:38:47 +01:00
1c0b4205d4 Add parameter to disable force_resolve in make_client (#4335)
* Add option to disable force_resolve in make_client

Some websites such as archive.org and textcaptcha.com
does not support IPv6 and as such requests fail when Invidious requests
with IPv6 to those services.

* Reenable force_resolve on pubsub subcribe request

* Make force_resolve false by default in make_client

* Remove missed explicit force_resolve=false
2024-01-10 23:01:00 +00:00
b16f66ef00 Exempt issues with "exempt-stale" from staling (#4385)
The exempt-stale label was not actually set to exempt issues from staling...
2024-01-10 20:40:19 +00:00
7cca1285aa Fix two swapped function names 2024-01-06 15:51:31 +08:00
c059829035 Fix typo 2024-01-05 20:39:29 +01:00
7da4a7f72b add null safety to clip parsing 2023-12-26 22:05:09 -05:00
0917efd9cb fix issue where scope would be missing the * if the user was not logged in before calling the authorize endpoint
fix #4200
2023-12-21 13:52:19 +08:00
090b470bfc fix potential memory leak 2023-12-19 23:07:18 -05:00
97c4165f55 Improve depends_on docker-compose (#4249)
* Improve depends_on checking the service is up and healthy before start the service that might cause issue first boot

* Docker version Ubuntu 22.04 has a version which doesn't support restart
2023-12-18 22:18:05 +00:00
87a8207f37 fix: "Watch on YouTube" preserve current playlist 2023-12-18 13:23:55 -03:00
fe8b1b4cc4 Add title to toggle theme icon 2023-12-07 11:43:56 -05:00
f1edb1d6bf fix related video author when id is empty 2023-12-07 09:39:33 -05:00
b5f8b4542a Search: Don't error if AuthorId does not exist 2023-12-07 09:39:33 -05:00
b344d98c25 Add API endpoint for Clips 2023-12-07 09:39:04 -05:00
8c22e6a640 use start time and endtime for clips 2023-12-07 09:39:03 -05:00
6488794218 Unescape search suggestions 2023-12-07 09:36:59 -05:00
9e8baa3539 Move "Projects using Invidious" section to the docs (#4283) 2023-12-06 18:30:52 +01:00
07fe648a9c Remove anti-captcha (#4277) 2023-12-06 18:29:16 +01:00
6da3287e9d Misc: Fix logic for setting user agent (#4265) 2023-12-06 18:28:12 +01:00
37c2f5caed Misc: Use #splat method for macro expressions (#4242) 2023-12-06 18:22:50 +01:00
07b366f06b Chores: Update Crystal CI (#4239) 2023-12-06 18:21:57 +01:00
e8a14446af Videos: Append '&mpd_version=5' to DASH manifest URL (#4196) 2023-12-06 18:20:26 +01:00
813dc6de1c Player: Fix iOS screen timeout in loop mode (#4076) 2023-12-06 18:19:31 +01:00
72478ba704 Remove short sha docker tag (#4312) 2023-12-06 14:20:51 +01:00
9e970fe4bd docker-meta generate versioned docker tags & OCI labels (#4161)
* Use docker-meta to generate tags and labels + versioning

I updated the workflow to have additional tags based on git tags.

This way an administrator can get images by Invidious version tag.

* Use current date as image tag

* Switch to YYYY.MM.DD-SHA_SHORT

* Use short sha to follow existing tagging style

* revert build-push-actions to v5

---------

Co-authored-by: panda <panda@purplehaze.com>
2023-12-06 12:19:21 +01:00
d76fed5850 ci: update github actions (#4209)
* ci: update actions/checkout to v4

* ci: remove patch version from crystal-lang/install-crystal

latest patch will be automatically installed which is 1.8.1 https://github.com/crystal-lang/install-crystal

* ci: update docker/setup-buildx-action to v3

* ci: update docker/build-push-action to v5

* ci: update docker/setup-qemu-action to v3

* ci: update docker/login-action to v3

* ci: actions/stale to v8

https://github.com/actions/stale/blob/main/CHANGELOG.md

* Revert "ci: remove patch version from crystal-lang/install-crystal"

This reverts commit 8c39ce846fa0a7057d66dc25b853c40b2366faf3.
2023-12-01 18:11:45 +00:00
cf61af67ab Update src/invidious/routes/channels.cr sort_by for consistency 2023-11-30 14:34:01 +03:30
1363fb8094 Fix error code for disabled popular endpoint 2023-11-28 21:34:17 -05:00
5f2b43d653 Remove unecessary if condition in videos.cr 2023-11-25 00:48:27 +03:30
6251d8d43f Rename a variable in videos.cr 2023-11-25 00:46:11 +03:30
6868cade05 Rewording and formating 2023-11-23 22:23:54 +01:00
7b6930c16b Remove the 'fields' parameter on the client side too 2023-11-23 18:30:42 +01:00
9d5fa2bcc4 Helpers: remove JSONFilter logic 2023-11-23 18:30:42 +01:00
9310d09f93 Kemal: remove APIHandler middleware 2023-11-23 18:30:37 +01:00
162b89d942 Fix format in videos.cr 2023-11-23 14:44:37 +03:30
0d63ad5a7f Use a single function for fetching channel contents 2023-11-22 14:52:17 +03:30
67571b2492 Replace projects using invidious with doc link 2023-11-21 12:49:47 -08:00
d5df81f0f8 Update README.md
Add GTK+ Pipe Viewer, PlasmaTube
2023-11-21 12:07:40 -08:00
eb27e097ed README: Improve "Projects using Invidious" section 2023-11-21 12:07:07 -08:00
9ce9c54399 Install rsvg-convert on docker images (#4230) (#4282)
In #4103 alpine was updated from 3.16 to 3.18, but in 3.17 librsvg
packages was splitted and rsvg-convert is on his own package.
2023-11-21 19:47:07 +00:00
16c79f1ef5 Fixed aspect ratio for thumnails to prevent CLS 2023-11-21 08:14:45 +01:00
3a5d408602 Remove leftover functions/specs used by the anti-captcha job 2023-11-20 17:40:31 +01:00
7e363fa3c8 Config: Remove anti-captcha related configs 2023-11-20 17:39:51 +01:00
d9416a0be5 Jobs: Remove BypassCaptchaJob 2023-11-20 17:39:13 +01:00
63e5d72466 Remove unused function produce_channel_livestream_url 2023-11-20 15:50:59 +03:30
b40cf6544a Revert "Make head request to resolve short urls"
This reverts commit 7e267da5be.
2023-11-19 16:06:29 -05:00
8338a73e7b add user_agent if empty or crystal 2023-11-17 08:01:56 -05:00
86ee761788 Fix logic for setting user agent 2023-11-15 00:51:43 -05:00
c251c66748 fix youtube api vtt format subtitle
for fmt=vtt to work the fmt parameter in the original caption api url need to be replaced
2023-11-14 13:16:08 +08:00
c5b87e3b5e Channel: Fetch header informations from homepage (#4241) 2023-11-08 23:43:04 +01:00
ed8b84ed15 Replace more * in macro with #splat 2023-11-08 00:49:37 -08:00
8ce91166d6 Remove instance of the * operator in macro expr 2023-11-08 00:42:46 -08:00
8525758583 Use #splat method for macro expressions 2023-11-08 00:37:18 -08:00
ab4c0a1d3c Fetch channel info from home tab instead of about 2023-11-07 23:53:14 -08:00
c31908a011 Update params protobuf for channel about tab 2023-11-07 22:19:56 -08:00
2562f80695 Add CI for Crystal 1.10.1 2023-11-07 23:46:20 +00:00
fead0e14ac Drop support for Crystal 1.6.2 2023-11-07 23:45:01 +00:00
438467f69a Add playback success rate to /api/v1/stats (#4085)
* Add stats-based /videoplayback blockage status

* Count when YouTube returns wrong video as failure

* Cast playback stats hash type prior to return

* Bump stats refresh timer to 10 minutes
2023-11-04 13:52:30 +00:00
db3c57d49f force resolve for everything (#4225) 2023-11-02 22:35:50 +00:00
b0df3774db Add sort options to streams 2023-11-01 21:56:25 +03:30
3881038a32 format 2023-10-26 17:51:38 -04:00
7e267da5be Make head request to resolve short urls 2023-10-26 17:48:58 -04:00
d7901c1e0d type fix 2023-10-26 17:35:52 -04:00
85a5bbd696 Add playlist and start time to the resolve url 2023-10-26 17:24:53 -04:00
8087e64dfe Bump postgre version in dev compose (#4203)
Fix postgre ver diff between dev and prod compose
2023-10-26 00:22:59 +02:00
07de1e236f Videos: Append '&mpd_version=5' to DASH manifest URL
This makes Youtube return a MPD manifest with templates rather than
lengthy <SegmentList>. The returned  manifest is about 44 times smaller.
2023-10-22 17:56:04 +02:00
2414e7db41 User: Add support for importing Youtube watch history (#4171) 2023-10-21 18:33:05 +02:00
1a33012cad CSS: Remove inline styling of the download widget (#4162) 2023-10-21 18:32:40 +02:00
cf7c49deb0 Captions: Use 'fmt=vtt' instead of 'format=vtt' (#4152) 2023-10-21 18:32:28 +02:00
d543a68a84 API: Add "authorVerified" to the video endpoint (#4150) 2023-10-21 18:32:01 +02:00
2a65b5f52e Frontend: Add video timestamp on external links (#4101) 2023-10-21 18:31:42 +02:00
9072fa4355 CSS: Improve links contrast on dark theme (#4100) 2023-10-21 18:31:30 +02:00
88cc62d45e User: Fix importing FreeTube subscriptions with multiple profiles (#4011) 2023-10-21 18:31:18 +02:00
40919c6a83 JS: Update external links exactly once per second 2023-10-21 13:45:15 +02:00
3b219a4c7f remove a debug statement 2023-10-20 13:45:16 -07:00
b809e877a1 fix wrong link (#4183)
The link wasn't working, because there was a lost letter.
2023-10-20 15:40:04 +02:00
0e4d3d89fc update params for fetching stream data (#4156)
* update params for fetching stream data

* Remove link about special parameter
2023-10-20 08:48:56 +02:00
cc703b0274 Removed commented lines 2023-10-17 10:02:08 +03:00
81a4f29c73 add 'Import YouTube watch history (.json)' entry to en-US.json 2023-10-16 21:46:41 -07:00
d7ea5609b2 move styles for download widget to default.css file 2023-10-17 01:00:14 +02:00
0bd415158f Fix importing FreeTube subscriptions with multiple profiles
Co-Authored-By: Samantaz Fox <coding@samantaz.fr>
2023-10-16 00:32:24 -04:00
50977fb5d9 added translation importing watch history from youtube: zh-CN, zh-TW 2023-10-14 16:05:07 -07:00
a1a0e4c59f update readme about importing watch history 2023-10-14 15:56:04 -07:00
b9cbdce976 add: importing watch history from YouTube 2023-10-14 15:49:33 -07:00
8125ddca06 Replace inline styling for download widget with css file 2023-10-12 03:22:34 +02:00
069e91d2a6 alpine v3.18 & Update Helm release postgresql (#4103)
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-10 19:12:21 +00:00
8e45e05fba Get "author_verified" using the instance method instead of using the info hash.
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2023-10-09 09:20:35 +03:00
0aebac5f3e Captions: Use 'fmt=vtt' instead of 'format=vtt' 2023-10-08 12:40:49 +02:00
60fae015d8 Add support for community post page/comments (#4010) 2023-10-07 19:58:54 +02:00
ce0e21400e Search: Parse channel handle (#3994) 2023-10-07 19:56:07 +02:00
7b40775427 Add more fields to PWA manifest (#4145) 2023-10-07 19:55:00 +02:00
1caaf63c8a Refactor WebVTT building logic into WebVTT::Builder (#4070) 2023-10-07 19:53:29 +02:00
eddb54adb1 Routing: Add support for new routes (#4099) 2023-10-07 19:52:48 +02:00
01491bf315 Translations update from Hosted Weblate (#4078) 2023-10-07 19:51:27 +02:00
8ca884a5a3 i18Next: Add exceptions for mixed v3/v4 plural forms (#4147) 2023-10-07 19:50:56 +02:00
3dc0574bb5 Update translation files
Updated by "Squash Git commits" hook in Weblate.

Translation: Invidious/Invidious Translations
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
2023-10-07 19:43:31 +02:00
42b6c8032f Update Norwegian Bokmål translation
Co-authored-by: Petter Reinholdtsen <pere-weblate@hungry.com>
2023-10-07 19:43:31 +02:00
add6b3a602 Update Serbian (cyrillic) translation
Co-authored-by: NEXI <nexiphotographer@gmail.com>
2023-10-07 19:43:31 +02:00
06e01f52cf Update Chinese (Simplified) translation
Co-authored-by: Eric <hamburger2048@users.noreply.hosted.weblate.org>
2023-10-07 19:43:31 +02:00
b73ea63e55 Update Chinese (Traditional) translation
Co-authored-by: Jeff Huang <s8321414@gmail.com>
2023-10-07 19:43:31 +02:00
4723c1b3ee Update Slovenian translation
Co-authored-by: Damjan Gerl <damjan@damjan.net>
2023-10-07 19:43:31 +02:00
53905ac55f Update Korean translation
Co-authored-by: xrfmkrh <rF3nMd7sRKezjF2vcEQo@protonmail.com>
2023-10-07 19:43:31 +02:00
f6fbabc15d Update Albanian translation
Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Radoslav Lelchev <rlelchev@abv.bg>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2023-10-07 19:43:17 +02:00
72aa4f6a6c Update Serbian translation
Co-authored-by: NEXI <nexiphotographer@gmail.com>
2023-10-07 19:43:15 +02:00
265bf2427c Update French translation
Update French translation

Update French translation

Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2023-10-07 19:43:15 +02:00
0d055d4baa Update Spanish translation
Update Spanish translation

Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
2023-10-07 19:43:10 +02:00
9910939f43 Update Indonesian translation
Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
2023-10-07 17:35:08 +00:00
4917c5be4b Update Arabic translation
Co-authored-by: Rex_sa <rex.sa@pm.me>
2023-10-07 17:35:08 +00:00
2326330988 Update Italian translation
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
2023-10-07 17:35:08 +00:00
dd21628792 Update Polish translation
Co-authored-by: Matthaiks <kitynska@gmail.com>
2023-10-07 17:35:07 +00:00
2d6ab80622 Update Croatian translation
Co-authored-by: Milo Ivir <mail@milotype.de>
2023-10-07 17:35:07 +00:00
0fe0524597 Update Czech translation
Co-authored-by: Fjuro <ifjuro@proton.me>
2023-10-07 17:35:06 +00:00
fdf05eaa2b Update Catalan translation
Co-authored-by: victor dargallo <victordargallo@disroot.org>
2023-10-07 17:35:06 +00:00
6799c0b9b8 Update Japanese translation
Co-authored-by: maboroshin <maboroshin@users.noreply.hosted.weblate.org>
2023-10-07 17:35:05 +00:00
4824a1f59a Update Ukrainian translation
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
2023-10-07 17:35:05 +00:00
71cbe97f1a Update Bulgarian translation
Add Bulgarian translation

Co-authored-by: Radoslav Lelchev <rlelchev05@gmail.com>
Co-authored-by: Radoslav Lelchev <rlelchev@abv.bg>
2023-10-07 17:35:05 +00:00
18549e8d27 Add Belarusian translation
Co-authored-by: Maksim <maxklezovich@gmail.com>
2023-10-07 17:35:04 +00:00
9f695faf5d Update Russian translation
Co-authored-by: Radoslav Lelchev <rlelchev@abv.bg>
2023-10-07 17:35:04 +00:00
3cc2b34795 Update Esperanto translation
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
2023-10-07 17:35:03 +00:00
c0d6217cad Update Greek translation
Co-authored-by: fresh <fresh190@protonmail.com>
2023-10-07 17:35:03 +00:00
34b206899d Update German translation
Update German translation

Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Co-authored-by: Radoslav Lelchev <rlelchev@abv.bg>
2023-10-07 17:35:02 +00:00
b56dd5a010 Update Portuguese (Brazil) translation
Update Portuguese (Brazil) translation

Co-authored-by: Henrique <henrique.roberto97@gmail.com>
Co-authored-by: joaooliva <joaooliva@protonmail.com>
2023-10-07 17:35:02 +00:00
68184e9d40 Update Turkish translation
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
2023-10-07 17:35:01 +00:00
7dc9b3f088 Fixed formatting 2023-10-07 20:29:48 +03:00
f26c995344 i18next: Revert some changes, as es/pt/pt-PT aren't mixed up (yet) 2023-10-07 19:12:17 +02:00
ed2a44149e Added authorVerified to the video API v1 route 2023-10-07 17:55:42 +03:00
572d9cf4a7 Remove shortcuts
As per PR comment https://github.com/iv-org/invidious/pull/4145#issuecomment-1750048450
2023-10-06 21:47:51 +05:30
32310b7c9f i18Next: Add exceptions for mixed v3/v4 plural forms 2023-10-06 08:19:27 +02:00
6d177b5fa4 Add shortcuts 2023-10-05 15:26:18 +05:30
877037e114 Add start_url 2023-10-05 15:24:44 +05:30
2e6101e623 Add description 2023-10-05 15:23:00 +05:30
f77e4378fe Add support for viewing comments without js
Improve stylings
2023-09-28 18:09:45 -04:00
4f25069f55 remove unused variable
simplify resolve url

remove trailing spaces

Co-Authored-By: Samantaz Fox <coding@samantaz.fr>
2023-09-27 17:36:06 -04:00
47cc9dc169 JS: Fix missing domain in URL constructor 2023-09-27 23:03:24 +02:00
ea781ceeee Removed unnecessary lines 2023-09-24 10:08:16 +03:00
be2feba17c Lint 2023-09-23 09:57:26 -04:00
a999438ae4 Consistency: rename #add_timestamp_component
Removes the add_ prefix for consistency with the other methods in
WebVTT::Builder
2023-09-23 09:41:43 -04:00
e9d59a6dfd Update src/invidious/helpers/webvtt.cr
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2023-09-23 09:41:43 -04:00
4e97d8ad09 Update documentation for WebVTT.build 2023-09-23 09:41:43 -04:00
d371eb50f2 WebVTT::Builder: rename #line to #cue 2023-09-23 09:41:41 -04:00
0cb7d0b441 Refactor Invidious's VTT logic to use WebVtt.build 2023-09-23 09:40:04 -04:00
54fa59cbb0 Add method to construct WebVTT files
Similar to JSON.Build
2023-09-23 09:20:20 -04:00
8542c974c8 Merge branch 'iv-org:master' into dark-mode-contrast 2023-09-22 11:01:38 +03:00
e8c9b85ef5 Increased footer contrast 2023-09-19 09:15:44 +03:00
8781520b8a Search: Parse channel handle and hide video count when channel handle exists
Co-Authored-By: Samantaz Fox <coding@samantaz.fr>
2023-09-18 20:12:07 -04:00
bb04bcc42c Apply suggestions from code review
add videoId to resolve_url function

Co-Authored-By: Samantaz Fox <coding@samantaz.fr>
2023-09-18 20:10:41 -04:00
f55b96a53b Always craft Community Post params 2023-09-18 20:10:41 -04:00
734f1b7764 Simplify resolveUrl api call
Co-Authored-By: Samantaz Fox <coding@samantaz.fr>
2023-09-18 20:10:41 -04:00
e3c365f3d6 Add support for post page 2023-09-18 20:10:41 -04:00
bb14f79496 Playlists: Use subtitle when author is missing (#4025) 2023-09-18 23:34:30 +02:00
bf35200207 Bump stale timer for PRs (#4107) 2023-09-18 23:33:34 +02:00
98ff03a926 CI: Update crystal version matrix (#4095) 2023-09-18 23:32:42 +02:00
842e9fade5 Captions: Add ability to use Innertube's transcripts API (#4001) 2023-09-18 23:31:56 +02:00
270d606ad8 Changed the default dark theme as well 2023-09-18 08:14:34 +03:00
700c57559b JS: Replace '.setAttribute("href")' with '.href'
Co-authored-by: syeopite <70992037+syeopite@users.noreply.github.com>
2023-09-17 10:21:11 +00:00
760bf4cfb3 Bump stale timer for PRs 2023-09-16 23:22:49 +00:00
bbf067ed55 Bump crystal-install too 2023-09-16 11:55:45 +02:00
33ce0ddf14 Update crystal version matrix in ci.yml 2023-09-16 11:55:42 +02:00
cc03610325 Test crystal 1.8.2 2023-09-16 09:10:48 +00:00
ebee973b24 Routes: Redirect unknown channel tabs to channel home page 2023-09-16 00:54:14 +02:00
06b2a4ba9d Frontend: Use 'timeupdate' event listener rather than setTimeout() 2023-09-16 00:41:46 +02:00
58f4a012b7 Frontend: Add timestamp on switch invidious instance links 2023-09-14 22:28:07 +02:00
2456b62936 Frontend: Add timestamp on invidious embed links 2023-09-14 22:27:36 +02:00
792a999386 Frontend: Add timestamp on youtube+embed links 2023-09-14 22:26:36 +02:00
beec62cf0e Increased link contrast in dark mode 2023-09-14 20:37:35 +03:00
2425c47882 Routing: Add support for the '/live/<id>' route 2023-09-13 23:41:31 +02:00
49b9316b9f Routing: Handle current and future routes more nicely 2023-09-13 23:40:20 +02:00
afb04c3bda HTMLl.Escape the playlist subtitle 2023-09-11 22:35:58 -04:00
d7696574f4 Playlist: Use subtitle when author is missing 2023-09-11 22:35:57 -04:00
eabcea6f4a Remove trailing whitespace in config documentation
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2023-08-29 06:18:35 +00:00
27d8fa112d Fix iOS screen timeout on video playback loop mode (more elegantly) 2023-08-27 14:11:45 +08:00
2a092577c6 Fix iOS screen timeout on video playback loop mode 2023-08-27 12:50:36 +08:00
ac0c0609bb Add workaround for storyboards on local instances (#4040) 2023-08-26 12:15:04 +02:00
7e84d07c27 Playlist import no refresh (#3973) 2023-08-26 12:12:42 +02:00
a8295b452e Search: Add hashtag result (#3989) 2023-08-26 12:11:38 +02:00
95176a8eb4 Translations update from Hosted Weblate (#3977) 2023-08-26 12:11:02 +02:00
1377f2ce7d Revert broken i18next v3 changes made by weblate 2023-08-25 08:24:25 +02:00
3615bb0e62 Update src/invidious/videos/caption.cr
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2023-08-24 16:21:05 -07:00
7d435f082b Update src/invidious/videos/transcript.cr
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2023-08-24 23:20:20 +00:00
1f7592e599 Refactor structure of caption.cr
Rename CaptionsMetadata to Metadata
Nest Metadata under Captions
Unnest LANGUAGES constant from Metadata to main Captions module
2023-08-24 16:00:02 -07:00
23b19c80b3 Update Hindi translation 2023-08-21 02:56:21 +02:00
387f057a96 Update German translation 2023-08-21 02:56:21 +02:00
ce44cb9421 Update Hindi translation 2023-08-19 10:08:18 +02:00
de2ea47854 Update Norwegian Bokmål translation 2023-08-14 14:52:54 +02:00
4b85890c6d Update Slovenian translation 2023-08-12 04:53:16 +02:00
Ati
37f1a6aacf Update Slovak translation 2023-08-10 21:53:28 +02:00
c089d57cdb Update Slovak translation 2023-08-10 21:53:28 +02:00
2b36d3b419 Update errors.cr 2023-08-10 18:45:10 +00:00
6b17bb5250 Regression from #4037 | Fix storyboards
PR #4037 introduced a workaround around YouTube's new integrity checks
on streaming URLs. However, the usage of this workaround prevents
storyboard data from being returned by InnerTube.

This commit fixes that by only using the workaround when calling try_fetch_streaming_data
2023-08-08 15:28:01 -07:00
a81c0f329c Add workaround for storyboards on priv. instances
An upstream problem with videojs-vtt-thumbnails means that URLs gets
joined incorrectly on any instance where `domain`, `external_port` and
`https_only` aren't set.

This commit adds some logic with the 404 handler to mitigate this
problem. This is however only a workaround.

See:
https://github.com/iv-org/invidious/issues/3117
https://github.com/chrisboustead/videojs-vtt-thumbnails/issues/31
2023-08-08 15:13:23 -07:00
709bb7281b Update Slovenian translation 2023-08-07 21:29:48 +02:00
3123478cb2 Update Portuguese translation 2023-08-07 21:29:48 +02:00
ebb69ee4fd Update Vietnamese translation 2023-08-07 21:29:48 +02:00
00ac29a2ba Update Portuguese (Brazil) translation 2023-08-07 21:29:48 +02:00
9715e96adb Update Chinese (Simplified) translation 2023-08-07 21:29:48 +02:00
1e170ef7d0 Update Italian translation 2023-08-07 21:29:48 +02:00
b4e9f173ab Update Italian translation 2023-08-07 21:29:48 +02:00
2117e34e97 Update French translation 2023-08-07 21:29:48 +02:00
a5bcf9ba44 Update Sinhala translation 2023-08-07 21:29:48 +02:00
8a88e51382 Update Odia translation 2023-08-07 21:29:48 +02:00
7bf3f08daf Update Czech translation 2023-08-07 21:29:48 +02:00
b41574481d Update Croatian translation 2023-08-07 21:29:48 +02:00
b6b364c730 Update Portuguese (Brazil) translation 2023-08-07 21:29:48 +02:00
991d30066d Update Japanese translation 2023-08-07 21:29:48 +02:00
d83f92a074 Update Russian translation 2023-08-07 21:29:48 +02:00
6d0a6870cb Update Chinese (Traditional) translation 2023-08-07 21:29:48 +02:00
979168d8de Add Azerbaijani translation 2023-08-07 21:29:48 +02:00
a337150cbf Update Korean translation 2023-08-07 21:29:48 +02:00
b7f6c265f7 Update Japanese translation 2023-08-07 21:29:48 +02:00
d7d95fd725 Update Turkish translation 2023-08-07 21:29:48 +02:00
625d8c00ba Update Ukrainian translation 2023-08-07 21:29:48 +02:00
552893a3c1 Update Esperanto translation 2023-08-07 21:29:48 +02:00
a5a5422014 Update Spanish translation 2023-08-07 21:29:48 +02:00
e3fe6c44f8 Update Polish translation 2023-08-07 21:29:48 +02:00
7a5f5173dd Update Spanish translation 2023-08-07 21:29:48 +02:00
f993b1e119 Update Arabic translation 2023-08-07 21:29:48 +02:00
ab475718c8 Update Polish translation 2023-08-07 21:29:48 +02:00
1837467aeb Update Japanese translation 2023-08-07 21:29:48 +02:00
CRW
cb09f46e04 Add Latin translation 2023-08-07 21:29:47 +02:00
0697b3787f Update Esperanto translation 2023-08-07 21:29:47 +02:00
71693ba606 Update Italian translation 2023-08-07 21:29:47 +02:00
3450896602 Use workaround for fetching streaming URLs (#4037) 2023-08-07 21:29:35 +02:00
4195dcd3cf Shards: Update ameba version and fix typo (#4033) 2023-08-07 21:07:29 +02:00
2f6b2688bb Use workaround for fetching streaming URLs
YouTube appears to be A/B testing some new integrity checks. Adding the
parameter "CgIQBg" to InnerTube player requests appears to workaround
the problem

See https://github.com/TeamNewPipe/NewPipeExtractor/pull/1084
2023-08-06 12:22:22 -07:00
0d27eef047 update ameba version
fix shard.yml authors typo
2023-08-06 17:53:31 +00:00
701f03d5e8 Merge pull request #4008 from syeopite/remove_lsquic 2023-08-04 17:44:49 +02:00
70b80ce8ad I18n: Add translation strings for new feature (fr/en) 2023-07-28 08:11:15 +02:00
a8ba02051b Remove(?) lsquic from make and docker files 2023-07-26 07:25:19 -07:00
c5fe96e936 Remove lsquic from codebase 2023-07-26 07:19:12 -07:00
3509752b79 Rename transcript() to get_transcript() in YT API 2023-07-23 16:52:47 -07:00
e4942b188f Integrate transcript captions into captions API 2023-07-23 14:40:09 -07:00
caac7e2166 Add method to convert transcripts response to vtt 2023-07-23 14:40:08 -07:00
4b3ac1a757 Add method to parse transcript JSON into structs 2023-07-23 14:40:08 -07:00
8e18d445a7 Add method to generate params for transcripts api 2023-07-23 14:40:08 -07:00
7e5935a9da Rename Caption struct to CaptionMetadata
The Caption object does not actually store any text lines for the
subtitles. Instead it stores the metadata needed to display and fetch
the actual captions from the YT timedtext API.

Therefore it may be wiser to rename the struct to be more reflective of
its current usage as well as the future usage once the current caption
retrival system is replaced via InnerTube's transcript API
2023-07-23 14:40:08 -07:00
2e67b90540 Add method to query /youtubei/v1/get_transcript 2023-07-23 14:40:02 -07:00
d956b1826e Community: Parse quiz attachments (#3978) 2023-07-20 08:16:10 +02:00
930b0a158d Channels: Use innertube to fetch the community tab (#3988) 2023-07-20 08:15:06 +02:00
c1a69e4a4a Channels: Use innertube to fetch the community tab 2023-07-18 00:29:25 +02:00
f38d1f33b1 HTML: Add UI element for 'SearchHashtag' in item.ecr 2023-07-18 00:01:16 +02:00
839e90aeff Extractors: Add module for 'hashtagTileRenderer' 2023-07-18 00:01:13 +02:00
c8ecfaabe1 Assets: Add SVG image for hashtag results 2023-07-16 18:29:21 +02:00
69e2eaccc0 RSS Feeds: Fix Nil assertion failed (#3958) 2023-07-16 18:13:55 +02:00
ff6166edf7 Playlists: Fix pagination of Invidious playlists (#3861) 2023-07-16 18:02:27 +02:00
c8ade5194b UI: Nicer buttons (#3763) 2023-07-16 17:36:35 +02:00
598ba7bade Channels: Add support for releases and podcasts tabs (#3980) 2023-07-16 17:35:39 +02:00
70145cba31 Community: Parse Quiz attachments 2023-07-15 06:41:03 -07:00
05cc503391 Fix lint 2023-07-15 12:57:26 +00:00
f2fa3da9d2 Add support for releases and podcasts tabs 2023-07-14 16:15:20 -07:00
0110f865c3 Playlist import no refresh 2023-07-08 16:51:19 -04:00
9b75f79fb5 HTML/CSS: Add thumbnail placeholder in thin mode
This change is required to make the overlay buttons functional
(add to and delete from playlist, mark as watched, etc.)
2023-07-08 21:33:59 +02:00
c17404890c HTML: Use the new pagination component for history/subscriptions 2023-07-08 20:48:37 +02:00
06b2bab795 HTML: Fix thumbnails of related videos (watch page) 2023-07-08 20:48:37 +02:00
411208bbd2 HTML: Reorder buttons on the channel and watch pages 2023-07-08 20:48:36 +02:00
42fa6ad2a3 HTML/CSS: Fix buttons' responsiveness 2023-07-08 20:48:36 +02:00
cc30b00f8c CSS: fix light/dark themes for pure buttons 2023-07-08 20:48:36 +02:00
8718f20688 HTML: Fix thin mode/thumbnail on other items 2023-07-08 20:48:36 +02:00
43dcab225c HTML: merge MixVideo with other types in item.ecr 2023-07-08 20:48:36 +02:00
080c7446c6 HTML: Use new buttons for playlists (save/delete/add videos/etc...) 2023-07-08 20:48:32 +02:00
b6bbfb9b20 HTML: Use new buttons for thumbnail overlays
In addition, this commit also heavily changes the structure of the
generic "video card" item. Main benefits:
  * Improved accessibility for keyboard users
  * Many styling glitches were fixed
  * PlaylistVideos now use the same items as the rest
  * Elements all have distinct CSS classes
  * Design can be expanded to add more icons
2023-07-06 00:58:32 +02:00
7bd6d0ac49 HTML: Use the new pagination component for channel pages 2023-07-06 00:58:30 +02:00
efaf7cb09c HTML: Use the new pagination component for search results 2023-07-06 00:57:40 +02:00
c4ef3bed95 HTML: Use the new pagination component for playlists 2023-07-06 00:23:22 +02:00
77d401cec2 CSS: add styling for the new buttons 2023-07-06 00:23:22 +02:00
57c7b922f7 HTML: Make a dedicated ECR component for items + pagination 2023-07-06 00:23:22 +02:00
c088749744 HTML: Add code to generate page nav buttons 2023-07-06 00:23:22 +02:00
462609d90d Utils: Create a function to append parameters to a base URL 2023-07-06 00:23:22 +02:00
0ba22ef391 I18n: Add a function to determine if a given locale is RTL 2023-07-06 00:23:22 +02:00
507bed6313 Workaround for https://github.com/iv-org/invidious/issues/3909 (#3967) 2023-07-05 13:13:05 +00:00
4a92dce449 config.example.yml: Fix typo in pwgen command (#3965)
`pwdgen` -> `pwgen`.
2023-07-04 08:18:30 +02:00
a38edd7330 Fix Nil assertion failed in RSS feeds 2023-07-01 18:35:01 -05:00
419dbefd6c Remove old warning code about unconfigured 'hmac_key' (#3956) 2023-07-01 22:40:24 +02:00
d7568ac45a Remove old warning code about unconfigured 'hmac_key' 2023-07-01 21:53:56 +02:00
a0cc807821 Translations update from Hosted Weblate (#3907) 2023-07-01 21:34:26 +02:00
9060cc4e53 Config: Mandatory hmac key (#3955) 2023-07-01 21:33:45 +02:00
e2a6f5ddf2 Docker: Add 'hmac_key' to docker-compose.yml 2023-07-01 19:40:28 +02:00
ba43365acb Config: Stop if 'hmac_key' is the default value 2023-07-01 19:38:50 +02:00
f64e311dcd Config: Update example config documentation 2023-07-01 19:29:40 +02:00
1647092b3c Config: Make 'hmac_key' mandatory 2023-07-01 19:29:24 +02:00
61a18e9894 Update Afrikaans translation 2023-06-29 23:52:41 +02:00
d9ae22e979 Update Afrikaans translation 2023-06-28 08:52:42 +02:00
8d6570d809 Update German translation 2023-06-28 08:52:41 +02:00
b4beae7418 Update Japanese translation 2023-06-24 17:47:44 +02:00
0a2d799f6a Update Catalan translation 2023-06-21 22:28:29 +02:00
59cc637c65 Update Slovenian translation 2023-06-21 22:28:29 +02:00
SC
1255f5989b Update Portuguese translation 2023-06-21 22:28:29 +02:00
efce7c338e Update Russian translation 2023-06-21 22:28:29 +02:00
b13b7646b7 Update Vietnamese translation 2023-06-21 22:28:29 +02:00
4645c58712 Update Norwegian Bokmål translation 2023-06-21 22:28:29 +02:00
c46d867f17 Update Arabic translation 2023-06-21 22:28:29 +02:00
75c4c0b349 Channels: Fix "sort by oldest" (#3931) 2023-06-21 22:28:15 +02:00
16b8b6034f Channels: Use new ctoken value for "sort by oldest" 2023-06-21 21:41:53 +02:00
93559cbdd5 Merge pull request #3914 from eltociear/patch-1
Fix typo in jobs.cr
2023-06-13 13:31:53 +02:00
495ccdc221 Fix typo in jobs.cr
follwing -> following
2023-06-13 19:16:07 +09:00
e6f5fcbc4b User: Strip empty new lines before parsing CSV (#3895) 2023-06-12 21:09:39 +02:00
df6b51f9c6 Comments: Fix display of youtube links (#3911) 2023-06-12 21:04:57 +02:00
7a569d81ca Updated comment link returns 2023-06-12 09:40:26 -04:00
875b8ea0c2 Merge pull request #3903 from unixfox/temporary-message-video-not-available 2023-06-11 21:05:49 +02:00
8e4833d21a temp explanation about video not available issue 2023-06-11 16:54:30 +02:00
c3a3f98014 User: Remove broken Google login (#3893) 2023-06-11 16:36:21 +02:00
b06c87ff8d User: Remove broken Google login (various comments) 2023-06-11 16:34:59 +02:00
69f23d95b8 User: Remove broken Google login (various functions) 2023-06-11 16:34:59 +02:00
3444117818 User: Remove broken Google login (various constants) 2023-06-11 16:34:59 +02:00
39ff94362e User: Remove broken Google login (feeds route) 2023-06-11 16:34:59 +02:00
11ab6ffb32 User: Remove broken Google login (notifications route) 2023-06-11 16:34:59 +02:00
9dd4195dd0 User: Remove broken Google login (subscribe route) 2023-06-11 16:34:59 +02:00
fcbd5106c3 User: Remove broken Google login (password change route) 2023-06-11 16:34:59 +02:00
836898754e User: Remove broken Google login (before_all route) 2023-06-11 16:34:59 +02:00
d3b04ac68c User: Remove broken Google login (dedicated captcha route) 2023-06-11 16:34:59 +02:00
b2b61ab0a9 User: Remove broken Google login (login route) 2023-06-11 16:34:59 +02:00
62bd895562 User: Remove broken Google login (HTML form) 2023-06-11 16:34:59 +02:00
8d2ab70cbc User: Remove broken Google login (localized strings) 2023-06-11 16:34:59 +02:00
3024424ea2 Translations update from Hosted Weblate (#3824) 2023-06-11 16:34:38 +02:00
5af87f97a3 Fix broken Italian locale (i18next v3->v4 mixup) 2023-06-11 16:31:47 +02:00
96238d719d Fix broken Spanish locale (i18next v3->v4 mixup) 2023-06-11 16:19:05 +02:00
52c317f235 Update Italian translation 2023-06-11 16:05:50 +02:00
f954483eac Update Japanese translation 2023-06-11 16:05:50 +02:00
a4ca460651 Update French translation 2023-06-11 16:05:50 +02:00
37bab74085 Update Japanese translation 2023-06-11 16:05:50 +02:00
50d6a2afb9 Update French translation 2023-06-11 16:05:50 +02:00
daccbc2abb Update French translation 2023-06-11 16:05:50 +02:00
d250b4132b Update Russian translation 2023-06-11 16:05:50 +02:00
3690631cdd Update Portuguese (Brazil) translation 2023-06-11 16:05:50 +02:00
3b6474d72b Update Korean translation 2023-06-11 16:05:50 +02:00
fd3e2aa868 Update Japanese translation 2023-06-11 16:05:50 +02:00
14a5751a47 Update Spanish translation 2023-06-11 16:05:50 +02:00
fda8d2d4d3 Update Russian translation 2023-06-11 16:05:50 +02:00
46ea22f75c Watch: Load watch page data for premieres (#3866) 2023-06-11 16:05:32 +02:00
68c26563fc Comments: Don't break JavaScript when loading more (#3870) 2023-06-11 16:05:25 +02:00
9cec83c1ff Merge pull request #3897 from IceTheDev2/patch-1
Consistent formatting in the README
2023-06-11 14:18:37 +02:00
281c8ecbf5 Update README.md 2023-06-11 14:26:18 +03:00
1b942f4f0a User: Strip empty new lines before parsing CSV 2023-06-10 20:58:21 +02:00
e7bed765fe Chore: Bump various constants (#3843) 2023-06-09 21:19:20 +02:00
7556cb69f2 YT API: Bump WEB/MWEB client versions 2023-06-09 21:05:48 +02:00
b5e30d66d4 YT API: Bump Android app version 2023-06-09 21:05:48 +02:00
d9521c82cf YT API: Bump iOS app version 2023-06-09 21:05:48 +02:00
505a1566d1 Misc: Update User-Agent string 2023-06-09 21:05:45 +02:00
19192b8be1 Merge pull request #3874 from SamantazFox/api-only-makefile 2023-06-09 18:59:16 +02:00
867d488931 Makefile: Add API_ONLY variable 2023-06-08 23:45:11 +02:00
45cc835694 Comments: Don't break JavaScript when loading more 2023-06-07 17:39:35 -04:00
233bd3f593 Watch: Load watch page data for premieres 2023-06-07 11:32:20 -04:00
d164776024 Playlists: Fix paging for Invidious playlists 2023-06-06 16:27:26 -04:00
545a5937d8 Only close at 90% similarity 2023-06-06 18:18:33 +00:00
35694cc7e3 Warn about hmac key deadline (#3855) 2023-06-04 19:18:30 +02:00
372192eabc warn about hmac key deadline 2023-06-04 17:30:23 +02:00
bc06c2fc27 Better message for auto close 2023-06-03 17:27:24 +00:00
7ea6ec1f52 add one return line for the reply message 2023-06-03 18:57:42 +02:00
042ad1f266 auto close duplicated issues 2023-06-03 13:06:48 +02:00
bbf16279bb Search: Allow browser suggestions (#3724) 2023-06-01 22:41:04 +02:00
16ac3be85b Playlists: Fix duplicated videos across pages (#3807) 2023-05-31 22:30:52 +02:00
21f0b90354 Utils: Add support for short "x ago" forms (#3825) 2023-05-31 22:28:47 +02:00
928ea75dbc Search: Parse playlists when searching a channel (#3804) 2023-05-31 22:27:53 +02:00
4414c9df70 specc: Add tests for 'decode_date' 2023-05-29 13:16:50 +02:00
898066407d Utils: Update 'decode_date' to take into account short "x ago" forms 2023-05-29 12:41:53 +02:00
381a0e326d Comments: Cleanup code (#3784) 2023-05-25 23:46:09 +02:00
193c510c65 Spec: Update require to point to new files 2023-05-25 22:53:53 +02:00
f0c8477905 Comments: Move content-related functions to their own file 2023-05-25 22:53:53 +02:00
4379a3d873 Comments: Move ctoken functions to youtube.cr 2023-05-25 22:53:53 +02:00
df85265453 Comments: Move link utility functions to own file + module 2023-05-25 22:53:53 +02:00
de78848039 Comments: Move 'template_reddit' function to own file + module 2023-05-25 22:53:53 +02:00
e10f6b6626 Comments: Move 'template_youtube' function to own file + module 2023-05-25 22:53:53 +02:00
634e913da9 Comments: Move 'fetch_reddit' function to own file + module 2023-05-25 22:53:53 +02:00
1b25737b01 Comments: Move 'fetch_youtube' function to own file + module 2023-05-25 22:53:53 +02:00
8dd1824869 Comments: Move reddit type definitions to their own file 2023-05-25 22:53:53 +02:00
c7876d564f Comments: add 'require' statement for a dedicated folder 2023-05-25 22:53:53 +02:00
5d176ad6de Translations update from Hosted Weblate (#3797) 2023-05-25 22:46:22 +02:00
4b29f8254a Fix broken Spanish locale (i18next v3->v4 mixup) 2023-05-25 22:44:08 +02:00
c9eafb250f Update Czech translation 2023-05-25 22:30:02 +02:00
fe97b3d761 Update Croatian translation 2023-05-25 22:30:02 +02:00
ed2d16c91d Update Japanese translation 2023-05-25 22:30:02 +02:00
a727bb037f Update Chinese (Traditional) translation 2023-05-25 22:30:02 +02:00
f0f6cb0d83 Update Turkish translation 2023-05-25 22:30:02 +02:00
e8df08e41e Update Chinese (Simplified) translation 2023-05-25 22:30:02 +02:00
fd06656d86 Update Ukrainian translation 2023-05-25 22:30:02 +02:00
ea6db9c58a Update Esperanto translation 2023-05-25 22:30:02 +02:00
184bd3204f Update Spanish translation 2023-05-25 22:30:02 +02:00
f0120bece1 Update Italian translation 2023-05-25 22:30:02 +02:00
7e3c685cd6 Update Arabic translation 2023-05-25 22:30:02 +02:00
67a79faaeb Update Polish translation 2023-05-25 22:30:02 +02:00
11d45adcdc Update German translation 2023-05-25 22:30:02 +02:00
f2cc97b290 Update Portuguese (Brazil) translation 2023-05-25 22:30:02 +02:00
e656714542 Update German translation 2023-05-25 22:30:02 +02:00
a79b7ef170 Update Japanese translation 2023-05-25 22:30:02 +02:00
ef4ff4e4b2 Update Spanish translation 2023-05-25 22:30:02 +02:00
9c0c39baed Community: Fix position of the "creator heart" (#3817) 2023-05-25 22:20:20 +02:00
6440ae0b5c Community: Fix position of the "creator heart" (broken by #3783) 2023-05-23 23:32:23 +02:00
e238c08be5 Search: Populate search bar with ChannelId (#3805) 2023-05-23 21:57:07 +02:00
8d434ac06a User: Allow CSV Youtube playlists to be imported (#3595) 2023-05-23 19:34:24 +02:00
1333e6db26 API: Add hashtag endpoint (#3692) 2023-05-23 19:31:19 +02:00
8bd2e60abc Use string interpolation instead of concatenation
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2023-05-22 09:19:32 -04:00
c713c32ceb Fix issue where playlists will refetch the same videos 2023-05-14 22:35:51 -04:00
12b4dd9191 Populate search bar with ChannelId 2023-05-14 17:25:32 -04:00
b2a0e6f1ff Parse playlists when searching a channel 2023-05-14 16:51:06 -04:00
d728599251 add page parameter 2023-05-14 15:58:15 -04:00
d6fb5c03b7 add hashtag endpoint 2023-05-14 15:58:14 -04:00
3a54e9556b Hashtag: Fix continuation token (#3803) 2023-05-14 21:04:10 +02:00
6755e31b72 Fix hashtag continuation token 2023-05-14 20:17:51 +02:00
10fee9da61 Community: Fix live video + parse playlist attachments (#3767) 2023-05-08 15:42:06 +02:00
b420de6977 Subscriptions: Fix Nil assertion failed (#3793) 2023-05-08 15:41:49 +02:00
febd14f703 Community: Minor HTML/CSS fixes (#3783) 2023-05-08 15:41:39 +02:00
92f6a4d546 Translations update from Hosted Weblate (#3780) 2023-05-08 15:41:32 +02:00
544fc9f92e Fix broken Spanish locale (i18next v3->v4 mixup) 2023-05-08 15:33:23 +02:00
c385a944e6 Subscriptions: Fix casing of XML tag names 2023-05-08 13:10:18 +02:00
ce1fb8d08c Use XML.parse instead of XML.parse_html
Due to recent changes to libxml2 (between 2.9.14 and 2.10.4,
See https://gitlab.gnome.org/GNOME/libxml2/-/issues/508), the
HTML parser doesn't take into account the namespaces (xmlns).

Because HTML shouldn't contain namespaces anyway, there is no
reason for use to keep using it. But switching to the XML
parser means that we have to pass the namespaces to every
single 'xpath_node(s)' method for it to be able to properly
navigate the XML structure.
2023-05-08 01:05:48 +02:00
56ebb477ca Update Spanish translation 2023-05-07 20:18:08 +02:00
cca8bcf2a8 Update Korean translation 2023-05-07 20:18:08 +02:00
f3d9db10a2 Update Czech translation 2023-05-07 20:18:08 +02:00
46a9ce811a Document save playback position (#3790) 2023-05-07 20:18:01 +02:00
36f7c99cfb Update config.example.yml
Document save playback position in the config.example.yml
2023-05-07 17:49:43 +02:00
720789b622 HTML: wrap comments metadata in a paragraph 2023-05-06 19:46:07 +02:00
ce2649420f CSS: Fix iframe attachment size in community posts 2023-05-06 19:46:03 +02:00
7aac401407 CSS: limit width of the comments in community tab 2023-05-06 19:23:55 +02:00
2d5145614b Fix unknown type attachment
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2023-05-02 21:10:57 -04:00
1eb1bae370 Fix watch history order (#3653) 2023-05-03 00:34:04 +02:00
5017176e39 Trending: fix mistakes from #3773 (#3781) 2023-05-03 00:33:56 +02:00
efda154ec8 Allow channel urls to be displayed in video's description (#3759) 2023-05-03 00:33:48 +02:00
c1fb320094 Channels: Fix index out of bounds error (#3737) 2023-05-03 00:33:24 +02:00
90914343ec Trending: de-duplicate results 2023-05-03 00:02:38 +02:00
384a8e200c Trending: fix mistakes from #3773 2023-05-02 23:35:37 +02:00
28584f22c5 Fix index out of bounds error 2023-04-30 19:03:36 -04:00
1b10446e5e move url parsing to utils method 2023-04-30 18:58:39 -04:00
d420741cc1 Allow channel urls to be displayed in YT description 2023-04-30 18:58:08 -04:00
f298e225a1 fix live video attachments, parse playlists 2023-04-30 18:55:02 -04:00
97e3938f5f Translations update from Hosted Weblate (#3708) 2023-04-30 19:34:36 +02:00
deed4d10f2 Fix broken Spanish/Italian locales (i18next v3->v4 mixup) 2023-04-30 19:31:59 +02:00
70a79f343d Update Russian translation 2023-04-30 19:17:10 +02:00
e6471feadc Update Russian translation 2023-04-30 19:17:10 +02:00
49e04192c0 Update French translation 2023-04-30 19:17:10 +02:00
1f12323ee6 Update French translation 2023-04-30 19:17:10 +02:00
732fb7c499 Update French translation 2023-04-30 19:17:10 +02:00
14053821ac Update Russian translation 2023-04-30 19:17:10 +02:00
SC
346f32855a Update Portuguese translation 2023-04-30 19:17:10 +02:00
7d48b96173 Update Lithuanian translation 2023-04-30 19:17:10 +02:00
b9932b113b Update Italian translation 2023-04-30 19:17:10 +02:00
72f83d4aa2 Update Russian translation 2023-04-30 19:17:10 +02:00
919997e41c Update Chinese (Traditional) translation 2023-04-30 19:17:10 +02:00
6667bdcd92 Update Slovenian translation 2023-04-30 19:17:09 +02:00
cb0e837a5e Update Catalan translation 2023-04-30 19:17:09 +02:00
e6ba3e3dab Update Czech translation 2023-04-30 19:17:09 +02:00
f81bc96da0 Update Croatian translation 2023-04-30 19:17:09 +02:00
4c541489dd Update Indonesian translation 2023-04-30 19:17:09 +02:00
c60c14851b Update Esperanto translation 2023-04-30 19:17:09 +02:00
d857ee5a7c Update Arabic translation 2023-04-30 19:17:09 +02:00
657486c19a Update Turkish translation 2023-04-30 19:17:09 +02:00
9d52ddbf8d Update Chinese (Simplified) translation 2023-04-30 19:17:09 +02:00
d8337252a8 Update Ukrainian translation 2023-04-30 19:17:09 +02:00
66e671237f Update Spanish translation 2023-04-30 19:17:09 +02:00
d5a516d76c Update Catalan translation 2023-04-30 19:17:09 +02:00
231fb3481e Update Japanese translation 2023-04-30 19:17:09 +02:00
7b4e3639cf Update Slovenian translation 2023-04-30 19:17:09 +02:00
778edf63cb Update Catalan translation 2023-04-30 19:17:09 +02:00
SC
fe1648e72e Update Portuguese translation 2023-04-30 19:17:09 +02:00
1825b8edb3 Update Czech translation 2023-04-30 19:17:09 +02:00
a3e587657f Update Croatian translation 2023-04-30 19:17:09 +02:00
4078fc5818 Update Persian translation 2023-04-30 19:17:09 +02:00
a9fcfcf7c9 Update Chinese (Traditional) translation 2023-04-30 19:17:09 +02:00
4aa2c406ff Update Turkish translation 2023-04-30 19:17:09 +02:00
f46cc98654 Update Chinese (Simplified) translation 2023-04-30 19:17:09 +02:00
ec1d6ee851 Update Ukrainian translation 2023-04-30 19:17:09 +02:00
9eafbbdcbb Update Esperanto translation 2023-04-30 19:17:08 +02:00
5c24bf1322 Update Spanish translation 2023-04-30 19:17:08 +02:00
b97b5b5859 Update Spanish translation 2023-04-30 19:17:08 +02:00
d139334376 Update Arabic translation 2023-04-30 19:17:08 +02:00
155f5fef97 Update Polish translation 2023-04-30 19:17:08 +02:00
17ecdbaf7d Update German translation 2023-04-30 19:17:08 +02:00
67859113fd Update Russian translation 2023-04-30 19:17:08 +02:00
eefc8bbbdd Search/Trending: Fix duplicated results (#3773) 2023-04-30 19:11:21 +02:00
ff5e42d836 Channels: Fix fetching more community posts (#3761) 2023-04-30 18:59:18 +02:00
3cfbc19ccc Extractors: Add utility function to extract items from categories 2023-04-28 20:29:49 +02:00
7afa03d821 Search: Don't extract items from categories too 2023-04-28 20:29:46 +02:00
0107b774f2 Trending: Don't extract items from categories 2023-04-28 20:27:22 +02:00
9dfa268204 CI: bump crystal version in test matrix (#3769) 2023-04-25 23:01:14 +02:00
e24feab1f7 CI: Remove crystal 1.3.2 2023-04-25 22:51:56 +02:00
d1b51e57a2 CI: Add crystal 1.7.3 and 1.8.1 2023-04-25 22:51:33 +02:00
5517a4eadb fix fetching community continuations 2023-04-22 09:13:04 -04:00
961cae2b9a Improve accessibility (#3710) 2023-04-10 17:55:24 +02:00
adc605024f Videos: Add support for attributed descriptions (#3701) 2023-04-10 17:54:22 +02:00
9a765418d1 Update specs 2023-04-10 16:59:13 +02:00
b3c0afef02 Videos: fix description text offset when emojis are present 2023-04-05 23:43:41 +02:00
525e4bd67a Merge pull request #3700 from ChunkyProgrammer/fix-shorts
Fix parsing shorts on channel page
2023-04-05 17:22:09 +02:00
c421f1f205 Merge branch 'iv-org:master' into youtube-playlist-import 2023-04-03 17:09:34 -07:00
fffdaa1410 Updated csv reading as per feedback and ran
Signed-off-by: thtmnisamnstr <gavinj1984@gmail.com>
2023-04-03 17:07:58 -07:00
600da635b7 Allow browser suggestions for search (#3704) 2023-04-02 23:36:06 +02:00
e3c1cb3ec9 fix view count extraction 2023-04-02 16:45:34 -04:00
dc929be198 Merge branch 'master' into fix-shorts 2023-04-02 16:42:46 -04:00
1da00bade3 implement code suggestions
Co-Authored-By: Samantaz Fox <coding@samantaz.fr>
2023-04-02 16:31:59 -04:00
8db2a93827 Search: Fix channel search (#3699) 2023-04-01 18:51:32 +02:00
c0eab2b1f6 CSS: fix long description overflow (#3711) 2023-04-01 18:27:13 +02:00
9e82e6fc1b Handle auto theme correctly with the manual toggle (#3521) 2023-03-31 22:43:23 +02:00
ef6eea3a65 Videos: ignore empty music entries (#3709) 2023-03-31 22:34:33 +02:00
d526094380 download_widget: Add missing translation key (#3713) 2023-03-31 22:28:38 +02:00
562d75a47b Quick fix for channel videos page bug (#3718) 2023-03-31 22:28:11 +02:00
e0600f4553 quick fix for channel videos page 2023-03-31 22:16:01 +02:00
0fe1b1ec19 download_widget: Add missing translation key 2023-03-30 12:52:03 +02:00
73d2ed6f77 Optimize some redundant stuff 2023-03-29 23:33:23 +00:00
f83f0d2561 remove fixed height from description 2023-03-28 10:33:03 +02:00
1d187bcf17 fix long description overflow 2023-03-28 10:30:52 +02:00
a3da03bee9 improve accessibility 2023-03-27 22:56:29 -04:00
f840addd93 Fix error when song title is missing from the track 2023-03-27 22:10:28 -04:00
7755ed4ac8 Fix regexs 2023-03-23 20:12:54 +00:00
49ddf8b6bd Added attributed description support 2023-03-23 05:10:21 +00:00
5767344746 Fix parsing shorts on channel page 2023-03-22 09:56:22 -04:00
3492485789 Fix channel search 2023-03-21 21:25:52 -04:00
8a44bd11d2 Videos: Fix 0 views and empty license field (#3557) 2023-03-20 19:15:12 +01:00
c0410602e7 Translations update from Hosted Weblate (#3693) 2023-03-20 19:14:19 +01:00
4ae158ef6d Videos: Add back support for views on livestreams 2023-03-19 22:44:59 +01:00
1f3317e257 Update video spec 2023-03-19 21:52:24 +01:00
08cbd44b57 Update Catalan translation 2023-03-19 20:03:24 +01:00
224fbcd2b1 Update Turkish translation 2023-03-19 20:03:24 +01:00
c188dec4fa Update Catalan translation 2023-03-19 20:03:24 +01:00
SC
3aa6a0c4f0 Update Portuguese translation 2023-03-19 20:03:24 +01:00
ce1f61d185 Update Czech translation 2023-03-19 20:03:24 +01:00
c1e45cb84a Update Croatian translation 2023-03-19 20:03:24 +01:00
defec2e8fb Update Persian translation 2023-03-19 20:03:24 +01:00
ded28b80d3 Update Japanese translation 2023-03-19 20:03:23 +01:00
dd6c9dbc65 Update Chinese (Traditional) translation 2023-03-19 20:03:23 +01:00
46a7be89a7 Update Chinese (Simplified) translation 2023-03-19 20:03:23 +01:00
72656e802e Update Ukrainian translation 2023-03-19 20:03:23 +01:00
60e3f8aec0 Update Spanish translation 2023-03-19 20:03:23 +01:00
aad166c96a Update Arabic translation 2023-03-19 20:03:23 +01:00
a0bdcc2964 Update Polish translation 2023-03-19 20:03:23 +01:00
e1a25a184a Add the docs/ folder to gitignore (#3694) 2023-03-19 20:03:15 +01:00
26ea676b8d Community: Restore thumbnail qualities array (#3691) 2023-03-15 22:50:14 +01:00
b66a5c40a9 Community: Restore thumbnail qualities array 2023-03-15 22:37:07 +01:00
a6d21cb211 Merge pull request #3627 from iBicha/feature/latest-version-optional-itag
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2023-03-15 20:07:06 +01:00
712aea0831 chore: update HoloPlay app on README (#3690) 2023-03-15 18:11:17 +00:00
6837e42928 Video page: add song title + remove song license on music videos (#3680) 2023-03-13 00:09:08 +01:00
ffcc837c2a remove music license 2023-03-12 18:50:01 -04:00
b4806e7ba9 Comments: Add support for custom emojis + member info (#3636) 2023-03-12 23:42:38 +01:00
5c633ad1da Community: parse reply count and polls (#3635) 2023-03-12 23:41:48 +01:00
3848c3f53f Update src/invidious/routes/video_playback.cr
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2023-03-12 18:36:03 -04:00
3341929060 removed unnecessary conditionals and uninitialized variable declarations
Signed-off-by: thtmnisamnstr <gavinj1984@gmail.com>
2023-03-07 15:46:36 -08:00
a781cf3734 readd try as bool for isSponsor key 2023-03-07 15:59:51 -05:00
d79d6f38b2 Fix description boxes smaller than 3 lines (#3668) 2023-03-07 21:29:40 +01:00
f012d70e47 Translations update from Hosted Weblate (#3673) 2023-03-07 20:31:21 +01:00
01e00a588b Update Spanish localisation further (#3676) 2023-03-07 20:30:00 +01:00
35ac26bd61 Add History API (#3654) 2023-03-07 20:28:43 +01:00
e3081ef1a9 Apply style change suggestions
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2023-03-07 14:23:08 -05:00
0b17f68eba Fix input validation 2023-03-07 13:50:02 -05:00
742c951bc9 support videos with multiple songs 2023-03-07 13:06:15 -05:00
d8e23d34b6 add song title for music tracks 2023-03-07 11:38:09 -05:00
548a0f26ef Update Japanese translation 2023-03-07 03:29:24 +01:00
9325fa79ae Update es.json 2023-03-06 06:17:50 +00:00
1f607273a8 Update Portuguese (Brazil) translation 2023-03-05 13:47:47 +01:00
3c3d9ebf84 Update Greek translation 2023-03-05 13:47:47 +01:00
6b01629c5d Merge pull request #3671 from lamarios/master
Add new android client to list of projects using invidious
2023-03-05 09:29:15 +01:00
025e755542 Use single db call 2023-03-04 19:14:28 -05:00
a3ecd46b01 add new Android client to list of projects using invidious 2023-03-05 04:55:27 +08:00
f6c6c9e5ec Merge pull request #1 from iv-org/master
rebase
2023-03-05 04:53:32 +08:00
bff5c8d9a1 Translations update from Hosted Weblate (#3657) 2023-03-04 18:04:28 +01:00
03542f2f5d Fix empty description boxes.
If a video has no description, (without this commit) the description box will still take up 8.3em, even if there's no content in it.

This fixes that issue.
2023-03-03 22:28:26 +00:00
a5cc66e060 Fix id check 2023-03-02 16:11:50 -05:00
38f6d08be6 Validate id, avoid db call if not needed 2023-03-02 14:47:14 -05:00
8c0efb3ea9 validate video id 2023-03-02 14:45:26 -05:00
60b7c8015c add channel emoji css class 2023-03-02 07:29:44 -05:00
406d74d0b6 Update Spanish translation 2023-03-02 07:43:04 +01:00
4a14713462 use dig, create private image quality constant
Co-Authored-By: Samantaz Fox <coding@samantaz.fr>
2023-03-01 23:56:23 -05:00
27bf4d02a1 PR nursing 2023-03-01 22:08:19 -05:00
2974ed348c Update Albanian translation 2023-02-28 20:36:17 +01:00
fdf162e318 Update Croatian translation 2023-02-28 20:36:16 +01:00
24ac873532 Update Japanese translation 2023-02-28 20:36:16 +01:00
0efb56238f Update Turkish translation 2023-02-28 20:36:16 +01:00
eb3af9d4f1 Update Spanish translation 2023-02-28 20:36:15 +01:00
23f1f8bde3 Update German translation 2023-02-28 20:36:14 +01:00
3ddcfea8fa Update English (United States) translation 2023-02-28 20:36:14 +01:00
4ac263f1df Replace == with empty? 2023-02-26 14:01:08 +01:00
8eca5b270e Video: Fix 0 views, and empty license field 2023-02-26 14:01:08 +01:00
b3eea6ab3e improved import algorithm, fixed a referer issue from the playlists page after deleting a playlist
Signed-off-by: thtmnisamnstr <gavinj1984@gmail.com>
2023-02-23 15:55:38 -08:00
7e0210d090 Update Hindi translation 2023-02-23 00:38:27 +01:00
596a16c085 Update Portuguese (Portugal) translation 2023-02-23 00:38:26 +01:00
57e4312d9f Update Portuguese (Brazil) translation 2023-02-23 00:38:26 +01:00
0995e0447c Merge pull request #3656 from iBicha/feature/auth-token-username
encode username on callback
2023-02-22 14:41:42 +01:00
6ee51f460a encode username on callback 2023-02-21 15:24:25 -05:00
15e9510ab2 Check preferences before marking video as watched 2023-02-20 16:43:36 -05:00
7b124eec64 Add History API 2023-02-20 16:27:16 -05:00
20289a4d01 Fix order for import 2023-02-20 14:56:38 -05:00
8445d3ae12 Fix watch history order 2023-02-19 19:01:28 -05:00
b287ff2126 Translations update from Hosted Weblate (#3639) 2023-02-19 23:31:13 +01:00
64780ce1da Update Russian translation 2023-02-19 23:08:48 +01:00
8046316f20 Update Hindi translation 2023-02-19 23:08:48 +01:00
4bbeb4a4c8 Add watch indicators (#3383) 2023-02-19 23:08:38 +01:00
b5eb6016bb add spaces at end of attribute 2023-02-19 14:51:39 -05:00
bde21d527f Fixed console error 2023-02-19 20:41:18 +01:00
b287ddc52a Allow to set a label for exempting from staling (#3651) 2023-02-19 19:20:47 +00:00
bc5d81fe60 use string builder to create images
change member to sponsor
2023-02-19 12:46:46 -05:00
cbbec00e1c Auth: Add username to token callback (#3603) 2023-02-19 16:46:51 +01:00
ba217c9174 API: Add endpoints for import/export (#3617) 2023-02-19 14:39:56 +01:00
217b740e01 API: Add endpoint to resolve youtube urls (#3612) 2023-02-19 14:39:47 +01:00
d6bf9e9bcf Merge pull request #3622 from ChunkyProgrammer/downcase-trending-type-param 2023-02-17 18:58:53 +01:00
a95f82e44b Add Playlet to "Projects using Invidious" (#3640) 2023-02-17 17:08:05 +00:00
76ad4e8026 show member icon, hide deleted emojis, fix non-custom emojis 2023-02-16 14:12:56 -05:00
d03a62641f Add support for custom emojis in comments 2023-02-15 00:21:29 -05:00
4731480821 parse votes as number
Co-Authored-By: syeopite <70992037+syeopite@users.noreply.github.com>
2023-02-14 23:03:25 -05:00
aecbafbc7b Community: parse replyCount 2023-02-14 22:52:59 -05:00
8384fa94c2 Community: Parse polls 2023-02-14 22:48:37 -05:00
7993784701 Translations update from Hosted Weblate (#3596) 2023-02-13 07:41:04 +01:00
9c400fd455 Update Russian translation 2023-02-12 18:10:09 +01:00
SC
e4d14481c5 Update Portuguese translation 2023-02-12 18:10:09 +01:00
cb7c4a8220 Add Afrikaans translation 2023-02-12 18:10:09 +01:00
c5d1344511 Update Slovenian translation 2023-02-12 18:10:09 +01:00
299eb9207b Update Albanian translation 2023-02-12 18:10:09 +01:00
f2390ed052 Update Czech translation 2023-02-12 18:10:09 +01:00
256b518469 Update Croatian translation 2023-02-12 18:10:09 +01:00
58688a6311 Update Japanese translation 2023-02-12 18:10:09 +01:00
fc5092c399 Update Chinese (Traditional) translation 2023-02-12 18:10:09 +01:00
591f816781 Update Turkish translation 2023-02-12 18:10:09 +01:00
db6d3d2191 Update Chinese (Simplified) translation 2023-02-12 18:10:09 +01:00
054686e557 Update Ukrainian translation 2023-02-12 18:10:09 +01:00
c1c6f67ad3 Update Esperanto translation 2023-02-12 18:10:09 +01:00
c82272155e Update Spanish translation 2023-02-12 18:10:09 +01:00
4ca23f2d51 Update Italian translation 2023-02-12 18:10:09 +01:00
45c99190b2 Update Arabic translation 2023-02-12 18:10:08 +01:00
7ae9dabe3c Update Polish translation 2023-02-12 18:10:08 +01:00
5534cd87f8 Update Slovenian translation 2023-02-12 18:10:08 +01:00
eb7588f1a0 Update Persian translation 2023-02-12 18:10:08 +01:00
20dc0a9e26 Update Portuguese (Brazil) translation 2023-02-12 18:10:08 +01:00
f4de962dc2 Update Japanese translation 2023-02-12 18:10:08 +01:00
b2f93dc89c Update Russian translation 2023-02-12 18:10:08 +01:00
SC
bd00b4c730 Update Portuguese translation 2023-02-12 18:10:08 +01:00
4830656484 Update Russian translation 2023-02-12 18:10:08 +01:00
f9c2412010 YT Comments: Revert isPinned to a nil check (#3631) 2023-02-12 18:09:52 +01:00
87342e4efd Comments: Revert "isPinned" to a nil check
"pinnedCommentBadge" is not a boolean, but a complex structure.
This commit fixes a wrong assumption I had during the rewiew of
https://github.com/iv-org/invidious/pull/3626
2023-02-12 17:57:32 +01:00
838cbeffcc Use case statement for trending_type
Co-Authored-By: Samantaz Fox <coding@samantaz.fr>
2023-02-11 08:45:57 -05:00
27ff8d7c33 API: add authorVerified where possible + provide channel tabs list (#3625) 2023-02-10 23:47:06 +01:00
feeb872791 YT Comments: parse isPinned and strikethroughs (#3626) 2023-02-10 23:42:04 +01:00
6f01d6eacf ran crystal tool format. it should fix some CI issues
Signed-off-by: thtmnisamnstr <gavinj1984@gmail.com>
2023-02-10 12:00:02 -08:00
e0c70d34cc Make sure pinnedCommentBadge isn't equal to false
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2023-02-09 17:13:21 -05:00
d57d278f32 Make itag optional under /latest_version 2023-02-09 15:00:23 -05:00
b893bdac0d parse isPinned, add support for strikethrough 2023-02-07 22:02:35 -05:00
97825be10c add missing authorVerified to api 2023-02-07 21:52:53 -05:00
28424d0e88 Ignore casing for trending type in api 2023-02-07 09:23:26 -05:00
c37d8e3664 Use CONFIG.playlist_length_limit when exporting playlists 2023-02-05 15:49:56 -05:00
47a5b98e25 Remove unused db call 2023-02-05 15:43:58 -05:00
2606decd21 Refactor export function 2023-02-05 15:00:11 -05:00
b2589c74be Add API for import/export 2023-02-02 19:14:02 -05:00
c162c7ff3f add pageType 2023-02-02 18:20:14 -05:00
d6dd341594 API: Parse multiimage community posts (#3599) 2023-02-02 21:52:19 +01:00
c7f34042a2 Video: Add support for the music description section (#3559) 2023-02-02 21:49:09 +01:00
6c687a3cac Login redirect to referer on logged-in user (#3556) 2023-02-02 21:28:24 +01:00
bf5175d1e9 Feat: Add api endpoint to resolve youtube urls 2023-02-02 12:41:13 -05:00
e7a9aeff95 Add username to auth token callback 2023-01-30 10:49:23 -05:00
785fe52674 API: Parse multiimage community posts 2023-01-29 10:28:42 -05:00
72d0c9e409 removed comments
Signed-off-by: Gavin Johnson <gavinj1984@gmail.com>
2023-01-28 09:57:28 -08:00
5c7bda66ae removed comments
Signed-off-by: Gavin Johnson <gavinj1984@gmail.com>
2023-01-28 09:55:36 -08:00
96344f28b4 added youtube playlist import functionality. fixes issue #2114
Signed-off-by: Gavin Johnson <gavinj1984@gmail.com>
2023-01-28 09:26:16 -08:00
3b8e6c6040 Add support for channel handles (#3591) 2023-01-26 06:58:20 +01:00
13bf4e9e00 Support handles 2023-01-26 01:19:12 +01:00
2a803dc067 Fix displaying author name for community posts (#3590) 2023-01-25 23:47:04 +01:00
c2957dbce4 fix displaying author name #1612 2023-01-24 23:21:09 -05:00
9a9f8231e8 Translations update from Hosted Weblate (#3575) 2023-01-24 00:52:31 +01:00
ad3c721af7 Update Czech translation
Co-authored-by: Fjuro <ifjuro@proton.me>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
Signed-off-by: Samantaz Fox <coding@samantaz.fr>
2023-01-23 22:00:01 +01:00
9b9fde1054 Update Chinese (Traditional) translation
Co-authored-by: Jeff Huang <s8321414@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
Signed-off-by: Samantaz Fox <coding@samantaz.fr>
2023-01-23 21:59:59 +01:00
e66e463156 Update Croatian translation
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
Signed-off-by: Samantaz Fox <coding@samantaz.fr>
2023-01-23 21:59:58 +01:00
5c024c677b Update Ukrainian translation
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
Signed-off-by: Samantaz Fox <coding@samantaz.fr>
2023-01-23 21:59:58 +01:00
68caf355af Update Esperanto translation
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
Signed-off-by: Samantaz Fox <coding@samantaz.fr>
2023-01-23 21:59:58 +01:00
32bc44e83b Update Spanish translation
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
Signed-off-by: Samantaz Fox <coding@samantaz.fr>
2023-01-23 21:59:57 +01:00
8cc0f9faf0 Update Italian translation
Update Italian translation

Co-authored-by: atilluF <atilluF@users.noreply.hosted.weblate.org>
Co-authored-by: Translator-3000 <weblate.m1d0h@8shield.net>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
Signed-off-by: Samantaz Fox <coding@samantaz.fr>
2023-01-23 21:59:57 +01:00
75d136ce77 Update French translation
Co-authored-by: slundi <slundi@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
Signed-off-by: Samantaz Fox <coding@samantaz.fr>
2023-01-23 21:59:57 +01:00
dd1ffb9283 Update Arabic translation
Co-authored-by: Rex_sa <rex.sa@pm.me>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
Signed-off-by: Samantaz Fox <coding@samantaz.fr>
2023-01-23 21:59:56 +01:00
b3a605c574 Update Polish translation
Co-authored-by: Matthaiks <kitynska@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
Signed-off-by: Samantaz Fox <coding@samantaz.fr>
2023-01-23 21:59:56 +01:00
f5b3cee263 Update Korean translation
Update Korean translation

Co-authored-by: xrfmkrh <rF3nMd7sRKezjF2vcEQo@protonmail.com>
Co-authored-by: 이정희 <daemul72@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
Signed-off-by: Samantaz Fox <coding@samantaz.fr>
2023-01-23 21:59:56 +01:00
24f1d82919 Update Turkish translation
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
Signed-off-by: Samantaz Fox <coding@samantaz.fr>
2023-01-23 21:59:55 +01:00
dbee027ed9 Search: Fix ArithmeticOverflow + wrong subs count issues (#3535) 2023-01-22 23:12:04 +01:00
624425cfa8 Add support for timedtext captions (#3533) 2023-01-22 18:34:40 +01:00
caf9520c86 Major improvements 2023-01-22 00:12:04 +01:00
420e12bb8b Merge remote-tracking branch 'upstream/master' 2023-01-21 23:35:39 +01:00
7fd205179b Added suggestions 2023-01-21 23:24:22 +01:00
4aa696fa6e Update assets/js/watched_widget.js with suggestion of AHOHNMYC
Co-authored-by: AHOHNMYC <24810600+AHOHNMYC@users.noreply.github.com>
2023-01-21 23:08:24 +01:00
4e3884cae7 Use the right source path when copying .min.css files (#3588) 2023-01-21 20:21:13 +01:00
ebc02d0be3 Formatting fix for Crystal nightly (#3586) 2023-01-21 20:21:00 +01:00
f47d4f88cc Deps: Use the right source path when copying .min.css files
Thanks to therealresonix for the catch!
2023-01-21 19:52:14 +01:00
cf93c94fc4 Formatting fix for Crystal nightly
Changes added by https://github.com/crystal-lang/crystal/pull/12951
2023-01-21 15:23:15 +01:00
030070f1eb Merge pull request #3585 from hippogriffin/postgresql-12-chart-lock
Update chart.lock
2023-01-21 09:18:11 +01:00
3509999892 update chart.lock 2023-01-20 20:42:38 +00:00
f6a4d04070 Redirect auth token to login 2023-01-18 15:58:59 -05:00
0e22a0c21a Merge branch 'master' into feature/login-redirect 2023-01-18 14:37:29 -05:00
0e68756758 Make DASH absolute urls when local (#3554) 2023-01-17 22:33:34 +01:00
a7b2df31f0 API: make /api/v1/videos respect the 'local' parameter (#3567) 2023-01-17 22:31:09 +01:00
ce07f2cd4a Video proxy: always include the 'range' header (#3570) 2023-01-17 22:30:38 +01:00
ff66cec920 Remove debug print 2023-01-16 18:52:17 -05:00
67ace4fd9d Some indention changes
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2023-01-16 18:50:38 -05:00
86333cd434 Formatting 2023-01-16 18:43:58 -05:00
855202e40e added youtube playlist import; initial commit
Signed-off-by: Gavin Johnson <gavinj1984@gmail.com>
2023-01-16 15:40:38 -08:00
8dcc98b3b9 If videCountText lists the number of subscribers, then don't use it in get_video_count 2023-01-16 18:40:38 -05:00
910809f1eb Handle case with included manifest 2023-01-16 08:33:34 -05:00
fe5b81f2c3 Add support for multiple songs 2023-01-16 14:04:20 +01:00
ea0d1b6f7b Make shell scripts executable (chmod 755) (#3571) 2023-01-15 23:49:31 +01:00
c8fecffbbe Merge pull request #3458 from Craeckie/master
Docker: Added tini for proper signal forwarding
2023-01-15 23:37:38 +01:00
215446e638 Docker: Also add tini to ARM64 dockerfile 2023-01-15 23:16:42 +01:00
b779445836 Translations update from Hosted Weblate (#3564) 2023-01-15 19:01:14 +01:00
c02ae66bb1 Update Korean translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: xrfmkrh <rF3nMd7sRKezjF2vcEQo@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2023-01-15 19:00:25 +01:00
d1bf36bd2b Update translation keys for new channels tabs (#3568) 2023-01-15 18:54:57 +01:00
aacf83c06e locales: Update translation keys for Videos/Community tabs 2023-01-15 18:32:31 +01:00
1af846e58c API: make /api/v1/videos respect the 'local' parameter 2023-01-15 17:18:34 +01:00
c012aac997 Don't continue when LOGIN_REQUIRED and no videoDetails element (#3563) 2023-01-15 16:28:17 +01:00
d6087fac47 Don't continue when LOGIN_REQUIRED and no videoDetails 2023-01-15 16:22:05 +01:00
4ee483282e Video proxy: always include the 'range' header 2023-01-14 20:00:46 +01:00
04b97ec261 make shell scripts executable (chmod 755) 2023-01-14 19:56:15 +01:00
1b5fbfc13e Video: Add support for the music section 2023-01-14 13:16:20 +01:00
01acb9bfbf Login redirect to referer on logged-in user 2023-01-13 19:04:37 -05:00
1fb0a49592 Make DASH absolute urls when local 2023-01-13 12:05:01 -05:00
4b2d942024 Convert tabs to spaces 2023-01-11 15:58:07 -05:00
05258d56bd Add support for the new channel layout - part 2 (#3419) 2023-01-10 21:16:12 +01:00
692166bd64 Update chart dependency for postgresql
* Update Chart.yaml

Set postgresql Chart version to 12.1.6. Bitnami deleted 11.1.3.

* Force postgresql image tag version

Co-authored-by: Émilien Devos <contact@emiliendevos.be>
2023-01-09 16:41:59 +01:00
456e91426a Formatting 2023-01-08 16:44:44 -05:00
4fc1b8ae86 Remove superfluous 'end' 2023-01-08 16:20:23 -05:00
32471382c4 Different cosmetic fixes 2023-01-08 16:18:35 -05:00
927c37ce3e CSS: display pointer cursor when hovering the "show more/less" toggle (#3518) 2023-01-08 19:07:08 +01:00
a37522a03d Implement workaround for broken shorts objects 2023-01-08 13:50:52 +01:00
ed8f02ef01 Update default.css
pointer on hover on label for descexpansionbutton
2023-01-07 18:31:42 +01:00
8d08cfe30f Add comments to src/invidious/yt_backend/extractors.cr
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2023-01-05 20:42:11 -05:00
049bfab438 Translations update from Hosted Weblate (#3370) 2023-01-06 00:36:16 +01:00
7f0f40f811 Update Korean translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: xrfmkrh <rF3nMd7sRKezjF2vcEQo@protonmail.com>
2023-01-06 00:08:12 +01:00
62b8f8ac80 Update Persian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Parsa Abbasi <parsa.abbasi1996@gmail.com>
2023-01-06 00:08:12 +01:00
16140f8b3f Update Portuguese (Portugal) translation
Update Portuguese (Portugal) translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Co-authored-by: ssantos <ssantos@web.de>
2023-01-06 00:08:12 +01:00
e0275d0908 Update Japanese translation
Co-authored-by: 田島翔太 <taziman.taziyuki@gmail.com>
2023-01-06 00:08:12 +01:00
a57770eb1f Update Turkish translation
Co-authored-by: Fatih K <freepremiumidiot46@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2023-01-06 00:08:11 +01:00
233de2eff9 Update Esperanto translation
Update Esperanto translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
2023-01-06 00:08:11 +01:00
9c9d71d41a Update German translation
Co-authored-by: DarkMoonExpeditionRobot <DarkMoonExpeditionRobot@proton.me>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2023-01-06 00:08:11 +01:00
6b2fff83b5 Update Albanian translation
Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2023-01-06 00:08:11 +01:00
23b229ebb7 Update Finnish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: tomechio <tomasz@salamon.fi>
2023-01-06 00:08:11 +01:00
72aa5c94af Update Portuguese (Brazil) translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Vinicius <rodriguessv30@gmail.com>
2023-01-06 00:08:11 +01:00
4d6ff3a3c6 Update Hungarian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kroca Karoly <mechatroniccroco@gmail.com>
2023-01-06 00:08:11 +01:00
e2864a5ba1 Update Italian translation
Co-authored-by: atilluF <atilluF@users.noreply.hosted.weblate.org>
2023-01-06 00:08:11 +01:00
a36363198c Update Arabic translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Mohamed-Touhami MAHDI <dragnucs@legtux.org>
2023-01-06 00:08:11 +01:00
e2ce9c2cee Add Odia translation
Co-authored-by: GET100PERCENT <eraofphysics@yahoo.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2023-01-06 00:08:11 +01:00
98301a2237 Add ability to disable all user notifications (#3473) 2023-01-05 23:08:05 +00:00
0d3610f63d Change regex used in short_text_to_number 2023-01-04 18:12:15 -05:00
85dd3533bb Fix for the ArithmeticOverflow Problem 2023-01-03 20:18:10 -05:00
76758baab8 Removed unneccesary String::Builder and removed cues that was just a blank line 2023-01-03 13:10:26 -05:00
9d83e2da4e Add newline 2023-01-03 10:29:17 -05:00
45b8f6d0cd More linting 2023-01-03 10:25:05 -05:00
b49ed65a07 Linting 2023-01-03 10:21:16 -05:00
8df1c3bb57 Add support for timedtext captions 2023-01-03 10:17:47 -05:00
865704dc7b Fixed dead link (#3526) 2023-01-01 18:41:58 +00:00
1aaf290814 handle auto theme correctly with the manual toggle
If the user used the manual toggle, they will not be able to get back to
auto since it will force set to light theme. This should fix that.
2022-12-29 14:41:17 -05:00
4659e27b56 fix: on hover btn #descexpansionbutton cursor to pointer 2022-12-29 12:50:38 +00:00
f9eb839c7a channel: remove dead playlists code 2022-12-22 17:26:32 +01:00
69b8e0919f api: Add support for the "featured channels" endpoint 2022-12-22 17:26:30 +01:00
4e3a930626 frontend: Add support for the "featured channels" page 2022-12-22 16:13:35 +01:00
b6a4de66a5 frontend: Unify the various channel pages 2022-12-22 16:13:34 +01:00
40c666cab2 api: Add support for shorts and livestreams 2022-12-22 16:13:34 +01:00
6c9754e663 frontend: Add support for shorts and livestreams 2022-12-22 16:13:34 +01:00
5d6abd5301 extractors: Fix ReelItemRendererParser 2022-12-22 16:13:34 +01:00
52ef89f02d channel: Add support for shorts and livestreams (backend only) 2022-12-22 16:13:34 +01:00
2903e896ec channel: use YT API + extractors to fetch videos 2022-12-22 16:13:34 +01:00
c5ee2bfc0f channel: use YT API to fetch playlist items 2022-12-22 16:13:34 +01:00
8e8ca4fcc5 Prepare to create a 'Channel' module 2022-12-22 16:13:34 +01:00
ce7db8d2cb extractors: Add continuation token parser 2022-12-22 16:13:26 +01:00
bdc51cd20f extractors: separate 'extract' and 'parse' logic 2022-12-04 18:24:39 +01:00
9588fcb5d1 frontend: remove paging on channel videos 2022-12-04 15:31:50 +01:00
fbcce57ce2 channel: use extractor utils to parse tabs (+ code cleaning) 2022-12-02 19:56:52 +01:00
99bf519781 shards: Bump protodec to v0.1.5 2022-12-02 19:56:52 +01:00
dev
1f6c234259 added tini for proper signal forwarding 2022-12-01 11:05:47 +00:00
5160d8bae3 Fix values for dark_mode in config.example.yml (#3426) 2022-11-22 18:41:39 +01:00
4fc5d43374 Update config.example.yml 2022-11-22 17:22:46 +00:00
9656067296 Add "light" and "auto" as accepted values for dark_mode 2022-11-22 17:08:32 +00:00
9eb2ad367e Correct config.example.yml dark_mode comment 2022-11-22 15:51:14 +00:00
09b9b758de Add param 8AEB for getting youtube stories (#3258) 2022-11-21 21:29:49 +01:00
a46404bf78 CI: Use Crystal 1.6.2 in test matrix (#3400) 2022-11-21 21:17:28 +01:00
c142703453 Fix parsing error in search results (#3418) 2022-11-21 21:12:39 +01:00
f44506b7e0 yt api: bump web client version 2022-11-20 23:48:59 +01:00
afc0ec3c30 search: Fix short text parsing 2022-11-20 23:28:21 +01:00
1bb8f2815d CI: Use Crystal 1.6.2 in test matrix 2022-11-17 22:41:51 +00:00
516efd2df3 Cleanup videos (#3238) 2022-11-17 01:03:23 +01:00
47cc26cb3c videos: fix 'Arithmetic overflow' error 2022-11-16 18:25:32 +01:00
cc5c83333f videos: improve fetching of streaming data 2022-11-13 14:40:00 +01:00
d3d9cfdd0d Cleanup 2022-11-09 00:32:38 +01:00
c03f92baf7 Fixed watch indicator when position is not saved 2022-11-08 23:22:44 +01:00
5bcb5f3175 Removed console.log 2022-11-08 23:19:27 +01:00
c95ee10d69 Added parital watch indicator on more locations 2022-11-08 23:18:24 +01:00
f604c1c68b Fixed thumbnails with darkreader, Added watched indicator in more locations 2022-11-08 23:15:42 +01:00
7b57381773 Added watch indicator 2022-11-07 20:04:46 +01:00
437f42250e Watched marker 2022-11-07 03:49:00 +01:00
09942dee66 Add support for the new channel layout - part 1 (#3374) 2022-11-02 22:05:48 +01:00
9da1827e95 Dirty fix to get back the channel videos 2022-11-02 01:03:39 +01:00
758b7df400 dockerfile: Pass '-Ddisable_quic' to 'crystal build' (#3376)
+ use alpine 3.16 as a base like the crystal team
2022-11-01 17:34:26 +00:00
46a63e6150 extractors: Add support for reelItemRenderer 2022-11-01 17:48:43 +01:00
f267394bbe extractors: Add support for richGridRenderer 2022-11-01 17:48:35 +01:00
2acff70811 videos: handle different JSON structs being present in cache 2022-10-31 20:30:35 +01:00
db91d3af66 videos: Fix some bugs 2022-10-31 20:30:35 +01:00
83795c245a videos: Support the new like button's structure 2022-10-31 20:30:30 +01:00
d659a451d6 videos: remove unused 'VideoRedirect' exception 2022-10-31 20:09:04 +01:00
87a5d70062 videos: move API's JSON structure to a dedicated module 2022-10-31 20:09:04 +01:00
ae03ed7bf7 videos: move player/next parsing code to a dedicated file 2022-10-31 20:09:04 +01:00
e23ceb6ae9 videos: Fix extraction code according to tests 2022-10-31 20:09:04 +01:00
33150f5de3 spec: Add test cases for regular videos extraction 2022-10-31 20:09:04 +01:00
7df0cfcbed Videos: fix 'views' parsing for livestreams 2022-10-31 20:09:04 +01:00
907ddfa06a spec: Add tests for recent changes 2022-10-31 20:09:04 +01:00
6aaea7fafa Videos: parse data during first fetching
There will be less data to be stores in the DB cache
2022-10-31 20:09:04 +01:00
cd03fa06ae videos: move 'Caption' and associated global/functions to a separate file 2022-10-31 20:09:04 +01:00
9baaef412f videos: move 'VideoPreferences' and its associated function to a separate file
This will require some rework later.
2022-10-31 20:09:04 +01:00
88141c459c videos: move formats structure to a separate file/module 2022-10-31 20:09:04 +01:00
6250039405 videos: move regions list to a dedicated file 2022-10-31 20:09:03 +01:00
84cd4d6a5b Makefile: disable QUIC by default (#3367) 2022-10-30 12:58:23 +00:00
a1c6159e6f Translations update from Hosted Weblate (#3365) 2022-10-30 13:55:53 +01:00
b7555343a0 Add missing languages to the locales list (#3369) 2022-10-30 13:55:04 +01:00
4055c3bec8 i18n: Add Bengali, Catalan, Basque, Sinhala and Slovak
Add languages even if translation is <= 25%
2022-10-30 13:46:28 +01:00
c5303d55e5 Update CI (#3368) 2022-10-30 13:26:53 +01:00
8096c2d81d CI: bump install-crystal action to v1.7.0 2022-10-30 13:18:50 +01:00
4e1f5c8357 CI: bump Crystal versions 2022-10-30 13:18:23 +01:00
bba693e2af Update Korean translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: xrfmkrh <rF3nMd7sRKezjF2vcEQo@protonmail.com>
2022-10-29 00:55:13 +02:00
127bfd5023 Update Esperanto translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
2022-10-29 00:55:12 +02:00
2edfe4a463 Update Lithuanian translation
Update Lithuanian translation

Co-authored-by: Gediminas Murauskas <muziejusinfo@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-10-29 00:55:12 +02:00
4b1ef90d96 Update Norwegian Bokmål translation
Co-authored-by: Petter Reinholdtsen <pere-weblate@hungry.com>
2022-10-29 00:55:12 +02:00
0c7919f3d9 Dont use quay for the postgresql bitnami image 2022-10-25 20:57:51 +00:00
72cf49eda1 Remove twitter:site meta tag from watch view (#3361) 2022-10-25 20:41:30 +02:00
e2ab488e7f Add meta tags to channels (#3347) 2022-10-25 20:39:06 +02:00
1e96206b0b Remove twitter:site meta tag from watch view 2022-10-25 15:49:45 +05:30
6f301db11c Remove twitter:site meta tag from channel view 2022-10-25 15:25:58 +05:30
12db1be87b Translations update from Hosted Weblate (#3333) 2022-10-23 14:22:49 +02:00
cdb370f56b Add channel name to embeds (#3338) 2022-10-23 14:16:43 +02:00
ae4f67f39c Update Korean translation
Update Korean translation

Update Korean translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: xrfmkrh <rF3nMd7sRKezjF2vcEQo@protonmail.com>
Co-authored-by: 이정희 <daemul72@gmail.com>
2022-10-19 13:01:35 +02:00
fcd29a4143 Update Lithuanian translation
Co-authored-by: Gediminas Murauskas <muziejusinfo@gmail.com>
2022-10-19 13:01:35 +02:00
fa544c158a Update Vietnamese translation
Co-authored-by: HexagonCDN <ctyducliem2006@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-10-19 13:01:35 +02:00
7f3509aa36 Update Spanish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
2022-10-19 13:01:35 +02:00
a1e0a6b499 Add meta tags to channels 2022-10-15 19:37:47 +05:30
6ea3673cf0 Move uploader channel name to og:site_name 2022-10-13 21:44:16 +05:30
3b39b8c772 Add table cleaning job (#3294) 2022-10-12 10:06:36 +02:00
ffb42a9b23 Add channel name to embeds 2022-10-08 15:13:02 +05:30
6707368f19 Translations update from Hosted Weblate (#3324) 2022-09-28 19:58:35 +02:00
1e186257da Update Korean translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: xrfmkrh <rF3nMd7sRKezjF2vcEQo@protonmail.com>
2022-09-28 19:57:48 +02:00
d85fcc4e7c Update French translation
Update French translation

Co-authored-by: Grandasse <grandassestl@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2022-09-28 19:57:48 +02:00
3e13d83ced Update Polish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Matthaiks <kitynska@gmail.com>
2022-09-28 19:57:48 +02:00
14de6a5658 Update Portuguese translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: SC <lalocas@protonmail.com>
2022-09-28 19:57:48 +02:00
6100d5f12d Update Russian translation
Co-authored-by: AHOHNMYC <lqwh2h2cwa@protonmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-09-28 19:57:48 +02:00
dcfa0687f4 Allow to set max playlist length via a config variable (#3283) 2022-09-28 19:53:59 +02:00
a01433960d Never mark feature requests/enhancements as stale (#3331) 2022-09-28 19:32:36 +02:00
18a7ebe3a5 Correct peertubeify URL in README.md (#3325) 2022-09-28 17:09:13 +00:00
7069969198 Never mark feature requests/enhancements as stale 2022-09-28 17:56:02 +02:00
7c45026383 Fix playlist limit 2022-09-28 12:21:23 +02:00
cf12e9dec1 Fix the video title overlay's colors in embed (#3308) 2022-09-17 13:11:08 +02:00
221d472127 Replicate headers and params made by yt apps (#3290) 2022-09-15 23:26:21 +02:00
376ed3f4d3 css: Fix the video title overlay's colors in embed 2022-09-12 00:13:24 +02:00
7df176d750 Keep listen mode after related video click (#3160) 2022-09-11 15:32:14 +02:00
0fa3250f02 Translations update from Hosted Weblate (#3301) 2022-09-11 15:31:10 +02:00
3b439a8fb7 Update Korean translation
Co-authored-by: PiQuark6046 <piquark6046@protonmail.com>
2022-09-11 15:16:56 +02:00
3a56ed19fe Update Czech translation
Co-authored-by: Fjuro <ifjuro@proton.me>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-09-11 15:16:56 +02:00
53662b8400 Update Indonesian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Neko Nekowazarashi <kodra@nekoweb.my.id>
2022-09-11 15:16:56 +02:00
eac37f1bd4 Update Turkish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
2022-09-11 15:16:56 +02:00
1ac5081090 Update Chinese (Simplified) translation
Co-authored-by: Eric <hamburger1024@firemail.cc>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-09-11 15:16:56 +02:00
e3de6a4138 Update Slovenian translation
Co-authored-by: Damjan Gerl <damjan@damjan.net>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-09-11 15:16:56 +02:00
fc96ecaa66 Update Croatian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Milo Ivir <mail@milotype.de>
2022-09-11 15:16:56 +02:00
5ca34f3eb5 Update Chinese (Traditional) translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
2022-09-11 15:16:56 +02:00
dcabce50c0 Update Ukrainian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
2022-09-11 15:16:56 +02:00
5b0a4a8db4 Update Spanish translation
Co-authored-by: Ángel Fernández Sánchez <angelfx19@gmail.com>
2022-09-11 15:16:56 +02:00
b5a2c67d16 Update Italian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: atilluF <atilluf@outlook.com>
2022-09-11 15:16:56 +02:00
f911871990 Update Arabic translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Rex_sa <rex.sa@pm.me>
2022-09-11 15:16:56 +02:00
c3de622493 Fix page shift on search bar focus (#3304) 2022-09-11 15:16:49 +02:00
53fb6ad039 Fix replies count (#3299) 2022-09-08 00:10:38 +02:00
8ab339396a Message when the video doesn't exist in playlist (#3243) 2022-09-03 19:26:05 +02:00
5048a89b9b Add/Change Javascript license notice (#3262) 2022-09-03 15:03:52 +02:00
feb38f891b Translations update from Hosted Weblate (#3271) 2022-09-03 14:56:25 +02:00
c658fd27cc better spoof requests 2022-09-02 21:18:56 +02:00
260bab598e reword error messages 2022-09-02 20:20:43 +02:00
6f3b4fbaaf fix replies count 2022-09-02 20:16:02 +02:00
1e7d330350 Handle long usernames gracefully (#3286) 2022-09-02 14:11:31 +02:00
31244cbcc8 replicate headers and params made by yt apps 2022-08-30 14:20:08 +00:00
508a5761a1 Handle long usernames gracefully 2022-08-28 13:26:30 +01:00
4818b89ab1 Allow to set maximum custom playlist length via a config variable. 2022-08-27 22:36:07 +02:00
4e44123abc Update French translation
Co-authored-by: Chance Ducharme <avrilgazeau@hotmail.ca>
2022-08-25 10:39:16 +02:00
689365d713 Update Spanish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: nyoooooooooooooooom <p77q1nqi@anonaddy.me>
2022-08-25 10:39:16 +02:00
a7d9df5516 add check video id for android client too (#3280) 2022-08-25 10:39:10 +02:00
16b23efb4f Throw error if the returned videoID is different (#3278) 2022-08-23 21:59:22 +02:00
389e49183c throw error if the videoID returned is different 2022-08-23 19:34:54 +00:00
ca4c2115ee Message when the video doesn't exist in playlist 2022-08-23 11:45:44 +00:00
4c1a5f84fa Fix prefs cookies in player (#3276) 2022-08-22 16:16:50 +00:00
b0bb156918 Adapt StaticFileHandler for Crystal 1.6 (#3269) 2022-08-17 21:34:01 +02:00
5565204273 StaticFileHandler: use HTTP::Status rather than integers 2022-08-15 13:22:39 +02:00
d950a0ef5d StaticFileHandler: Adapt for Crystal 1.6
See:
 - https://github.com/crystal-lang/crystal/pull/12310
 - https://github.com/kemalcr/kemal/pull/644
2022-08-15 13:22:27 +02:00
b2c0f7efc3 Fix missing hash key: "toggleButtonRenderer" (issue #3260) 2022-08-15 10:34:52 +02:00
9e58bc19c4 Fix #3265 2022-08-13 20:23:45 +02:00
0d7e2afba4 Merge pull request #3261 from SamantazFox/routing-cleanup 2022-08-13 15:15:15 +02:00
e0d063d306 Merge pull request #3197 from weblate/weblate-invidious-translations 2022-08-13 15:14:18 +02:00
c847d6d370 Update licenses.ecr
Oh, it's handlers not helpers.
2022-08-12 19:59:35 +02:00
bbf66c9b72 Add/Change Javascript license notice 2022-08-12 07:58:52 +02:00
ed0ad587dc Update Indonesian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: uwu as a service <okayokokay@protonmail.com>
2022-08-11 01:03:47 +02:00
56fe591eee Update Portuguese (Portugal) translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Tmpod <tmpod@pm.me>
2022-08-11 01:03:47 +02:00
7b9693bca4 Update German translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Pixelcode <pixelcode@dismail.de>
2022-08-11 01:03:47 +02:00
fd0417b14c Update Greek translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: THANOS SIOURDAKIS <siourdakisthanos@gmail.com>
2022-08-11 01:03:46 +02:00
89c12f2585 Update Italian translation
Co-authored-by: atilluF <atilluf@outlook.com>
2022-08-11 01:03:46 +02:00
5c71adb137 Update Norwegian Bokmål translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Petter Reinholdtsen <pere-weblate@hungry.com>
2022-08-11 01:03:46 +02:00
4c23062d1e Update Arabic translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Rex_sa <rex.sa@pm.me>
2022-08-11 01:03:46 +02:00
190b45086c Update Russian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Егор Ермаков <eg.ermakov2016@yandex.ru>
2022-08-11 01:03:46 +02:00
008983c8e3 Update Sinhala translation
Update Sinhala translation

Add Sinhala translation

Co-authored-by: DilshanH <ntpghiran@hotmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-08-11 01:03:46 +02:00
cb8a375c5e routing: Directly call Kemal's add_route function 2022-08-10 20:50:49 +02:00
848a60aa9b routes: remove useless 'locale' variable in error 505 handler 2022-08-10 01:01:31 +02:00
88ea794fdb routes: move error 404 logic to its own module 2022-08-10 01:00:44 +02:00
870350fd61 routes: move before_all logic to its own module 2022-08-10 00:55:58 +02:00
1e25894f7e routing: move the remaining routes registration to a wrapper function 2022-08-10 00:48:09 +02:00
223e74569a routing: move feed routes registration to Invidious::Routing 2022-08-10 00:46:35 +02:00
0a4d793556 routing: move search routes registration to Invidious::Routing 2022-08-10 00:31:15 +02:00
5503914abe routing: move playlist routes registration to Invidious::Routing 2022-08-10 00:26:41 +02:00
906466d7fb routing: move watch/embed routes registration to Invidious::Routing 2022-08-10 00:22:40 +02:00
e2532de766 routing: move image proxy routes registration to Invidious::Routing 2022-08-10 00:20:04 +02:00
3ac4390d11 routing: move channel routes registration to Invidious::Routing 2022-08-10 00:14:26 +02:00
389ae7a573 routing: register playback routes with a function, rather than a macro 2022-08-10 00:10:29 +02:00
176247091d routing: register API routes with a function, rather than a macro 2022-08-10 00:07:47 +02:00
e22cc73f32 routing: register user routes with a function, rather than a macro 2022-08-09 23:56:34 +02:00
c23ad25899 routing: remove HEAD from HTTP methods
Kemal automatically creates an associated HEAD route for all GET routes
2022-08-09 23:39:53 +02:00
7f2ec18372 Add param 8AEB for getting youtube stories 2022-08-09 10:05:13 +02:00
9cc0418769 Merge pull request #3249 from iv-org/improve-extractor 2022-08-07 21:58:17 +02:00
925a2c8e77 Merge pull request #3253 from amarakon/master 2022-08-07 21:54:40 +02:00
390734d86e Merge pull request #3255 from iv-org/fix-content-not-available 2022-08-07 21:40:57 +02:00
218f7be1a7 For android client send sdk version to youtube 2022-08-07 21:37:11 +02:00
246955b68a if case for sectionListRenderer 2022-08-07 10:31:42 +02:00
d24506baed Add Ytfzf to projects using Invidious 2022-08-06 20:42:08 -04:00
b0be2237fa Merge pull request #3248 from iv-org/fix-cookies 2022-08-07 01:33:11 +02:00
945394fb1a Merge pull request #3252 from SamantazFox/bump-ytapi-clients 2022-08-07 01:15:49 +02:00
19886f71f5 Merge pull request #3250 from iv-org/fix-cookies 2022-08-07 00:52:30 +02:00
23855c09dc Remove 'screen' where not required 2022-08-07 00:37:09 +02:00
618ab01cd7 Add TVHtml5 client 2022-08-07 00:36:22 +02:00
349d90b60e Add IOS clients 2022-08-07 00:32:26 +02:00
9e7c2dcdbb Move the default API key to a constant for clarity 2022-08-06 23:49:36 +02:00
f353589a53 Bump web clients versions 2022-08-06 23:47:16 +02:00
fc97929dee Bump android app version 2022-08-06 23:28:19 +02:00
3d77642a1e Disable decrypt_polling by default + add comment (#3244) 2022-08-06 17:09:10 +00:00
b55c1a35bf Set cookies to Lax 2022-08-06 19:01:57 +02:00
5df700a56e Added image tag to RSS channel for favicon rendering
https://validator.w3.org/feed/docs/rss2.html#ltimagegtSubelementOfLtchannelgt
2022-08-06 17:14:17 +02:00
0c64a86ebe crystal 1.5.0 to CI and update crystal version 2022-08-06 15:12:45 +02:00
644ba46945 Remove mentions that decrypt_polling is broken
And add notice about bandwidth usage, related to https://github.com/iv-org/invidious/issues/3234
2022-08-06 10:09:45 +00:00
4ab54f284c Merge pull request #3214 from SamantazFox/fix-scheduled-streams 2022-08-03 22:44:58 +02:00
210c2a8855 Fix updated sources not returned inside map func
This fix the issue reported in https://github.com/iv-org/invidious/issues/2055#issuecomment-1192894698
2022-07-25 12:38:17 +00:00
0ed4f1a9a4 Add unit tests for scheduled livestreams 2022-07-21 00:33:39 +02:00
7e648840a1 Move InfoException to exceptions.cr 2022-07-19 21:05:49 +02:00
5e090778ae Use alpine 3.16 for crystal 1.4.1
Until crystal 1.5 has been tested.
2022-07-19 09:12:50 +02:00
049ed114fd Separate video data fetching from parsing in videos.cr 2022-07-18 23:35:34 +02:00
88007a08f2 Merge pull request #3205 from iv-org/escape-username 2022-07-15 00:30:10 +02:00
6c4ed282bb HTML escape username 2022-07-14 21:26:58 +00:00
c8765385df Fetch data from next endpoint for scheduled streams 2022-07-14 17:56:53 +02:00
0ed22c0be0 Merge pull request #3140 from AHOHNMYC/css-ie11-fixes 2022-07-14 16:31:03 +02:00
3ffef4b9fb Merge pull request #3133 from AHOHNMYC/widen-settings-name 2022-07-14 16:27:47 +02:00
ceeebceb3a Merge pull request #3199 from AHOHNMYC/fix-js-in-embed 2022-07-14 14:28:08 +02:00
0338b26d5c Include _helpers.js in embedded view 2022-07-14 02:07:19 +03:00
6577cc0c8c Fix a dead link to Docker install documentation (#3198) 2022-07-13 19:55:06 +00:00
586000ca3d add more explanation about checking the player dependencies 2022-07-12 08:38:22 +00:00
abc81ebd08 Merge pull request #3165 from SamantazFox/small-fixes-06-2022 2022-07-11 17:41:58 +02:00
cd6c73e487 Merge pull request #3162 from 138138138/138138138-audio-quality-1 2022-07-11 17:36:28 +02:00
69ad57338f Mention why we use multiple AdaptationSet for audio 2022-07-11 17:29:42 +02:00
cbcf31a4f9 Skip OTF streams in DASH audio
Skip OTF streams, prevent creating empty AdaptationSet in DASH audio
2022-07-10 16:54:56 +08:00
b19beac5b4 Update src/invidious/views/components/player.ecr
better syntax

Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2022-07-10 16:29:50 +08:00
dc6d088e30 Merge pull request #3158 from 138138138/138138138-mobileui-forward-rate 2022-07-07 00:05:25 +02:00
b0ad27af23 Merge pull request #3151 from weblate/weblate-invidious-translations 2022-07-07 00:02:36 +02:00
5f23c6358a Update Czech translation
Update Czech translation

Co-authored-by: Fjuro <fjuro@seznam.cz>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-07-06 23:25:13 +02:00
da776c935f Update Indonesian translation
Update Indonesian translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: liimee <alt3753.7@gmail.com>
Co-authored-by: uwu as a service <okayokokay@protonmail.com>
2022-07-06 23:25:12 +02:00
0a315783ef Update Portuguese (Portugal) translation
Update Portuguese (Portugal) translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Tmpod <tmpod@pm.me>
2022-07-06 23:25:12 +02:00
65061b0514 Update Japanese translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: uwu as a service <okayokokay@protonmail.com>
2022-07-06 23:25:12 +02:00
063e5e359e Update Turkish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
2022-07-06 23:25:12 +02:00
f460afca35 Update Chinese (Simplified) translation
Co-authored-by: Eric <alchemillatruth@purelymail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-07-06 23:25:12 +02:00
66a08ace1d Update Slovenian translation
Co-authored-by: Damjan Gerl <damjan@damjan.net>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-07-06 23:25:11 +02:00
68e65e968a Update Portuguese translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: SC <lalocas@protonmail.com>
2022-07-06 23:25:11 +02:00
1ba0ab982b Update Croatian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Milo Ivir <mail@milotype.de>
2022-07-06 23:25:11 +02:00
8752b8bb3f Update Finnish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Markus Mikkonen <markus.mikkonen@outlook.com>
2022-07-06 23:25:11 +02:00
168f86ef89 Update Portuguese (Brazil) translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: The Cats <philosoph@snopyta.org>
2022-07-06 23:25:11 +02:00
85927853f9 Update Chinese (Traditional) translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
2022-07-06 23:25:11 +02:00
57f60bf173 Update Ukrainian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
2022-07-06 23:25:10 +02:00
d16c3ed40a Update Italian translation
Update Italian translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Pietro Cappuccino <p.cappuccino@tiscali.it>
Co-authored-by: ㅤAbsurdUsername <sgso@pm.me>
2022-07-06 23:25:10 +02:00
e90f4a2cbf Update Norwegian Bokmål translation
Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-07-06 23:25:10 +02:00
d00839ec68 Update Russian translation
Update Russian translation

Update Russian translation

Update Russian translation

Co-authored-by: AHOHNMYC <lqwh2h2cwa@protonmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Егор Ермаков <eg.ermakov2016@yandex.ru>
2022-07-06 23:25:10 +02:00
ea35d92493 Merge pull request #3157 from 138138138/138138138-fix-captions 2022-07-06 23:22:56 +02:00
beb9894c47 Merge pull request #3124 from iv-org/add-404-status-code 2022-07-06 22:05:01 +02:00
5556a996cd Update comment for NotFoundException 2022-07-06 19:59:05 +00:00
f7b1dcc271 Don't treat LIVE_STREAM_OFFLINE playability status as an error (fixes #3155) 2022-07-04 22:24:36 +02:00
eb226e1dcf Remove all backend code related to dislikes 2022-07-04 22:24:23 +02:00
8332ad0f16 Fix syntax errors in shell scripts 2022-07-04 22:24:17 +02:00
06af5a004e Remove useless link in item forms (buttons on thumbnail) 2022-07-04 22:24:11 +02:00
ce32873ef8 Remove item (video/channel/mix) thumbnail from keyboard navigation tree 2022-07-04 22:23:56 +02:00
99bc230fe6 Fix missing hash key: "availableCountries" (Closes #3047) 2022-07-04 22:23:31 +02:00
0e3820b634 Add #to_http_params method to Query (Fixes #3148) 2022-07-04 22:21:27 +02:00
eba84dcd78 Merge pull request #3183 from 11Tuvork28/fix-selected-key-missing 2022-07-04 22:03:38 +02:00
864f27ef72 switched to extract_selected_tab for the community tab 2022-07-03 14:59:33 +02:00
a8b72d8342 Fixed community tab 2022-07-03 14:23:34 +02:00
15d2cfba90 Fix Missing hash key: "selected" (KeyError) 2022-07-03 14:03:42 +02:00
2851d993ad updated comment to represent current structure 2022-07-03 14:03:30 +02:00
3f1d88282e Update some comments 2022-06-25 19:26:14 +08:00
cc9ce916c6 Update MobileUi 2022-06-25 19:24:20 +08:00
c7d468578f Update MobileUi 2022-06-25 19:03:35 +08:00
e0f6988eb5 DASH Default to high quality m4a 2022-06-25 18:52:34 +08:00
09ff370ddc Change player.css order 2022-06-25 17:19:40 +08:00
32ecf30c82 Add audioTrackButton 2022-06-25 17:19:11 +08:00
a62adccd3d change lang to label
lang has to be BCP 47 standard. Using label also can let video.js know there are 2 audio tracks.
2022-06-25 16:33:02 +08:00
c75bf35f59 Update DASH format to serve 2 audio to player
player.audioTracks() can successfully show
tracks_: Array(2)
2022-06-24 17:26:30 +08:00
3013782b7b formatting 2022-06-23 03:03:54 +08:00
81abebd144 Highest quality m4a on audio only mode as default
Audio mode will automatically select highest quality m4a as default.
2022-06-23 02:27:46 +08:00
140b6c1227 DASH playback force highest quality m4a
Since VideoJS is unable to handle adaptive audio quality, the best audo quality is forced for every video quality.
2022-06-23 02:13:22 +08:00
ac685f65e9 Fix captions
textTracks 0 in DASH mode shows debug messages.
Use textTracks 1 in DASH mode, and textTracks 0 in non-DASH mode and audio mode.
2022-06-23 01:01:11 +08:00
de74056925 Keep listen mode after related video click
When clicking the related videos, listen mode will be kept by passing listen=true/listen=false on the URL.
2022-06-22 20:09:29 +08:00
f6b1cbd5d0 Player MobileUi fast forward/backward rate
The fast forward/backward seconds will be adjusted according to playback rate (same as YouTube app behavior).
5 seconds is used when the playback rate is 1x. Previously it was 10 seconds. I believe most of the users watch videos at 2x, so the change will not be obvious.
2022-06-22 19:33:02 +08:00
7db6e43e3f Fix captions
Captions should automatically show according to preferences.
2022-06-22 19:10:46 +08:00
6c73614a47 Bump revision for crystal alpine package on Docker 2022-06-13 13:18:37 +02:00
b5c54b4e41 Merge pull request #3137 from SamantazFox/add-hashtags
Add hashtags
2022-06-09 00:35:09 +02:00
8f1c84e6d4 Merge pull request #3119 from GauthierPLM/popular-enabled
Add "Popular Enabled: " string to localisation
2022-06-09 00:34:11 +02:00
d1df4af734 Merge pull request #3118 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-06-09 00:33:44 +02:00
23cd04fe88 Merge pull request #3116 from DoodlesEpic/fix-reddit-comments-nojs-ytkids
Fix document is empty error on yt kids video when reddit comments are enabled
2022-06-09 00:33:09 +02:00
dbc7c97e0b Merge pull request #3103 from SamantazFox/add-utility-scripts
Add utility scripts
2022-06-09 00:32:44 +02:00
2313ca8f72 Merge pull request #3084 from AHOHNMYC/js-helpers-polyfills
JS refactoring part 2: helper functions, poyfills
2022-06-09 00:30:34 +02:00
9418ba1687 Update Bengali translation
Update Bengali translation

Add Bengali translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Oymate <dhruboadittya96@gmail.com>
2022-06-09 00:12:33 +02:00
233491940c Update Indonesian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: I. Musthafa <i.musthafa66@gmail.com>
2022-06-09 00:12:33 +02:00
7708e7ab08 Update Slovenian translation
Update Slovenian translation

Co-authored-by: Damjan Gerl <damjan@damjan.net>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-06-09 00:12:32 +02:00
600bd38630 Update Portuguese translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: SC <lalocas@protonmail.com>
2022-06-09 00:12:32 +02:00
f7290dfcb6 Update Croatian translation
Update Croatian translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Milo Ivir <mail@milotype.de>
2022-06-09 00:12:32 +02:00
e22f7583eb Update Ukrainian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
2022-06-09 00:12:32 +02:00
c0e85f5687 Update Russian translation
Co-authored-by: AHOHNMYC <lqwh2h2cwa@protonmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-06-09 00:12:32 +02:00
3593f67eb6 Fix: related videos is a Hash(String, String) 2022-06-08 23:57:16 +02:00
1b251264a6 Pull submodules during CI 2022-06-08 23:57:15 +02:00
93c1a1d42e Add mocks as a submodule 2022-06-08 23:56:40 +02:00
d7f6b6b018 Fix CI: support reloadContinuationItemsCommand containers 2022-06-08 23:56:40 +02:00
fd99f20404 Fix CI: use be_close() with 1s delta for Time comparisons 2022-06-08 23:56:40 +02:00
2b1e1b11a3 Fix CI: support BADGE_STYLE_TYPE_VERIFIED_ARTIST 2022-06-08 23:56:40 +02:00
96ac7f9f35 Add hashtag extractor spec 2022-06-08 23:56:40 +02:00
33da64a669 Add support for hashtags 2022-06-08 23:56:40 +02:00
38eb4ccbc4 CSS. Small IE11 fixes 2022-06-06 21:51:47 +03:00
a57414307e CSS. Small IE11 fixes 2022-06-06 01:10:00 +03:00
7ad111e2f6 Update actions used in GH workflows (#3138) 2022-06-05 22:05:19 +02:00
a402128a7d Move _helpers.js include from various .ecr's into template.ecr head tag 2022-06-05 21:19:59 +03:00
d3ab4a5145 JS. Trailing spaces removed 2022-06-05 20:54:48 +03:00
4ae77bcef9 Remove rating display from the frontend 2022-06-04 15:39:04 +02:00
e84416e56d Remove dislikes icon (#3092) 2022-06-04 12:58:34 +02:00
59ccc9d73e Merge pull request #3134 from lhc-sudo/patch-1
Add TubiTui to Projects Using Invidious section of README.md
2022-06-01 20:21:55 +02:00
777
1533a28817 Add TubiTui to Projects Using Invidious section 2022-06-01 18:48:52 +01:00
7e4840867e CSS. Wider settings name to less word wrap 2022-06-01 17:16:07 +03:00
f2f3f045e5 fix time adding dirung redirection 2022-05-31 12:18:42 +03:00
b12149bafd Save time during redirection on another instance 2022-05-31 11:58:12 +03:00
307c1b0b62 Merge pull request #3128 from arekf/patch-1
Add Yattee to README
2022-05-29 19:56:30 +02:00
b201745988 Markdown enhancement 2022-05-29 19:56:11 +02:00
352266481e Add Yattee to README 2022-05-29 19:46:49 +02:00
c201ea53ba Add 404 status code on all possible endpoints 2022-05-27 14:06:38 +00:00
958867e92b Fix wrong french translation
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2022-05-25 23:41:12 +02:00
b50de2f2ed Add "Popular Enabled: " string to localisation 2022-05-25 20:58:58 +00:00
ad37db4c82 Fix document is empty error on yt kids video when reddit comments are enabled 2022-05-24 20:34:36 -03:00
c2d91c9544 Merge pull request #3112 from Froggo8311/Change-Badge-Mastodon-Fediverse
Change README.md badge from 'Mastodon' to 'Fediverse'
2022-05-24 13:41:27 +02:00
6eedca6e7e Fix alt text for readme badge (Mastodon -> Fediverse) 2022-05-23 20:55:08 -05:00
0bd1d0bb05 Change from 'Mastodon' to 'Fediverse'
Mastodon is one of multiple softwares that compose the Fediverse ("Federeated Universe"). Some of the most popular softwares include Misskey, Plemora, PeerTube, and Pixelfed, among others. 

As each instance (server) integrates using ActivityPub, any one of these softwares can be used to follow users or reply to posts(/toots/notes) on any instance.

Most people seem to not realize that Mastodon is different from the "umbrella term" Fediverse. :)
2022-05-23 20:51:52 -05:00
1f359f5a13 Print some helpful notice for PostgreSQL configuration 2022-05-21 19:18:01 +02:00
fe53b5503c Add a script to start postgres and create user/DB 2022-05-21 19:06:45 +02:00
d66ef8fe22 Add a script to install dependencies 2022-05-21 19:06:45 +02:00
6ff3a633f7 Merge pull request #2968 from mathiusD/description-link 2022-05-21 18:58:47 +02:00
46891437e9 Add Estonian to i18n.cr 2022-05-21 18:39:49 +02:00
b729597728 comment changed
extra spaces removed
2022-05-21 19:30:51 +03:00
f99d139025 Merge pull request #3058 from weblate/weblate-invidious-translations 2022-05-21 18:24:56 +02:00
b72b917af2 handled invalid values in storage
partial rewrite notifications.js
innerText to textContent
fixed bug with clamping
2022-05-21 13:35:41 +03:00
749869fdca Update translation files
Updated by "Remove blank strings" hook in Weblate.

Update Estonian translation

Add Estonian translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Koshkov <jedrikwojcik@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-05-19 23:18:58 +02:00
e56a694878 Update Czech translation
Co-authored-by: Fjuro <fjuro@seznam.cz>
2022-05-19 23:18:58 +02:00
8cb4d1dc28 Update Portuguese (Brazil) translation
Co-authored-by: André Marcelo Alvarenga <andrealvarenga@gmx.net>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-05-19 23:18:58 +02:00
68f1351507 Update Arabic translation
Co-authored-by: Light <0f723d5979@catdogmail.live>
2022-05-19 23:18:58 +02:00
66205286e4 Update Hindi translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Saurmandal <saurmandal@protonmail.com>
2022-05-19 23:18:58 +02:00
32be373552 Invert title & video ID in downloaded file name
Fixes a regression of #2922
Issue reported by email
2022-05-19 23:16:51 +02:00
b1128c17f1 Merge pull request #3099 from SamantazFox/fix-3096
Fix for #3096
2022-05-19 23:05:17 +02:00
319bbd2f81 JS code minor formatting
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2022-05-19 07:15:17 +03:00
d8fb4f0a87 Update text_to_parsed_content for add docs
Follow this comment :
https://github.com/iv-org/invidious/pull/2968#discussion_r851808433
2022-05-18 23:45:47 +02:00
2e195575a6 Rename uriMatch to urlMatch inside comments.cr
This refactor update text_to_parsed_content method
2022-05-18 23:45:47 +02:00
28efeaa4f2 Update management of channel description
Follow this comment :
https://github.com/iv-org/invidious/pull/2968#issuecomment-1066428317
2022-05-18 23:45:28 +02:00
137534f901 Fix for #3096 2022-05-18 23:36:50 +02:00
c9594d46af Add links redirect inside channel description 2022-05-18 23:24:41 +02:00
1097648f0a Fix HTML validation. This is how browser really split tags 2022-05-17 10:09:01 +03:00
17e6213448 Less player reload timeout 2022-05-17 10:03:07 +03:00
2ea423032e Share video regression. Single quotes are required 2022-05-17 09:43:05 +03:00
2dead1a19b JS theme switching simplified 2022-05-16 13:51:28 +03:00
e18b10297b JS fixes: recursion in themes, keys for frame walking, JSON XHR and details-summary in IE11 2022-05-16 13:13:00 +03:00
fd66084388 js code rewrite. Themes rewritten, bugs fixed 2022-05-15 08:38:46 +03:00
ca27e096f3 Merge pull request #3094 from rfwatson/remove-puts-statements
Remove puts statements in config.cr
2022-05-11 17:49:45 +02:00
125997f45f Remove puts statements in config.cr 2022-05-11 10:22:39 +02:00
da8a2c7bbb Merge pull request #3087 from iv-org/fix-captions-download
Fix download of captions
2022-05-07 15:39:23 +02:00
81ca205caa Fix download of captions 2022-05-07 15:34:56 +02:00
f06d5b973b jsdoc type fix 2022-05-06 07:42:15 +03:00
fd890f9c0a fix helpers storage 2022-05-06 07:21:19 +03:00
835237382f fix helpers 2022-05-06 06:16:41 +03:00
7dd699370f js code rewrite. Created _helpers.js with XHR and storage wrapper 2022-05-06 04:46:59 +03:00
ef8c7184de Merge pull request #3083 from iv-org/add-slovenian
Add Slovenian to i18n.cr
2022-05-04 22:40:13 +02:00
92026c1f98 Merge pull request #3082 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-05-04 22:36:52 +02:00
9bd9dcc41c Add Slovenian to i18n.cr 2022-05-04 22:36:31 +02:00
81b97ba52f Update Slovenian translation
Add Slovenian translation

Co-authored-by: Damjan Gerl <damjan@damjan.net>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-05-04 22:30:08 +02:00
ae36777d14 Update Portuguese (Brazil) translation
Co-authored-by: Vinicius <rodriguessv30@gmail.com>
2022-05-04 22:30:07 +02:00
3d7ad82f3e Update Dutch translation
Co-authored-by: Gert-dev <qnyasgjhapqyuhoibr@kiabws.com>
2022-05-04 22:30:07 +02:00
059796c60d Merge pull request #3076 from SamantazFox/fix-3062-3063
Fix regressions of #2936
2022-05-04 22:29:10 +02:00
b0342b7449 Other minor fixes 2022-05-03 22:28:19 +02:00
b867dd82ca Merge pull request #3077 from SamantazFox/verified-checkmark
Merge "Youtube verification badge" again (with fixes)
2022-05-02 23:57:01 +02:00
a122286d48 Add Hindi to i18n.cr 2022-05-02 20:49:12 +02:00
837db800bc Merge pull request #3080 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-05-02 19:30:21 +02:00
44fe39821a Update Portuguese (Brazil) translation
Co-authored-by: Vinicius <rodriguessv30@gmail.com>
2022-05-02 19:28:57 +02:00
fbc6b14424 Update Russian translation
Co-authored-by: Егор Ермаков <eg.ermakov2016@gmail.com>
2022-05-02 19:28:57 +02:00
9c00140464 Update Hindi translation
Add Hindi translation

Co-authored-by: Creeper <abhijit.naug@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-05-02 19:28:57 +02:00
00d8deda0e Merge pull request #3065 from 138138138/master
Fix iOS 3 buttons separated lines
2022-05-02 19:28:38 +02:00
b84ce6a556 Fix "cast from Nil to Bool failed" 2022-05-01 21:11:12 +02:00
f5fb4c6c64 Apply 2859.diff 2022-05-01 21:10:43 +02:00
ac686fefe1 Merge pull request #3075 from SamantazFox/video-api-newpipe-compat-2
Video API: Improve NewPipe compatibility (part 2)
2022-05-01 19:11:59 +02:00
e690e166b0 Fix javascript:void(0) instead of youtu.be links 2022-05-01 18:48:08 +02:00
6a02dd8842 Fix broken hashtag links 2022-05-01 17:42:53 +02:00
66e2c01a3e Merge pull request #3073 from iv-org/SamantazFox-patch-1
Revert html escaping of backtrace
2022-05-01 17:30:20 +02:00
7f2176d7fc Add 'targetDurationSec' and 'maxDvrDurationSec' to videos API 2022-05-01 17:21:10 +02:00
4434889270 Merge pull request #3072 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-05-01 13:57:07 +02:00
96afc1a45d Revert html escaping of backtrace 2022-05-01 13:40:02 +02:00
dbe49610a1 Update Russian translation
Co-authored-by: AHOHNMYC <lqwh2h2cwa@protonmail.com>
2022-05-01 11:13:03 +02:00
62fadb54ee Update Hungarian translation
Co-authored-by: f3rr31 <5920873@disroot.org>
2022-05-01 11:13:03 +02:00
3832383936 Update English (United States) translation
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2022-05-01 11:13:03 +02:00
595c3fb833 Revert "Youtube verification badge" (#3070) 2022-04-30 23:42:38 +02:00
1d25c55c0b Merge pull request #2859 from jonas-w/verified-badge
Youtube verification badge
2022-04-30 18:54:38 +02:00
6376e78e0b Merge pull request #3054 from DUOLabs333/patch-1
Widen Youtube player seek bar a little
2022-04-30 18:53:36 +02:00
1f08d2929c Fix iOS 3 buttons separated lines 2022-04-30 16:55:12 +08:00
04953d97ad Merge pull request #3064 from iv-org/crystal1.4.1
bump to crystal 1.4.1
2022-04-29 19:06:55 +02:00
64fe4de3fb bump to crystal 1.4.1 2022-04-29 06:16:54 +00:00
58008445e2 Merge pull request #3060 from SamantazFox/video-api-newpipe-compat
Video API: Improve NewPipe compatibility
2022-04-27 21:58:03 +02:00
b7f0b054b8 It's OTF, not OFT 2022-04-27 21:46:45 +02:00
3bbd709bd6 Merge pull request #3045 from AHOHNMYC/js-lint
Js lint
2022-04-27 18:32:40 +02:00
dbb1e3f5d8 replace tabs to spaces 2022-04-27 15:01:34 +03:00
8144308aee Add extra data to 'adaptiveFormats' in videos API 2022-04-27 00:22:34 +02:00
0503d2a9f3 Fix 'adaptiveFormats' not available for livestreams in videos API 2022-04-27 00:22:10 +02:00
fafd4d9396 new lines in the end of file 2022-04-25 13:14:08 +03:00
3431a1b1de console.warn and info instead of log 2022-04-25 12:54:32 +03:00
026ea52445 optional catchng is not supported by IE11 2022-04-25 12:54:31 +03:00
1e60b9a322 destructing binding is not supported by IE11 2022-04-25 12:54:31 +03:00
7450cb1f21 default parameters 2022-04-25 12:54:30 +03:00
cdd5a9e935 replace huphen-minus to real minus 2022-04-25 12:54:30 +03:00
c4cc50ca39 replace innerHTML to safer textContent where possible 2022-04-25 12:54:30 +03:00
9b09d369d9 add variable declarations 2022-04-25 12:54:25 +03:00
12ab11413f fix double variable declaration 2022-04-25 10:17:15 +03:00
352f3640cf transform template string 2022-04-25 10:17:12 +03:00
7940e91cbe single quotes 2022-04-25 10:15:57 +03:00
577a2356a0 convert arrow functions 2022-04-25 10:14:29 +03:00
38ef0b10e7 eqeqeq 2022-04-25 10:14:24 +03:00
c72d3c4a0e semicolons 2022-04-25 10:13:00 +03:00
eb7e48b059 use strict 2022-04-25 10:12:16 +03:00
ab62fa1c4f Lower margin-bottom some more 2022-04-24 19:51:29 -04:00
a7cf1f6cca Update player.css
Fixed "floating" seek bar
2022-04-24 19:06:28 -04:00
80d89f31fe Widen Youtube player a bit 2022-04-24 18:06:56 -04:00
a0f566fef3 Merge pull request #3052 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-04-24 23:39:47 +02:00
c93d362dd4 Update Albanian translation
Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
2022-04-24 17:32:14 +02:00
db72f5d011 Update French translation
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2022-04-24 17:32:13 +02:00
03704384a8 Update Slovak translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Juraj Liso <lisojuraj@gmail.com>
2022-04-24 17:32:13 +02:00
5b17ec0b56 Update Finnish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Markus Mikkonen <markus.mikkonen@outlook.com>
2022-04-24 17:32:13 +02:00
d4acd03698 Merge pull request #3044 from MathiusD/base-time-code-lost
Fix regression related of timestamp 0:00
2022-04-24 17:32:01 +02:00
2ea986326d Bump videojs to 7.12.1 (#3011) 2022-04-22 22:37:45 +02:00
da53de2097 Fix regression related of timestamp 0:00 2022-04-20 00:42:09 +02:00
cf755dec22 Merge pull request #3027 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-04-18 15:57:51 +02:00
d25e5e1849 Update Italian translation
Update Italian translation

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:10 +02:00
593648780f Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:10 +02:00
bb04ff5942 Update Dutch translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:10 +02:00
12db276eb8 Update Albanian translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:10 +02:00
596fc3e908 Update Portuguese translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:10 +02:00
9c54b94265 Update Korean translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:09 +02:00
3c1cfce95a Update Vietnamese translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:09 +02:00
2f9f3142e2 Update Lithuanian translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:09 +02:00
92070e502c Update Serbian translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:09 +02:00
48b1154a71 Update Czech translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Fjuro <fjuro@seznam.cz>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:09 +02:00
bcdfb98454 Update Hebrew translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:08 +02:00
f26c1f8095 Update Danish translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:08 +02:00
790a24bdeb Update Croatian translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:08 +02:00
5d2b9392d5 Update Indonesian translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:08 +02:00
6be242fc15 Update Persian translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:08 +02:00
8158c5042b Update Portuguese (Portugal) translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:07 +02:00
c70cdd88c7 Update Swedish translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:07 +02:00
bc6d6b6550 Update Serbian (cyrillic) translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:07 +02:00
9584d8e16d Update Portuguese (Brazil) translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:07 +02:00
4693c678d0 Update Romanian translation
Co-authored-by: Dorian Oszczęda <vxern@wordcollector.co.uk>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-04-18 15:56:07 +02:00
2c7d668f81 Update Japanese translation
Update Japanese translation

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:06 +02:00
de2f963717 Update Turkish translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:06 +02:00
e83da76dc7 Update Chinese (Simplified) translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Eric <alchemillatruth@purelymail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:06 +02:00
643730221d Update Greek translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:06 +02:00
ab63f9ef31 Update Ukrainian translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Denys Nykula <nykula@ukr.net>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:06 +02:00
dc870c4cc4 Update Esperanto translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:05 +02:00
dd709dec18 Update Spanish translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hin Weisner <translatu.godwit@aleeas.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:05 +02:00
cd5b71aedd Update French translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:05 +02:00
d33cc025ee Update Norwegian Bokmål translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:05 +02:00
e7159f2803 Update Arabic translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:05 +02:00
56b8a18820 Update Polish translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:04 +02:00
5832794034 Update German translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:04 +02:00
a26b197687 Update Russian translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:04 +02:00
12dba0955a Update Chinese (Traditional) translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:04 +02:00
7bd425bb3d Update Hungarian translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:04 +02:00
845ad17a04 Update Finnish translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-04-18 15:56:03 +02:00
67e8fcaf93 bump to crystal 1.4.0 (#3041) 2022-04-18 09:05:18 +02:00
aa07ee22cf Merge pull request #3039 from iv-org/SamantazFox-patch-1
Fix comment "pings" (#3038)
2022-04-17 23:34:38 +02:00
3702e8c6fe Fix comment "pings" (#3038) 2022-04-17 18:02:47 +02:00
21bd4edee4 Merge pull request #3034 from AHOHNMYC/http-fix
Remove insecure protocol in embedded view
2022-04-17 12:08:54 +02:00
31de39a7a4 Remove insecure protocol in embedded view 2022-04-17 04:32:15 +03:00
d0fc2569ff Merge pull request #2934 from SamantazFox/bump-kemal
Bump kemal dependency to v1.1.2
2022-04-17 00:12:00 +02:00
4fd1631b30 Update crystal version in CI 2022-04-16 22:49:56 +02:00
0a1614a872 Also move the other Kemal class override to src/ext/ 2022-04-16 22:48:24 +02:00
1f66d7ef74 Keep using kilt for rendering
Directly using Crystal's ECR seems to be causing issues, so
don't use kemal's 'render' macro and patch 'content_for' to
have the same behavior as before Kemal v1.1.1
2022-04-16 22:48:24 +02:00
84b6429ca6 Fix error due to templating engine change 2022-04-16 22:48:24 +02:00
212e5ebab5 Also bump 'exception_page', a kemal dependency 2022-04-16 22:48:24 +02:00
a6106077bd Bump kemal to v1.1.2 2022-04-16 22:48:24 +02:00
fa4ce6b4e6 Merge pull request #3033 from SamantazFox/search-fixes
Search fixes
2022-04-16 20:32:41 +02:00
4130136718 Merge pull request #2936 from MathiusD/expand-link
Increase size of links displayed in video description
2022-04-16 20:31:28 +02:00
c7c1b8d4f1 Fix issues in Search::Query 2022-04-16 20:25:25 +02:00
25b60a1b90 Add spec for the Search::Query class 2022-04-16 20:24:50 +02:00
dda4dadfa3 Merge pull request #3031 from AHOHNMYC/fix-filter-checkbox
Fix filter checkbox
2022-04-16 13:21:19 +02:00
570dbc7b47 Fix filter checkbox
Due to different prefixes in id (`filter-features` in `input` and `filter-feature` in `label`) click on `label` didn't affect corresponding checkbox.
2022-04-16 08:58:45 +03:00
6c122248f5 Update regex reduce_uri utils
Follow this comment :
https://github.com/iv-org/invidious/pull/2936#discussion_r850712676
2022-04-14 22:42:21 +02:00
4a369bb3c0 Merge pull request #3023 from AHOHNMYC/improve-filters-visual
Filters visual improvement
2022-04-14 20:36:53 +02:00
95cf57e3bd Merge pull request #3026 from iv-org/revert-2928-bump-dependencies
Revert "Bump dependencies"
2022-04-14 18:35:06 +02:00
0e6f7a4dc1 Revert "Bump dependencies" 2022-04-14 17:59:22 +02:00
6f21834e71 Real minus sign instead of hyphen-minus
Minus sign in comparison with hyphen-minus (symbol that prints your keyboard by default) has horizontal line on same level as plus sign and same width, so one can be toggled to another with perfect visuals.
https://en.wikipedia.org/wiki/Plus_and_minus_signs
https://en.wikipedia.org/wiki/Hyphen-minus
2022-04-13 04:23:10 +03:00
cf6ad254fb Pointer cursor on Filters `summary'
`summary` clickable by design, but by default (at least in Chrome) it has `text` cursor.
2022-04-13 04:15:37 +03:00
fabbecf4c2 Merge pull request #2928 from SamantazFox/bump-dependencies
Bump dependencies
2022-04-09 20:36:09 +02:00
8262aa4138 Merge pull request #2895 from MathiusD/master
Persist player volume/speed
2022-04-09 20:05:28 +02:00
95d86ebf22 Sanity check + comment why we add a leading dot 2022-04-09 20:04:42 +02:00
6aa7db2358 Minor code/comments cleaning 2022-04-09 19:58:49 +02:00
5637c6e651 Merge pull request #3013 from iv-org/rescue-db-errors-get-video
Rescue DB errors in get_video()
2022-04-09 19:35:49 +02:00
Leo
6f705b053a Updates the URL of the var url_faq (#3016) 2022-04-09 08:20:28 +02:00
1f3f2788d4 Merge pull request #3002 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-04-09 01:59:39 +02:00
ed3c202099 Update Ukrainian translation
Co-authored-by: Denys Nykula <nykula@ukr.net>
2022-04-09 01:58:20 +02:00
0396eec398 Update Norwegian Bokmål translation
Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
2022-04-09 01:58:20 +02:00
62dcec49e4 Update German translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Pixelcode <pixelcode@dismail.de>
2022-04-09 01:58:20 +02:00
2f6afb5e86 Update Danish translation
Co-authored-by: Grooty12 <Rasmus@rosendahl-kaa.name>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-04-09 01:58:20 +02:00
a3a2b2aafb Replace "Github" by "GitHub" 2022-04-09 01:57:51 +02:00
4900ce24fa Merge pull request #2956 from SamantazFox/search-filters
Overhaul search filters
2022-04-08 23:49:03 +02:00
135aaf56fd Rescue DB errors in get_video() 2022-04-08 22:52:34 +02:00
62d7abdd9e Add a user friendly message for when no results are found 2022-04-08 22:28:43 +02:00
91b079f4df Merge pull request #3007 from iv-org/TheFrenchGhosty-postgres13
Set the Postgres version to 13 as a temporary workaround for #2938
2022-04-04 20:37:10 +00:00
2c6cd74dc1 Set the Postgres version to 13 as a temporary workaround for #2938 2022-04-04 20:36:45 +00:00
68ac18dc98 Remove useless call
Follow this comment :
https://github.com/iv-org/invidious/pull/2936#discussion_r841277735
2022-04-03 23:26:34 +02:00
dbc74164ab Clean up CSS and add light/dark theme support 2022-04-03 22:56:54 +02:00
76c7b2ee9c Normalize translation keys in other locales (3/3) 2022-04-03 22:28:11 +02:00
d6913c1eb9 Normalize translation keys in other locales (2/3) 2022-04-03 22:28:11 +02:00
9aa00b2f0a Normalize translation keys in other locales (1/3) 2022-04-03 22:28:11 +02:00
af02917766 Code cleanup 2022-04-03 22:28:11 +02:00
d93a7b315d Make use of Search::Query/Filters and associated HTML generator 2022-04-03 22:27:52 +02:00
a813955ad3 Add Search::Query class to handle search queries 2022-04-03 20:03:34 +02:00
1e3425fdee Add filters UI HTML generator 2022-04-03 20:01:24 +02:00
a2b326e306 Merge pull request #2993 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-04-03 15:07:22 +02:00
0fa0e8e3f3 Merge pull request #2990 from 138138138/master
Safari audio double duration fix for iOS 15
2022-04-03 15:01:30 +02:00
dbae7502e5 Update Italian translation
Co-authored-by: Renix <kastletxd@protonmail.com>
2022-03-30 19:52:43 +02:00
f47552c0c4 Update Norwegian Bokmål translation
Co-authored-by: Petter Reinholdtsen <pere-weblate@hungry.com>
2022-03-30 19:52:43 +02:00
74836828c9 Update Finnish translation
Co-authored-by: Markus Mikkonen <markus.mikkonen@outlook.com>
2022-03-30 19:52:43 +02:00
c152243b4d new method for bypassing age restriction (#2996) 2022-03-30 19:52:39 +02:00
2a40c9a595 Merge pull request #2997 from iv-org/TheFrenchGhosty-patch-1
Update the documentation documents links in the README
2022-03-29 20:40:08 +00:00
3cea493d49 Update the documentation documents links in the README 2022-03-29 20:39:59 +00:00
6991d0851f Add a function to generate HTTP::Params from Filters 2022-03-29 20:31:23 +02:00
fb2a331f79 Add a function to parse search filters from invidious URL params 2022-03-29 20:31:23 +02:00
c888524523 Add a function to parse invidious legacy search filters 2022-03-29 20:31:23 +02:00
75c9dbaf6b Add a function to parse youtube search parameters 2022-03-29 20:31:23 +02:00
c01a29fe76 Add a function to build youtube search filters
(it aims at replacing produce_search_params)
2022-03-29 20:31:23 +02:00
80417281c4 Add a struct for search filters 2022-03-29 20:31:23 +02:00
f9b8bc006f Create a search processors module 2022-03-29 20:31:23 +02:00
2c22b0839f Safari audio double duration fix for iOS 15
The previous method breaks Always Loop feature on iOS 15.
The previous player.currentTime(player.duration() + 1) sometimes breaks the entire player.
Now it jumps to (end - 1) seconds when the time goes between over half and (end - 2) seconds.
With Always Loop on, player will jump to the beginning after 1 second.
2022-03-27 18:32:00 +08:00
ec3e67e0d2 Wait that was too much replacing 2022-03-26 20:18:24 +01:00
611e7e9dd8 Changed icon to checkmark and for verified author to checkmark-circle 2022-03-26 20:13:33 +01:00
f4e19ac05c Merge pull request #2983 from llsc12/master
Add WatchTube
2022-03-23 22:18:45 +01:00
70663af190 Add WatchTube 2022-03-22 17:41:15 +00:00
ed265cfdcd Request minified JSON from innertube (#2974) 2022-03-16 09:07:30 +01:00
5b82370bc3 Merge pull request #2961 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-03-15 07:59:56 +01:00
47690fffc1 Merge pull request #2965 from AHOHNMYC/patch-2
Uppercase some first letters in language selector
2022-03-13 23:14:23 +01:00
aa09bbe23d Done some refactoring 2022-03-13 20:16:30 +01:00
a09fbad8b0 Merge branch 'iv-org:master' into verified-badge 2022-03-13 19:06:52 +01:00
357ba2f4f6 Uppercase some first letters 2022-03-13 08:53:27 +03:00
b32dd746a6 Update Indonesian translation
Co-authored-by: I. Musthafa <i.musthafa66@gmail.com>
2022-03-11 20:51:15 +01:00
b4ea1ccc23 Update Basque translation
Update Basque translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Izei <mikelbre@gmail.com>
2022-03-11 20:51:15 +01:00
2aecbfbb67 Update Czech translation
Co-authored-by: Fjuro <fjuro@seznam.cz>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-03-11 20:51:15 +01:00
6d3b907307 Update --help to mention that --migrate is still in beta 2022-03-11 20:51:12 +01:00
55da1e3e92 Merge pull request #2878 from matthewmcgarvey/migrations
Add custom migration implementation
2022-03-11 20:49:26 +01:00
f3aa0d6428 Merge pull request #2960 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-03-10 00:22:10 +01:00
ad89be7523 Update Italian translation
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2022-03-09 23:54:05 +01:00
49a7c16de5 Update Greek translation
Co-authored-by: THANOS SIOURDAKIS <siourdakisthanos@gmail.com>
2022-03-09 23:54:05 +01:00
e414476c6e Update Spanish translation
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2022-03-09 23:54:05 +01:00
391690d570 Update Lithuanian translation
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2022-03-09 23:54:05 +01:00
1be4af733b Update Croatian translation
Co-authored-by: Milo Ivir <mail@milotype.de>
2022-03-09 23:54:04 +01:00
e3222d99ac Update Swedish translation
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2022-03-09 23:54:04 +01:00
5b19d33387 Update Russian translation
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2022-03-09 23:54:04 +01:00
272c85c062 Update Czech translation
Co-authored-by: Fjuro <fjuro@seznam.cz>
2022-03-09 23:54:04 +01:00
7101af764a Update German translation
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2022-03-09 23:54:04 +01:00
e582d25654 Update Arabic translation
Co-authored-by: Rex_sa <rex.sa@pm.me>
2022-03-09 23:54:04 +01:00
9991c4507d Update Japanese translation
Co-authored-by: GnuPGを使うべきだ <dieeeazpnnqbpddh@cock.email>
2022-03-09 23:54:03 +01:00
37b3248202 Update English (United States) translation
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2022-03-09 23:54:03 +01:00
0585131f78 Update Finnish translation
Co-authored-by: Markus Mikkonen <markus.mikkonen@outlook.com>
2022-03-09 23:54:03 +01:00
7e351b21bc Fix broken links (#2958) 2022-03-09 15:24:32 +01:00
440549fcc5 Merge pull request #2952 from iv-org/SamantazFox-patch-1
API: fix suggestions not workin
2022-03-07 15:52:50 +00:00
f7b557eed1 API: fix suggestions not workin
Closes #2914 
Thanks to @TiA4f8R for the help
2022-03-06 01:12:57 +01:00
bdfe317e20 Fix deprecated helm chart dependency (#2944) 2022-03-03 16:09:13 +01:00
19805b91d9 Patch links related to youtube.com
Related to followings comments :
- https://github.com/iv-org/invidious/pull/2936#discussion_r815253405
2022-02-26 17:53:39 +01:00
420c458b6a Update links related to youtube.com
Following comment at :
- https://github.com/iv-org/invidious/pull/2936#discussion_r814435888
2022-02-25 21:07:12 +01:00
6de449811d Merge branch 'iv-org:master' into verified-badge 2022-02-25 19:29:12 +01:00
081fd541af Merge pull request #2939 from iv-org/dockerfile-fix
Fix the Dockerfile sed command
2022-02-25 18:25:06 +00:00
7dcd5035c0 Fix the Dockerfile sed command (Closes #2938) 2022-02-25 19:01:14 +01:00
0f1bb3fb3b Update reduce_uri signature
Following request_change at :
- https://github.com/iv-org/invidious/pull/2936#discussion_r814436660
2022-02-25 11:47:07 +01:00
78c447829a Increase size of links displayed in video description 2022-02-25 02:11:30 +01:00
7f445f6167 Merge pull request #2915 from MathiusD/RefreshChannelsJob-frenquency
Allow configuration of the time between 2 RefreshChannelsJob
2022-02-25 00:04:48 +01:00
bf599284ed Merge pull request #2935 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-02-24 22:54:48 +01:00
a21c10e209 Update Chinese (Traditional) translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
2022-02-24 22:53:10 +01:00
56ee44ee09 Update Chinese (Simplified) translation
Co-authored-by: Eric <alchemillatruth@purelymail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-02-24 22:53:10 +01:00
c6df54a103 Update French translation
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2022-02-24 22:53:10 +01:00
575b039170 Merge pull request #2922 from SamantazFox/download-widget-fix
Download widget fix
2022-02-24 22:53:06 +01:00
7a32269d7f Merge pull request #2925 from matthewmcgarvey/routes-final
Move last remaining routes in main file to new pattern
2022-02-24 22:49:01 +01:00
004e371051 Don't double-encode file title 2022-02-24 22:37:54 +01:00
d5f43bae92 Combine notifications endpoints and move them 2022-02-23 22:45:07 -06:00
e215a20a0a Move live endpoints into Channels route 2022-02-23 22:41:34 -06:00
919413e2b9 Move captcha endpoint into Login route 2022-02-23 22:39:43 -06:00
45839f8d59 Merge pull request #2932 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-02-24 00:09:11 +01:00
55b62f9fde Update Icelandic translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-02-23 23:57:45 +01:00
4c3529f3d5 Update Turkish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
2022-02-23 23:57:45 +01:00
ab7580c0da Update Polish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Tsuki <sech1p@disroot.org>
2022-02-23 23:57:45 +01:00
25c079fded Update Spanish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
2022-02-23 23:57:45 +01:00
d8bb75be63 Document 'extend_desc' in config.example.yml
Thanks to "Le Jester" on Matrix for noticing that it was missing!
2022-02-23 21:50:30 +01:00
a8021e09a7 Merge pull request #2917 from iv-org/better-compose
Enhance the development compose file
2022-02-23 20:17:35 +00:00
16530ac6de Move back to a Debian-based Postgres image 2022-02-23 21:01:12 +01:00
5d1a1fef0f Merge pull request #2929 from SamantazFox/add-disable-history-option
Make the history recording optional.
2022-02-23 18:43:15 +01:00
6082887070 Add missing '_label' suffix to translation identifier 2022-02-23 16:43:59 +01:00
8da336b7aa Move the "watch history" checkbox under the "user" section 2022-02-23 16:42:34 +01:00
3da0287ede Let 'shards update' sort the shard.lock file 2022-02-23 13:23:17 +01:00
ea3331840d Fix typo in shard.yml 2022-02-23 13:21:52 +01:00
3fc0f72f3a Bump 'spectator' to v0.10.5 2022-02-23 13:21:03 +01:00
ea3abe6069 Bump 'sqlite3' to v0.19.0 and 'pg' to v0.26.0 2022-02-23 13:15:38 +01:00
897f871f99 Make the history recording optional. 2022-02-23 13:03:21 +01:00
2f335b3d2c Use a dedicated endpoind for downloads
This allows us to not pass file name ("title") in the form
data and to enforce some sanity checks
2022-02-23 13:00:30 +01:00
3b1837a99b Move remaining routes to new structure 2022-02-22 23:20:09 -06:00
cc59de0c93 Extract live endpoints to route 2022-02-22 23:04:30 -06:00
997d936e9c Merge pull request #2924 from iv-org/SamantazFox-patch-1
Clean make help
2022-02-23 01:00:08 +00:00
253256bf37 Clean make help
Forgot to mute the echo commands :X
2022-02-23 00:18:48 +01:00
e60a1836fe Lint config.example.yml and config.cr
Follow lint indications :
- https://github.com/iv-org/invidious/pull/2915#discussion_r812396203
- https://github.com/iv-org/invidious/pull/2915#discussion_r812396807
2022-02-22 23:19:59 +01:00
e66b317f02 Reduce regex in player script
Following correction at:
https://github.com/iv-org/invidious/pull/2895#issuecomment-1048245008
2022-02-22 22:53:26 +01:00
b417ea8e3a Merge pull request #2923 from iv-org/SamantazFox-patch-1
Fix captions regex
2022-02-22 20:48:03 +01:00
aa8758dec2 Patch updateCookie for preserve extra args (like domain) 2022-02-22 20:05:22 +01:00
b58b0440d6 Fix captions regex 2022-02-22 19:44:41 +01:00
ad6b29c09f Update cookie domain definition in player script
Related with :
https://github.com/iv-org/invidious/pull/2895#issuecomment-1047762544
2022-02-22 18:58:41 +01:00
09a585c93b Add sameSite policy in cookie management in server side 2022-02-22 18:57:21 +01:00
a9d2d2211a Apply suggestion
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2022-02-22 17:31:45 +00:00
fe057c7873 Make a function that builds the download widget's HTML 2022-02-22 17:42:41 +01:00
dfcaed93ea Enforce the source of the image (mostly for Podman compatibility) 2022-02-22 15:40:11 +01:00
5e3fcad1fb Remove the enforced container_name following suggestions 2022-02-22 15:36:15 +01:00
8e4959a621 Update cookie declaration for preserve SameSite directive 2022-02-22 13:15:53 +01:00
555bb711c9 Removal of changes to methods now unrelated to the issue
Unrelated to the issue since the change in management of channel_refresh_interval
Cf this remark : https://github.com/iv-org/invidious/pull/2915#discussion_r811373503
2022-02-22 08:17:50 +01:00
afa3eff313 Remove useless config inside docker-compose
Follow lint indications :
https://github.com/iv-org/invidious/pull/2915#discussion_r811501709
2022-02-22 08:07:50 +01:00
9e91fd5241 Enforce a container_name and rename the postgres container 2022-02-22 03:02:14 +01:00
d90d347006 Re-order the configs in the order of the config file + add statistics_enabled 2022-02-22 02:55:42 +01:00
385fe4be22 Move to an Alpine-based Postgres image 2022-02-22 02:43:25 +01:00
7ec88741a6 Fix YAML syntax 2022-02-22 02:24:43 +01:00
86cb68413d Add a comment explaining that it builds an image from source 2022-02-22 02:11:44 +01:00
05c5d293eb Enhance the development compose file 2022-02-22 01:54:36 +01:00
fd0ac3a671 Update management of channel_refresh_interval
Follow indications:
https://github.com/iv-org/invidious/pull/2915#discussion_r811373503
2022-02-22 01:35:35 +01:00
f109d812a1 Move TimeSpanConverter with another Converters
Follow indications :
https://github.com/iv-org/invidious/pull/2915#discussion_r811373953
2022-02-22 01:34:19 +01:00
5d2f2690e2 Lint config properties
Follow lint indications :
https://github.com/iv-org/invidious/pull/2915#discussion_r811375584
2022-02-22 00:59:55 +01:00
505a81d087 Merge pull request #2912 from MathiusD/share-with-timestamp
Add currentTimestamp in shared url by videojs-share
2022-02-22 00:47:02 +01:00
dfab62ce48 Rename new property to channel_refresh_interval
Follow indications :
https://github.com/iv-org/invidious/pull/2915#discussion_r811373503
2022-02-22 00:46:26 +01:00
31699468fc Lint docs of addCurrentTimeToURL in player script
Follow lint indications :
https://github.com/iv-org/invidious/pull/2912#discussion_r811479583
2022-02-22 00:44:36 +01:00
857096ba5f Merge pull request #2910 from MathiusD/expose-version
Expose version by default on api/v1/stats
2022-02-22 00:39:54 +01:00
36c7d4270b Lint conditional deletion of t in addCurrentTimeToURL inside player script
Follow lint indications :
https://github.com/iv-org/invidious/pull/2912#discussion_r811474927
2022-02-22 00:27:00 +01:00
d77586d02d Remove extra space in shareOptions.embedCode of player script
Follow lint indications :
https://github.com/iv-org/invidious/pull/2912#discussion_r811367117
2022-02-22 00:21:47 +01:00
c8fbb74835 Merge pull request #2916 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-02-22 00:19:11 +01:00
dfee375b98 Update Greek translation
Co-authored-by: THANOS SIOURDAKIS <siourdakisthanos@gmail.com>
2022-02-22 00:17:21 +01:00
9268258773 Update Croatian translation
Co-authored-by: Milo Ivir <mail@milotype.de>
2022-02-22 00:17:21 +01:00
9031ca5c3f Update French translation
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2022-02-22 00:17:21 +01:00
18d68184a9 Update Albanian translation
Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
2022-02-22 00:17:21 +01:00
3816f92095 Update Russian translation
Co-authored-by: AHOHNMYC <lqwh2h2cwa@protonmail.com>
2022-02-22 00:17:21 +01:00
fd55b08a1d Add albanian to the locales list 2022-02-22 00:17:18 +01:00
d0d8ba0068 Remove useless config inside docker-compose
Follow lint indications :
https://github.com/iv-org/invidious/pull/2910#discussion_r811367959
2022-02-22 00:09:15 +01:00
18197e7e3e Lint description of channel_refresh_time 2022-02-21 11:13:24 +01:00
f75a81c9ee Make configurable time between each RefreshChannelsJob 2022-02-21 10:53:20 +01:00
9979a1b910 Add currentTimestamp in shared url by videojs-share 2022-02-19 17:03:22 +01:00
dbba9d7687 Expose version in /api/v1/stats with statistic disabled 2022-02-18 17:23:16 +01:00
1e3f4ed398 Lint player.js
Follow lint indications :
- https://github.com/iv-org/invidious/pull/2895#discussion_r809461103
- https://github.com/iv-org/invidious/pull/2895#discussion_r809461622
2022-02-17 22:22:04 +01:00
d199b7264e Merge pull request #2907 from iv-org/contact-page
Remove the e-mail section from the README and link to the website
2022-02-16 17:27:34 +00:00
b4c532f062 Remove the e-mail section from the README and link to the website 2022-02-16 17:27:03 +00:00
b24a89f820 Merge pull request #2903 from iv-org/SamantazFox-patch-1
comments: don't error out when video has no comments
2022-02-15 02:24:06 +01:00
7112f35793 comments: don't error out when video has no comments
continuationItems is nil when video has no comments
2022-02-14 21:54:26 +01:00
7048193f00 Move store of modification in Cookie instead of localStorage 2022-02-14 17:22:06 +01:00
17ae2648ed Modify use of module (Only if video settings are default)
Following remark at https://github.com/iv-org/invidious/pull/2895#issuecomment-1037279953
2022-02-14 17:01:10 +01:00
c952754c8c Add videojs-persist plugin 2022-02-14 17:01:10 +01:00
85ba04b715 Merge pull request #2871 from SamantazFox/user-code-cleaning
User code cleaning & fixing
2022-02-14 15:38:05 +01:00
8af202e86b Merge pull request #2892 from matthewmcgarvey/video-playability
Raise error if video not playable, also handle missing related videos
2022-02-14 00:59:07 +01:00
57353fe0c6 Fix Freetube subscriptions import 2022-02-13 22:40:51 +01:00
6c116e34c4 Merge pull request #2894 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-02-13 01:19:39 +01:00
9ff26ea4d4 Update Chinese (Traditional) translation
Co-authored-by: Jeff Huang <s8321414@gmail.com>
2022-02-13 01:14:58 +01:00
2194bd2812 Update Chinese (Simplified) translation
Co-authored-by: Eric <alchemillatruth@purelymail.com>
2022-02-13 01:14:58 +01:00
1e6cd0b18f Update Turkish translation
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
2022-02-13 01:14:57 +01:00
85d178ff8b Update French translation
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2022-02-13 01:14:57 +01:00
e0d09c3cda Update Albanian translation
Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-02-13 01:14:57 +01:00
47f529dc09 Update Russian translation
Co-authored-by: AHOHNMYC <lqwh2h2cwa@protonmail.com>
2022-02-13 01:14:57 +01:00
dde850a2e9 Update Arabic translation
Co-authored-by: Mohammed Anas <triallax@tutanota.com>
2022-02-13 01:14:57 +01:00
34e1a465be Update Norwegian Bokmål translation
Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
2022-02-13 01:14:56 +01:00
7d756209b1 Update Spanish translation
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
2022-02-13 01:14:56 +01:00
60e870b277 Fix OPML import 2022-02-12 17:32:20 +01:00
bf054dfda5 Do not check for pending migrations on app start
This is so that we don't break deploys with this PR.
Instead we only ship the 'invidious --migrate' cli command
and let people test that. Maybe even ship a new migration that wouldn't break
apps that don't run the migrations. Then we roll out the functionality
that requires migrations.
2022-02-12 09:20:43 -06:00
59654289cb Run migrations through CLI instead of when app starts 2022-02-11 22:43:16 -06:00
cf13c11236 Migrations tweaks 2022-02-11 22:29:19 -06:00
ddf1e84f7c Raise exception if playability not ok, also handle missing related videos 2022-02-10 23:43:14 -06:00
ec183e3c9a Merge pull request #2891 from SamantazFox/check-host-param
video_playback: Check "host" parameter validity
2022-02-11 05:16:47 +01:00
01135db80a video_playback: Check "host" parameter validity 2022-02-11 02:04:05 +01:00
955e3de56d Merge pull request #2890 from iv-org/SamantazFox-patch-1
DB: fix inverted arguments in User.update_password()
2022-02-10 22:44:40 +01:00
cdd473e195 DB: fix inverted arguments in User.update_password()
Closes https://github.com/iv-org/invidious/issues/2875
2022-02-10 19:52:45 +01:00
34fe7f04fa Merge pull request #2888 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-02-10 19:32:38 +01:00
55c280af5d Update Indonesian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: ʏᴜᴜ <vcyzteen@protonmail.com>
2022-02-10 18:39:03 +01:00
ea5a4f6d6e Update Portuguese translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: SC <lalocas@protonmail.com>
2022-02-10 18:39:03 +01:00
d169f91d64 Update Croatian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Milo Ivir <mail@milotype.de>
2022-02-10 18:39:03 +01:00
8b29895ef3 Update French translation
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2022-02-10 18:39:03 +01:00
3cfc5c164d Update Arabic translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Mohammed Anas <6daf084a-8eaf-40fb-86c7-8500077c3b69@anonaddy.me>
2022-02-10 18:39:03 +01:00
4e55d9937c Update Chinese (Traditional) translation
Co-authored-by: Jeff Huang <s8321414@gmail.com>
2022-02-10 18:39:02 +01:00
03fe8d1716 Update Chinese (Simplified) translation
Co-authored-by: Eric <alchemillatruth@purelymail.com>
2022-02-10 18:39:02 +01:00
d6d7d209c1 Update Turkish translation
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
2022-02-10 18:39:02 +01:00
fa044a2971 Update Hungarian translation
Co-authored-by: István Nyitrai <sianis@gmail.com>
2022-02-10 18:39:02 +01:00
72fce387db Update Spanish translation
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
2022-02-10 18:39:02 +01:00
da10cdd5ab Merge pull request #2872 from SamantazFox/misaligned-captions
Use a regex to fix badly aligned captions
2022-02-10 18:38:59 +01:00
83de3a51ea Merge pull request #2885 from matthewmcgarvey/data-control
Update wording on data control page for clarity
2022-02-10 18:38:15 +01:00
8faf8b8e57 Update en-US translations instead of translation keys for data control 2022-02-10 11:29:00 -06:00
5a349ae88b Update wording on data control page for clarity 2022-02-09 23:38:24 -06:00
8ec992a8a3 Add custom migration implementation 2022-02-09 00:50:32 -06:00
e2fc64296d Merge pull request #2874 from SamantazFox/small-fixes
Small fixes
2022-02-09 01:42:11 +01:00
ec55b905cb Fix empty error page on BrokenTubeException 2022-02-09 01:36:17 +01:00
492d1144e0 Apply changes from code review 2022-02-08 03:05:49 +01:00
4f4b19a962 embed page: fix typo in videojs-overlay script URL 2022-02-08 02:41:08 +01:00
febd785428 Add missing subtitle languages 2022-02-08 02:13:14 +01:00
8642c66710 Mention that VR videos option require WebGL 2022-02-08 01:54:09 +01:00
76cc8ac66b HTML escape error message 2022-02-08 01:48:44 +01:00
53d349a648 Inline a few JS functions
Helps sending less bytes to the client.
2022-02-08 01:37:57 +01:00
b344e1aadb handlers.js: fix TypeError on document.activeElement.type 2022-02-08 01:26:51 +01:00
3c882cff6e player shortcuts: ignore numpad 2022-02-08 01:26:51 +01:00
f73aef33f0 Add compile option to disable fetching of player dependencies 2022-02-07 22:45:08 +01:00
d12dff9dcf Use a regex to fix badly aligned captions 2022-02-07 22:18:24 +01:00
99d770be64 Move user pages (ECR files) to subfolder 2022-02-07 17:39:15 +01:00
71a8867a4a Move user cookies to their own module 2022-02-07 17:39:15 +01:00
2bbd424fce Move import logic to its own module 2022-02-07 17:38:50 +01:00
ef8dc7272b Put CSV import function under its own module 2022-02-07 17:15:22 +01:00
ad4a06fca5 Move user captcha code to its own module 2022-02-07 17:15:22 +01:00
c04f45d5e3 Move user struct to own file, under Invidious namespace 2022-02-07 17:15:22 +01:00
fb36155022 Move user routes definitions to a macro in routing.cr 2022-02-07 17:15:21 +01:00
7ace3fc989 Move remaining user-related routes out of main file 2022-02-07 17:15:21 +01:00
170e754998 Merge pull request #2868 from SamantazFox/related-channels-items-fix
Related channel may contain a continuation entry
2022-02-07 16:54:44 +01:00
6a75fa08dc Merge pull request #2492 from mastihios/patch-input-html-escape
Change <input value="..."> encoding to HTML.escape
2022-02-07 16:53:43 +01:00
1c5db46a4d Merge pull request #2870 from rex4539/typos
Fix typos
2022-02-07 16:53:28 +01:00
7e4690e43c Fix typos 2022-02-07 14:57:14 +02:00
f8b29674b2 Gave them marks some space and added nil checks 2022-02-07 02:25:34 +01:00
fe55141a7b Crystal format 2022-02-07 02:04:50 +01:00
9205ccc124 Removed dummy values and added checks for items.ecr 2022-02-07 02:00:43 +01:00
698a6f3886 API: handle related channels parsing exceptions 2022-02-07 00:52:18 +01:00
1668e4187e Related channel may contain a continuation entry 2022-02-07 00:37:47 +01:00
00df3e2c40 Refactored code and added badges to Search but many dummies because of the way components/item works 2022-02-04 19:59:07 +01:00
a2578ac6b4 Added Verified Badge to related videos 2022-02-04 17:55:22 +01:00
1fee636afa Added verification badge to video player and error with related_videos 2022-02-03 23:18:50 +01:00
154bca4635 Added Verification Badge to Youtube Comments 2022-02-03 22:32:00 +01:00
c584e31657 Inlined the if statement 2022-02-03 22:14:00 +01:00
66340281e6 Added verification badge for channel view 2022-02-03 21:42:28 +01:00
df599c0fc3 Merge pull request #2855 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-02-03 21:27:21 +01:00
e98aeaf293 Update Arabic translation
Co-authored-by: Mohammed Anas <6daf084a-8eaf-40fb-86c7-8500077c3b69@anonaddy.me>
2022-02-03 19:23:37 +01:00
5026698ebf Update Norwegian Bokmål translation
Co-authored-by: Petter Reinholdtsen <pere-weblate@hungry.com>
2022-02-03 19:23:37 +01:00
bd221b7b2c Merge pull request #2856 from SamantazFox/fix-related-videos
Fix related videos
2022-02-03 19:23:32 +01:00
ba37259258 Also propagate changes to watch ECR page 2022-02-03 04:24:31 +01:00
eca8d2e7d7 Apply suggestions from code review
Co-authored-by: Matthew McGarvey <matthewmcgarvey14@gmail.com>
2022-02-03 03:55:43 +01:00
cb0f7bf6b0 Change <input value="..."> encoding to HTML.escape 2022-02-03 01:47:18 +01:00
1ec15dc073 Propagate related videos changes to API function 2022-02-03 01:44:11 +01:00
f124e8cf93 Fix parsing of related videos 2022-02-03 01:37:30 +01:00
9621175dc9 extractors: Add helper for short view count text 2022-02-03 01:37:30 +01:00
e6ddd6d6c1 make HelperExtractors non-private 2022-02-03 01:37:30 +01:00
d7ebd763f5 video parsing: add secondary_results root element 2022-02-03 01:37:30 +01:00
99091e919c video parsing: raise if major root element is missing 2022-02-03 01:37:30 +01:00
6ddbccbc95 Add new exception for parsing issues 2022-02-03 01:37:23 +01:00
0ca333715b Merge pull request #2851 from SamantazFox/add-clip-support
Add support for clips
2022-02-02 00:44:59 +01:00
4e44a91d08 Add support for clips 2022-02-02 00:41:02 +01:00
fc5f84a0cd Merge pull request #2827 from SamantazFox/more-code-cleanup
More code cleanup
2022-02-02 00:36:19 +01:00
2289f98c1e Merge pull request #2846 from iv-org/SamantazFox-fix-search-focus-js
Ignore "/" key handling if search box is focused
2022-01-30 23:53:34 +01:00
49edf0ee33 Merge pull request #2849 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-01-30 23:48:03 +01:00
8532727d54 Update Greek translation
Co-authored-by: THANOS SIOURDAKIS <siourdakisthanos@gmail.com>
2022-01-30 23:45:29 +01:00
336653b02c Update Finnish translation
Co-authored-by: Markus Mikkonen <markus.mikkonen@outlook.com>
2022-01-30 23:45:29 +01:00
d546f1870e Merge pull request #2845 from SamantazFox/more-db-improvements
More db improvements
2022-01-30 23:34:48 +01:00
15c66e2b01 Ignore "/" key handling if search box is focused
Fixes a side effect of https://github.com/iv-org/invidious/pull/2814
See: https://github.com/iv-org/invidious/issues/2791#issuecomment-1018264144
2022-01-30 23:27:42 +01:00
be92bfd4af Merge pull request #2847 from iv-org/hls-to-vhs
rename hls to vhs in the player
2022-01-30 23:22:19 +01:00
f5cb7ba96c Merge pull request #2833 from matthewmcgarvey/get-channel-cleanup
Channel helpers cleanup
2022-01-30 23:16:15 +01:00
f013a6b1d7 rename hls to vhs in the player
hls method is deprecated: https://github.com/videojs/http-streaming#how-to-use
2022-01-30 15:22:31 +00:00
519c227c4f Use short syntax for 'File.open' block 2022-01-29 13:43:26 +01:00
6f4665588f search.cr: use do/end rather than inline {} block 2022-01-28 15:54:38 +01:00
eba311baa9 Merge pull request #2397 from syeopite/dep-manager-for-videojs-stuff
Add dependency manager script for videojs stuff
2022-01-28 15:30:13 +01:00
e92b3779ad Add back in refreshing of channels every 2 days 2022-01-27 20:12:45 -06:00
a82d21ff78 Cleanup channel helpers code 2022-01-27 20:12:42 -06:00
63e1165936 videos.cr: use '.dig?()' where possible 2022-01-28 02:22:48 +01:00
84cc732281 search functions: Don't return result count
This is useless, as the items count can be directly acessed
using the '.size' method, so use that instead when needed.
2022-01-28 02:22:36 +01:00
971b6ec96f Fix 'Lint/UselessAssign' warnings reported by ameba 2022-01-28 02:19:53 +01:00
46f7ca9ffa Remove useless intermediary variable in youtube_api.cr
This fixes an ameba warning
2022-01-28 02:19:53 +01:00
e85bc3e0f6 Remove script for locales propagation
Not required anymore now that weblate takes care of it
2022-01-28 02:19:53 +01:00
dee20f92a7 Avoid infinite loop in ChannelVideo's to_xml/to_json methods 2022-01-28 02:19:53 +01:00
12b818a83c Fix more 'Lint/ShadowingOuterLocalVar' warnings reported by ameba 2022-01-28 02:19:53 +01:00
1c91110464 Fix some 'Lint/ShadowingOuterLocalVar' warnings reported by ameba 2022-01-28 02:19:53 +01:00
4cd7a3e83f Remove useless 'locale = env.get...' from many routes 2022-01-28 02:19:53 +01:00
fa99c9aa85 Use '.dig?()' in playlist parsing 2022-01-28 02:19:53 +01:00
2d949834e9 Make 'additional_fields' optional in JSON error template functions
This allows us to de-duplicate functions
2022-01-28 02:19:53 +01:00
c7b74aa8b4 Remove useless 'locale' argument from error template functions 2022-01-28 02:19:53 +01:00
5e3c9cf290 Remove useless arguments from playlist-related functions 2022-01-28 02:19:53 +01:00
508f137b30 Merge pull request #2666 from matthewmcgarvey/extract-stuff-1
Move more routes to new pattern
2022-01-28 02:12:35 +01:00
67dd2b419a db: use prepared statements rather than crafted argument list 2022-01-26 17:31:01 +01:00
0749baae4b Makefile: Fix 'STATIC' in help message
Fix description (typo) and default value
2022-01-26 13:24:40 +01:00
df9f897ebe Fix code broken when extracting data control route 2022-01-25 19:28:16 -06:00
8ef1e81294 Make certain routes ignored if api only 2022-01-25 19:10:18 -06:00
d755d05f88 Move more routes to new pattern 2022-01-25 19:10:18 -06:00
ce4a52325b db: use now() function instead of passing Time.utc 2022-01-26 01:49:29 +01:00
714a001332 DB: playlists: make that 'insert' never raises 2022-01-25 23:53:00 +01:00
c78f84d5c6 DB: Move integrity check to the base.cr file 2022-01-25 23:53:00 +01:00
a6c9b263da DB: don't pass PG_DB to check_table/check_enum 2022-01-25 23:53:00 +01:00
5ad2fc64b4 DB: Move a forgotten 'UPDATE channels' statement 2022-01-25 23:42:36 +01:00
2ae074a9a4 Merge pull request #2821 from matthewmcgarvey/channel-search
Handle invalid channel id in channel: search
2022-01-25 19:34:43 +01:00
c5967ad572 will -> should
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2022-01-25 11:35:19 -06:00
5ece07a807 Merge pull request #2841 from iv-org/SamantazFox-remove-note-quic
config: remove note about QUIC disabled at Google
2022-01-25 14:24:36 +01:00
e00f9a869d config: remove note about QUIC disabled at Google
The situation is back to normal.
2022-01-25 13:53:46 +01:00
662cf2f633 Merge pull request #2826 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-01-25 01:43:14 +01:00
16f1a23c54 Update Portuguese (Brazil) translation
Update Portuguese (Brazil) translation

Co-authored-by: André Marcelo Alvarenga <andrealvarenga@gmx.net>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kamuri Amorim <myk.gata14@gmail.com>
2022-01-25 01:15:12 +01:00
fb364b532c Update Croatian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Milo Ivir <mail@milotype.de>
2022-01-25 01:15:12 +01:00
2bebf578c7 Update French translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2022-01-25 01:15:12 +01:00
a5b9c83256 Update Japanese translation
Co-authored-by: GnuPGを使うべきだ <dieeeazpnnqbpddh@cock.email>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-01-25 01:15:12 +01:00
dc0e242a63 Update Polish translation
Co-authored-by: skajmer <skajmer@protonmail.com>
2022-01-25 01:15:12 +01:00
178e317d11 Update Chinese (Traditional) translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
2022-01-25 01:15:12 +01:00
3aa740d877 Update Chinese (Simplified) translation
Co-authored-by: Eric <alchemillatruth@purelymail.com>
2022-01-25 01:15:12 +01:00
951d7d8339 Update Turkish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
2022-01-25 01:15:12 +01:00
b5bd1f507e Update Hungarian translation
Co-authored-by: f3rr31 <5920873@disroot.org>
2022-01-25 01:15:12 +01:00
7b9368ae75 Update Spanish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
2022-01-25 01:15:12 +01:00
b2c3d9fb0a Merge pull request #2828 from SamantazFox/add-ameba-shard
Add Ameba static code analysis tool to dev shards
2022-01-25 01:15:06 +01:00
6bd48ca645 Merge pull request #2832 from tonyfinn/patch-1
Specify the public schema for playlist videos migration
2022-01-24 14:18:08 +01:00
cdc007c83c Specify the public schema for public videos
Unlike the other migrations, this one uses a bare table name to specify the table. This means it looks in the default search path. Unfortunately, the out of box search path is:

1. Schema with the same name as the user
2. Public

Because of this, if a schema exists with the same name as the DB user, the playlist_videos table will get created in _that_ schema, rather than the public schema, and then the grant statement will fail with an error like below if check_table is enabled as it keeps trying to create the table but failing on the grant statement:

```
2022-01-22 02:27:42 UTC [info] check_table: check_table: CREATE TABLE playlist_videos
Unhandled exception: relation "public.playlist_videos" does not exist (PQ::PQError)
  from /usr/share/crystal/src/primitives.cr:266:3 in 'handle_error'
  from lib/pg/src/pq/connection.cr:184:9 in 'handle_async_frames'
  from lib/pg/src/pq/connection.cr:162:7 in 'read'
  from lib/pg/src/pq/query.cr:53:14 in 'exec_all'
  from lib/db/src/db/database.cr:126:9 in '__crystal_main'
  from /usr/share/crystal/src/crystal/main.cr:110:5 in 'main'
  from src/env/__libc_start_main.c:94:2 in 'libc_start_main_stage2'
2022-01-22 02:27:43 UTC [info] check_table: check_table: CREATE TABLE playlist_videos
Unhandled exception: relation "public.playlist_videos" does not exist (PQ::PQError)
  from /usr/share/crystal/src/primitives.cr:266:3 in 'handle_error'
  from lib/pg/src/pq/connection.cr:184:9 in 'handle_async_frames'
  from lib/pg/src/pq/connection.cr:162:7 in 'read'
  from lib/pg/src/pq/query.cr:53:14 in 'exec_all'
  from lib/db/src/db/database.cr:126:9 in '__crystal_main'
  from /usr/share/crystal/src/crystal/main.cr:110:5 in 'main'
  from src/env/__libc_start_main.c:94:2 in 'libc_start_main_stage2'
```
2022-01-22 02:32:13 +00:00
7dbbe27cdd Use --production flag for shards installation on docker 2022-01-20 22:33:34 +01:00
b91874355c Add Ameba static code analysis tool to dev shards 2022-01-20 22:25:01 +01:00
8b0ed8b110 Create FUNDING.yml 2022-01-19 20:43:52 +00:00
574e35a720 HTML escape user input 2022-01-19 09:01:13 -06:00
32ae38b933 Merge pull request #2822 from matthewmcgarvey/reddit-comments
Fix loading reddit comments when there are no threads found
2022-01-19 12:53:20 +01:00
56e505164d 404 error with message and provide example 2022-01-18 18:56:26 -06:00
d4f3139b73 Don't catch and provide better error message instead 2022-01-18 18:37:16 -06:00
97dceb3a5a Custom error on channel search, handle in search 2022-01-18 18:37:16 -06:00
212f6d6bf5 Fix channel search json parse to not raise 2022-01-18 18:37:16 -06:00
36904fa72e Merge pull request #2351 from iv-org/add-faq-link
Add FAQ link to readme
2022-01-18 00:46:49 +01:00
8c2495a399 Apply suggestions from review 2022-01-17 21:47:29 +01:00
2d1f6128be Fix typo in "crash_page_read_the_faq"
Co-authored-by: Matthew McGarvey <matthewmcgarvey14@gmail.com>
2022-01-17 21:27:52 +01:00
9233f71549 Use &.methods where possible instead of curly braces 2022-01-17 13:03:36 -06:00
b2a738cf13 Fix loading reddit comments when there are no threads found 2022-01-17 12:11:47 -06:00
34a79c5f1e Don't show "next steps" message with a stack trace
Usually, next steps are after the error message.
Here, we want the same options to be right above the stack trace,
so users are less likely to report duplicates.
2022-01-16 16:15:23 +01:00
fd30f5775a Add precisions to error message regarding locales 2022-01-16 16:15:23 +01:00
a2600acfa9 Improve crash page messages
* Ask to read the FAQ and search for existing issues on Github
* Include links to FAQ and directly to a new github issue
* Github issue title is automatically based on exception name
* Improved HTML
* Minor languages changes
2022-01-16 16:15:23 +01:00
fa2c8f42b3 Issue template: ask to read the FAQ 2022-01-16 16:14:55 +01:00
db4e36ad9b Add FAQ link to readme 2022-01-16 16:14:55 +01:00
38697ade31 Merge pull request #2817 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-01-16 16:13:50 +01:00
2cf3c7eb41 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:46 +01:00
4ea932dc1f Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update Italian translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Renix <kastletxd@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:46 +01:00
7b587d8e00 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:46 +01:00
9612a4d0de Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:46 +01:00
7141a716e7 Update Indonesian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: I. Musthafa <i.musthafa66@gmail.com>
2022-01-16 15:24:46 +01:00
0d33566bbc Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:46 +01:00
2d341c53f2 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:45 +01:00
b20443241d Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:45 +01:00
fb28431cdc Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:45 +01:00
2602df8ef7 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:45 +01:00
9e7ff8f8f5 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:45 +01:00
5b5473e794 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:45 +01:00
73c000fd44 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:44 +01:00
ef51661f5d Update French translation
Update French translation

Co-authored-by: Bundy01 <bundy@posteo.eu>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2022-01-16 15:24:44 +01:00
6bb9e8442a Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:44 +01:00
9b1721f8ad Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:44 +01:00
15532fdb11 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:44 +01:00
39e0b3f6c5 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:44 +01:00
329bf7895e Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:44 +01:00
61feb5a851 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:43 +01:00
da06560fa9 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:43 +01:00
fd120ab275 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:43 +01:00
14a57fd229 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:43 +01:00
0be2ab582d Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:43 +01:00
d00037d1d4 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:43 +01:00
e10827bf1c Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:42 +01:00
98a5a7cb4f Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:42 +01:00
748282cff3 Update Norwegian Bokmål translation
Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update Norwegian Bokmål translation

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Petter Reinholdtsen <pere-weblate@hungry.com>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:42 +01:00
f3df1e8d3c Update English (United States) translation
Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-01-16 15:24:42 +01:00
a93058d385 Update Chinese (Traditional) translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
2022-01-16 15:24:42 +01:00
89135a9cf5 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update Turkish translation

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:42 +01:00
47a02e3423 Update Hungarian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: f3rr31 <5920873@disroot.org>
2022-01-16 15:24:42 +01:00
c9fd8167f5 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:41 +01:00
c9b9ded518 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update Spanish translation

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update Spanish translation

Co-authored-by: Hin Weisner <translatu.godwit@aleeas.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2022-01-16 15:24:41 +01:00
250a9191cb Merge pull request #2814 from SamantazFox/fix-search-autofocus
Fix search autofocus
2022-01-16 15:24:27 +01:00
6fab5d0554 Merge pull request #2545 from bbielsa/csv-subscriptions-import
Add CSV Subscriptions Import
2022-01-16 15:11:37 +01:00
461fae4f77 Use contain_exactly() in spec 2022-01-15 12:52:19 +01:00
8aed1e11c3 Add JS to focus search box on '/' 2022-01-13 22:48:31 +01:00
6cf6c56dd1 Autofocus search bar only on search homepage 2022-01-13 22:19:19 +01:00
042ff8da64 Merge pull request #2813 from iv-org/SamantazFox-fix-comments
Fix youtube comments
2022-01-13 20:46:43 +01:00
8b72481b8c Fix comments
"ReplyCount" is actually an Int, not a String.
2022-01-13 20:43:46 +01:00
aa0724f204 Merge pull request #2646 from SamantazFox/support-plurals-in-locales
Better support of plurals in locales
2022-01-13 12:55:55 +01:00
eff8b23f57 Improve youtube import type detection
Code courtesy of bbielsa:
https://gist.github.com/bbielsa/7d131aa2188945f591a8379ec0defc9b
2022-01-12 18:13:15 +01:00
81a2300af8 Prevent import of insanely large files 2022-01-12 01:28:58 +01:00
2a541cb4d5 Add tests 2022-01-12 01:20:45 +01:00
0120f44fd6 i18n: use spectator for i18next plurals spec 2022-01-12 00:49:36 +01:00
b65dced646 Merge pull request #2789 from iv-org/TheFrenchGhosty-email
Add e-mail contact to the README
2022-01-11 01:57:11 +01:00
e7394fe7a1 Merge pull request #2778 from iv-org/unixfox-postgres-improvement
Create videos caching table as UNLOGGED
2022-01-11 01:52:48 +01:00
fb673639f9 Merge pull request #2787 from matthewmcgarvey/related-channels
Update to fetch related channels again
2022-01-11 01:50:48 +01:00
dc62b6ffdb Can fetch related channels using just the channel ucid] 2022-01-10 17:07:52 -06:00
1f2ccac8a0 i18n: Reformat hu-HU.json 2022-01-10 23:01:58 +01:00
46e4d35ccd Rewording 2022-01-10 21:50:50 +00:00
eb7e79fdf7 i18n: Apply code review suggestions + code cleaning 2022-01-10 22:49:07 +01:00
37c953e633 i18n: Use plurals for tokens/replies/unseen notifications 2022-01-10 22:49:07 +01:00
5bb2cb7d71 i18n: Use plurals for video/view/subscriber/subscription counts 2022-01-10 22:49:07 +01:00
692f4e5be2 i18n: Use plurals for year/month/day/etc... 2022-01-10 22:49:07 +01:00
7bb1471207 i18n: Add dedicated function for counts translation 2022-01-10 22:49:07 +01:00
4752e16ad2 i18n: make multiple fixes to i18next plurals 2022-01-10 22:49:07 +01:00
2a156e7313 i18n: Add plural tests (spec) 2022-01-10 22:49:03 +01:00
0314dd44ea Typo 2022-01-10 21:39:33 +00:00
b80a3d5401 Fix the anchor 2022-01-10 21:38:24 +00:00
8c4ef9f955 Apply suggestions 2022-01-10 21:37:44 +00:00
67d2635e41 i18n: Add i18next plural rules and selector 2022-01-10 22:26:45 +01:00
71a1ad307c i18n: Add i18next plural resolver class 2022-01-10 22:26:45 +01:00
9a48fd81a3 i18n: Add i18next plurals base sets 2022-01-10 22:26:45 +01:00
d928b9eaad switch to alpine 3.15 for using crystal 1.2.2 2022-01-09 22:27:22 +01:00
790b7afcca Fix indefinitely growing database 2022-01-09 22:04:10 +01:00
7b9f5d74dc Create videos caching table as UNLOGGED 2022-01-09 16:58:29 +00:00
6eadba784d Typo 2022-01-08 20:01:00 +00:00
3a39045617 Add e-mail contact to the README 2022-01-08 19:52:05 +00:00
67cb8b7107 Merge translations from 'weblate/master'
Conflicts resolutions
2022-01-08 20:10:26 +01:00
4962c00ba8 Update to fetch related channels again 2022-01-08 12:31:16 -06:00
6764185543 Add explicit return keyword 2022-01-08 18:07:07 +01:00
0a66a68db8 Move require statement to the correct file 2022-01-08 18:07:07 +01:00
8d47ec714e Add text/xml as a possible mime type for xml file uploads 2022-01-08 18:07:07 +01:00
9607fe03af Detect the type of subscription import format based on the content type of the file uploaded 2022-01-08 18:07:06 +01:00
62057e676a Move parse_subscription_export_csv function to user/imports.cr 2022-01-08 18:07:06 +01:00
43ff3be751 Test if body content is likely JSON, if so parse the json format of subscriptions export. If the content is anything else, assume it is CSV and parse 2022-01-08 18:07:06 +01:00
7cbd79fee5 Add helper function parse_subscription_export_csv() which parses the csv format returned by the subscription exporter 2022-01-08 18:07:06 +01:00
3fba342ed2 Merge pull request #2769 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-01-08 18:03:07 +01:00
2419c4d8ae Update Italian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: coronabond <coronabond@airmail.cc>
2022-01-08 16:22:25 +01:00
e37fb09d41 Update Portuguese translation
Co-authored-by: Gil <hello@giloliveira.net>
2022-01-08 16:22:25 +01:00
86b1357a68 Update Hungarian translation
Update Hungarian translation

Update Hungarian translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: f3rr31 <5920873@disroot.org>
2022-01-08 16:22:25 +01:00
b782ab5787 Merge pull request #2762 from matthewmcgarvey/spectactor
Switch to using Spectator for specs
2022-01-08 16:22:10 +01:00
6c0486646f Add spectator and switch to Spectator DSL 2022-01-07 09:27:50 -06:00
dffe8fc49e Move helpers_spec.rb into invidious directory 2022-01-07 09:26:13 -06:00
1336ecbef2 Update Italian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: coronabond <coronabond@airmail.cc>
2022-01-07 15:09:10 +01:00
d00e430f50 Update Hungarian translation
Update Hungarian translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: f3rr31 <5920873@disroot.org>
2022-01-07 15:09:10 +01:00
5a728243a2 Merge pull request #2767 from SamantazFox/fix-subscriptions-not-cleared
Fix subscription not being cleared
2022-01-06 14:17:33 +01:00
37f38dbf6c Merge pull request #2771 from matthewmcgarvey/delete-playlists
Fix playlist deletion
2022-01-06 14:17:10 +01:00
2eb7c5c037 PR feedback 2022-01-05 20:15:42 -06:00
ba0bc72d0b delete_by_playlist_id -> delete_by_playlist 2022-01-05 19:03:32 -06:00
e1219cbdef Fix playlist deletion 2022-01-05 18:24:04 -06:00
bf0a48847c DB: fix subscription not being cleared
Fixes https://github.com/iv-org/invidious/issues/2764
2022-01-05 19:58:24 +01:00
3bb7fbb2f1 Merge pull request #2719 from SamantazFox/batch-minor-fixes
Multiple minor fixes
2022-01-05 17:20:57 +01:00
326a362eb8 Merge pull request #2685 from SamantazFox/database-improvments
Database improvements
2022-01-05 09:40:39 +00:00
fdc380e7f7 Merge pull request #2677 from SamantazFox/decompression-fix-2
Temporarily fix for #2612 (round 2)
2022-01-05 09:38:53 +00:00
db04f1556e Remove spec for playlist continuation 2022-01-05 03:42:41 +01:00
444b1c99d0 Show unavailable videos in playlists 2022-01-05 03:32:54 +01:00
3b1a286290 Use dig?() for playlist title 2022-01-05 03:32:54 +01:00
6c8a5a1e7f Fix leading spaces being collapsed in descriptions
Fixes #1954
2022-01-05 03:32:54 +01:00
1769b0fdce Fix "video can't be added to playlist without JS"
Fixes #2686
2022-01-05 03:32:54 +01:00
68cbc11810 Fix the search box
Fix #277 : autoselect search field
Fix #1107: no spell checking/auto-correct on search field
2022-01-05 03:32:44 +01:00
edcc155482 Merge pull request #2744 from tirz/feature-fix_null_ptr_for_localStorage
fix: null ptr while retaining video time
2022-01-05 03:23:22 +01:00
8231216371 Merge pull request #2750 from 11Tuvork28/patch-2
Removes annoying video switching | Fixes #2736
2022-01-04 18:42:59 +01:00
e1215584b4 Merge pull request #2746 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2022-01-04 18:38:39 +01:00
a905175e8c Update Danish translation
Co-authored-by: Grooty12 <Rasmus@rosendahl-kaa.name>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-01-04 17:53:45 +01:00
e98ed41656 Update Indonesian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: I. Musthafa <i.musthafa66@gmail.com>
2022-01-04 17:53:45 +01:00
fd139841f4 Update Persian translation
Update Persian translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Matin <MatiinBaloochestani@gmail.com>
Co-authored-by: Seyed mohammad ali Hosseinifard <ali_hosseine@yahoo.com>
2022-01-04 17:53:45 +01:00
dac0f42777 Update Dutch translation
Co-authored-by: Gert-dev <qnyasgjhapqyuhoibr@kiabws.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-01-04 17:53:45 +01:00
f0788162a4 Add Albanian translation
Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
2022-01-04 17:53:45 +01:00
c963e50cde Update Croatian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Milo Ivir <mail@milotype.de>
2022-01-04 17:53:45 +01:00
b4a4767fb3 Update French translation
Co-authored-by: Bundy01 <bundy@posteo.eu>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2022-01-04 17:53:45 +01:00
d6918b2976 Update German translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: ThetaDev <t.testboy@gmail.com>
2022-01-04 17:53:45 +01:00
47e273c402 Update Arabic translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Rex_sa <rex.sa@pm.me>
2022-01-04 17:53:45 +01:00
ba25e8e720 Update Chinese (Traditional) translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
2022-01-04 17:53:45 +01:00
058ae5cc29 Update Turkish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
2022-01-04 17:53:45 +01:00
f8be5d2559 Update Hungarian translation
Update Hungarian translation

Update Hungarian translation

Update Hungarian translation

Co-authored-by: Benedek Nagy <benedek@bndk.club>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: f3rr31 <5920873@disroot.org>
2022-01-04 17:53:44 +01:00
792d25594c Update Spanish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
2022-01-04 17:53:44 +01:00
9f9020e422 Double quote variable to prevent sh error (#2754) 2022-01-04 17:53:40 +01:00
302fecbdcb Clean useless database arguments (5/5) 2022-01-04 17:15:43 +01:00
d74873fed1 Clean useless database arguments (4/5) 2022-01-04 17:15:43 +01:00
40ed4a0506 Clean useless database arguments (3/5) 2022-01-04 17:15:43 +01:00
c25d664edc Clean useless database arguments (2/5) 2022-01-04 17:15:43 +01:00
9bad7e2940 Clean useless database arguments (1/5) 2022-01-04 17:15:43 +01:00
6704ce3214 Move DB utility functions to the proper module 2022-01-04 17:15:43 +01:00
914cfbd953 Move DB queries related to 'annotations' in a separate module 2022-01-04 17:15:43 +01:00
85cf27119c Move DB queries related to playlists in a separate module (3/3) 2022-01-04 17:15:43 +01:00
7691f53520 Move DB queries related to 'users' in a separate module (2/2) 2022-01-04 17:15:43 +01:00
094f835642 Move DB queries related to 'users' in a separate module (1/2) 2022-01-04 17:13:52 +01:00
92eea3b18b Move DB queries related to session tokens in a separate module 2022-01-04 17:13:52 +01:00
c021b93b5c Move DB queries related to channels in a separate module 2022-01-04 17:13:52 +01:00
d94d4c2045 Move DB queries related to statistics in a separate module 2022-01-04 17:13:52 +01:00
46d08237c6 Move DB queries related to playlists in a separate module (2/3) 2022-01-04 17:13:52 +01:00
3deafe9f8d Move DB queries related to playlists in a separate module (1/3) 2022-01-04 17:13:51 +01:00
998edba6f0 Move DB queries related to 'videos' in a separate module 2022-01-04 17:13:51 +01:00
4f219362fe Also fix DISABLE_QUIC declaration 2022-01-04 01:47:41 +01:00
c427444946 Flag to disable QUIC should be 'disable_quic' 2022-01-04 01:46:07 +01:00
d59323a601 Add check to avoid saving player pos to the
length of the given video by saving a minimum of 15 at the end
2021-12-31 03:24:08 +01:00
a779cdd463 Merge pull request #2727 from SamantazFox/add-shorts-support
Add support for shorts
2021-12-28 22:13:36 +01:00
73a142fd9b fix: null ptr while loading/switching theme 2021-12-26 13:53:32 +01:00
0453d08eed fix: null ptr while retaining time 2021-12-26 13:45:27 +01:00
a18068aedf Merge pull request #2734 from iv-org/TheFrenchGhosty-patch-1
Add the Invidious's Mastodon account to the README
2021-12-22 00:03:53 +00:00
12fba3bb7a Add the Invidious's Mastodon account to the README 2021-12-22 01:03:09 +01:00
fc2b9031d4 i18n: Add Serbian back 2021-12-22 00:52:08 +01:00
28a6589a1e Merge pull request #2538 from bbielsa/player-remember-position
Retain video time position in video player
2021-12-21 22:05:43 +01:00
cf9c790499 Merge pull request #2730 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2021-12-21 22:02:20 +01:00
3d6dceae10 Update Indonesian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: I. Musthafa <i.musthafa66@gmail.com>
2021-12-21 20:02:23 +01:00
130a14d0d9 Update Chinese (Traditional) translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
2021-12-21 20:02:23 +01:00
f07b4f8fc4 Update Turkish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
2021-12-21 20:02:23 +01:00
75f655aafc Update French translation
Update French translation

Co-authored-by: Bundy01 <bundy@posteo.eu>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2021-12-21 20:02:23 +01:00
a3fd9ccea7 Update Arabic translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Rex_sa <rex.sa@pm.me>
2021-12-21 20:02:22 +01:00
4136ac633a Update Japanese translation
Co-authored-by: GnuPGを使うべきだ <dieeeazpnnqbpddh@cock.email>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2021-12-21 20:02:22 +01:00
2724456882 Update Norwegian Bokmål translation
Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2021-12-21 20:02:22 +01:00
b396a2cbfd Update Spanish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
2021-12-21 20:02:22 +01:00
ddb06b0cac Fix XSS vulnerability in channel playlists
The channel/<ucid>/playlists page was vulnerable to Cross Site Scripting
(XSS), because the different URL parameters were inserted as-is in the URL
meant for instance switching.

This vulnerability could allow an attacker to inject malicious Javascript
in the page by tricking the user to click on a crafted link.

Bug introduced in commit 66e7285108
("Only use /redirect when automatically redirecting").

Thanks to Jack (@testa:cthd.icu on Matrix, @cysea on github) for responsibly
reporting this issue!
2021-12-19 20:51:44 +01:00
f54e247eb4 Extractors: Add support for shorts
Fixes #2708
2021-12-17 16:47:41 +01:00
2ac19eb8fc Merge pull request #2725 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2021-12-17 15:02:59 +01:00
6cdaafdc37 Update Norwegian Bokmål translation
Co-authored-by: Petter Reinholdtsen <pere-weblate@hungry.com>
2021-12-16 06:25:54 +01:00
ed6476b5ea Allow the t parameter to override the stored video playback position 2021-12-15 19:38:58 +01:00
b90bceb2dc Fix formatting of preferences.cr and videos.cr 2021-12-15 19:38:58 +01:00
f31bd5ffb9 Use localization for save player position label in the preferences page 2021-12-15 19:38:56 +01:00
5abe7fe123 Rename 'remember_position' to 'save_player_pos' for clarity 2021-12-15 19:37:55 +01:00
b6792cf02e Added default value for get_video_time() which was causing a bug in safari 2021-12-15 19:37:55 +01:00
1261323c66 Remove console.log debugging 2021-12-15 19:37:55 +01:00
2a45b4eba0 Save and load the position for the video using a local storage object, the object is a dictionary, where the key is the video ID, and the value is the time at which the user last left off watching the video. If the user deselected the 'remember video position' checkbox in the preferences this dictionary is cleared 2021-12-15 19:37:55 +01:00
a6a0bbf398 Add remember_position field to the Preferences and VideoPreferences structs, and add a checkbox in the preferences page to toggle it 2021-12-15 19:37:55 +01:00
7f3ef12297 Merge pull request #2692 from weblate/weblate-invidious-translations
Invidious translations update
Merged from the command line due to merge conflicts.
2021-12-12 23:50:14 +01:00
da2f592de6 locales: use "DASH" instead of "dash" in en-US 2021-12-12 22:46:12 +01:00
ee91effb7a Merge pull request #2576 from SamantazFox/fix-locales-handling
Fix locales handling
2021-12-12 22:26:22 +01:00
b13f9c25b3 Update Danish translation
Update Danish translation

Update Danish translation

Update Danish translation

Update Danish translation

Update Danish translation

Co-authored-by: Grooty12 <Rasmus@rosendahl-kaa.name>
Co-authored-by: HackerNCoder <hackerncoder@protonmail.ch>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2021-12-10 23:36:14 +01:00
f85563eb66 Update Indonesian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: I. Musthafa <i.musthafa66@gmail.com>
2021-12-10 23:36:14 +01:00
7b689a186d Update Dutch translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Issa1553 <fairfull.playing@gmail.com>
2021-12-10 23:36:14 +01:00
092d7df761 Update Chinese (Traditional) translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
2021-12-10 23:36:14 +01:00
6c444707d7 Update Turkish translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
2021-12-10 23:36:13 +01:00
81c006cc04 Update Chinese (Simplified) translation
Co-authored-by: Eric <spice2wolf@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2021-12-10 23:36:13 +01:00
7cbd1e413f Update Serbian (cyrillic) translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Issa1553 <fairfull.playing@gmail.com>
2021-12-10 23:36:13 +01:00
f34f8ef188 Update Serbian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Issa1553 <fairfull.playing@gmail.com>
2021-12-10 23:36:13 +01:00
c3eb385cd3 Update Croatian translation
Update Croatian translation

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Issa1553 <fairfull.playing@gmail.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
2021-12-10 23:36:13 +01:00
be34f03157 Update French translation
Update French translation

Co-authored-by: Bundy01 <bundy@posteo.eu>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2021-12-10 23:36:13 +01:00
4964785b13 Update German translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Issa1553 <fairfull.playing@gmail.com>
2021-12-10 23:36:12 +01:00
1b7757c14f Update Arabic translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Rex_sa <rex.sa@pm.me>
2021-12-10 23:36:12 +01:00
58c9f20226 Update Norwegian Bokmål translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Petter Reinholdtsen <pere-weblate@hungry.com>
2021-12-10 23:36:12 +01:00
f19be0c3ce Update English (United States) translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
2021-12-10 23:36:12 +01:00
f236a6872b Merge pull request #2659 from SamantazFox/fix-likes-dislikes
Fix likes/dislikes
2021-12-06 03:52:38 +01:00
3e0096f360 Merge pull request #2683 from iv-org/SamantazFox-patch-1
Fix #2682
2021-12-02 15:35:00 +01:00
438b334320 Merge pull request #2671 from matthewmcgarvey/code-removal
Remove dead code
2021-12-01 20:49:23 +01:00
4aa96ecab9 Use 'dig()' in 'find()' statements 2021-12-01 17:32:10 +01:00
e5557b515e Merge pull request #2684 from iv-org/SamantazFox-patch-2
Decode title from download widget
2021-12-01 17:29:04 +01:00
7b9d26d688 Fix #2670
Fixes "Download widget replaces spaces in filename with +"
https://github.com/iv-org/invidious/issues/2670
2021-11-29 23:12:55 +01:00
8d4b4cd14c Remove dead code 2021-11-29 09:11:50 -06:00
342fc202a7 Fix #2682
Fix "Missing param name: "q" (KeyError)"
https://github.com/iv-org/invidious/issues/2682
2021-11-29 14:53:27 +01:00
4436359d07 Use dig to get category contents
Co-authored-by: Matthew McGarvey <matthewmcgarvey14@gmail.com>
2021-11-28 23:44:37 +01:00
91f8395222 Typo: missing '?' when looking for key in dislikes_button
Co-authored-by: Matthew McGarvey <matthewmcgarvey14@gmail.com>
2021-11-28 23:37:27 +01:00
de00e86cd5 Decompress the response body ourselves
Temp fix for #2612
2021-11-28 18:04:12 +01:00
c6e086c6ff Revert "Temporarily fix for #2612" (#2673) 2021-11-28 09:41:16 +01:00
82f3eda82b Merge pull request #2656 from SamantazFox/fix-2549
extract_video_info: Make sure that the Android player response is valid
2021-11-28 02:38:29 +01:00
05f9613e14 Merge pull request #2623 from SamantazFox/temp-decompression-fix
Temporarily fix for #2612
2021-11-28 02:35:39 +01:00
50bb591826 Merge pull request #2658 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2021-11-26 19:38:32 +00:00
2ca23c714d Update Indonesian translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: I. Musthafa <i.musthafa66@gmail.com>
2021-11-26 20:28:07 +01:00
b030d822f1 Update Serbian translation
Co-authored-by: Anon Anonimovic <BGteam@live.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2021-11-26 20:28:07 +01:00
65b5183f01 Update Portuguese (Brazil) translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Vinicius <rodriguessv30@gmail.com>
2021-11-26 20:28:07 +01:00
33431844b7 Update French translation
Co-authored-by: Bundy01 <bundy@posteo.eu>
2021-11-26 20:28:07 +01:00
325a67155d Update Catalan translation
Update Catalan translation

Add Catalan translation

Co-authored-by: Alfonso Montero López <amontero@tinet.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2021-11-26 20:28:07 +01:00
6876f88f43 Merge pull request #2622 from SamantazFox/add-makefile
Add a makefile
2021-11-26 20:28:03 +01:00
ad9d3f4425 Merge pull request #2555 from iv-org/readme-enhancements
Enhance some stuff in the README
2021-11-26 20:24:31 +01:00
5eca7a8a30 Fix indenting
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2021-11-26 19:18:12 +00:00
de153ece4e Move the Awesome-Humane-Tech to its own line 2021-11-26 19:52:36 +01:00
2d8964d37d Apply the suggestions 2021-11-26 19:51:55 +01:00
ceb1feb350 likes/dislikes: better fallback management
'.to_i64?' instead of '.to_i64' returns nil rather than raising
an exception when it's done on an empty string.

In some rare cases, rating can be equal to 5. In this case, the
value of player_response[videoDetails][averageRating] is an
Int and not a Float.
2021-11-25 23:16:50 +01:00
2ea0590b03 i18n: return 'key' if 'key' is not in locales files 2021-11-25 19:46:34 +01:00
80a513baa5 Use new techniques to get (dis)likes back 2021-11-24 01:22:09 +01:00
ba48f68fc3 allow multiple, successive content-encodings 2021-11-21 18:16:05 +01:00
319587e2f1 extract_video_info: make sure that the Android player response is valid 2021-11-21 17:34:17 +01:00
bf7952d9c7 i18n: log a warning instead of rising an exception
This is more user-friendly.
TODO: maybe make a compile time flag for testing purposes
2021-11-21 01:54:54 +01:00
f29ab53aff Add other missing translations
* on watch page and video cards (search results, playlists, etc...)
* on /feed/playlists
* in search filters (not normalized in order to avoid collisions with
an existing PR that reworks the search filters)
2021-11-21 01:54:46 +01:00
b5b0c58de7 Add missing translation for quality selectors 2021-11-21 01:50:11 +01:00
a1bb421eec Remove useless 'hl' parameters on captions URL 2021-11-21 01:50:11 +01:00
139786b9ef i18n: pass only the ISO code string to 'translate()'
Don't use the whole Hash everywhere.
Also fall back nicely to english string if no translation exists.
2021-11-21 01:50:11 +01:00
301444563b i18n: Use language full name instead of ISO code
Fixes #851
2021-11-21 01:50:11 +01:00
9966c21c6b i18n: Add list of language names 2021-11-21 01:50:11 +01:00
12c219ee6c Bump Crystal version for CI and Docker to 1.2.2 2021-11-17 20:12:58 +00:00
008f79df61 Merge pull request #2630 from babababag/patch-1
Escape video description in <meta> elements
2021-11-17 13:22:54 +01:00
fd54cf2d05 Escape video description 2021-11-17 12:04:30 +00:00
e0d26f4055 Merge pull request #2625 from weblate/weblate-invidious-translations
Translations update from Hosted Weblate
2021-11-16 23:32:52 +01:00
6c2170960b Update Indonesian translation
Co-authored-by: I. Musthafa <i.musthafa66@gmail.com>
2021-11-16 23:29:10 +01:00
950deaca40 Update Turkish translation
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
2021-11-16 23:29:10 +01:00
2bd286f195 Update Croatian translation
Co-authored-by: Milo Ivir <mail@milotype.de>
2021-11-16 23:29:10 +01:00
75792bfa7b Update Arabic translation
Co-authored-by: Rex_sa <rex.sa@pm.me>
2021-11-16 23:29:10 +01:00
737c49b689 Update Japanese translation
Co-authored-by: 黒にゃんこ <renraku@076.ne.jp>
2021-11-16 23:29:09 +01:00
2c447a42f2 Make sure to only apply fix if QUIC is disabled 2021-11-16 21:40:35 +01:00
dad8f9a0ce Fix typo
Should be checking the returned headers, not the sent ones.
2021-11-16 20:39:26 +01:00
2eac23a0b3 Temporary fix for #2612
Don't rely on the auto compression/decompression provided by the crystal stdlib.
2021-11-16 13:46:28 +01:00
6a204753c0 Fix typo 2021-11-15 23:36:52 +01:00
19bb26a789 Add a makefile 2021-11-15 23:08:48 +01:00
00904ae3f2 Merge pull request #2444 from syeopite/only-use-redirect-endpoint-when-needed
Only use the /redirect endpoint when automatically redirecting to another instance
2021-11-13 20:40:09 +01:00
d214a0b333 remove duplicate lsquic requirement 2021-11-12 23:02:43 +00:00
4940759627 Example config: Change 'use_quic' default value
Related to commit a120f143d7
Also point towards the Github issue.
2021-11-12 18:53:51 +01:00
be1a390b50 Upgrade crystal on ARM64 docker image 2021-11-12 14:17:07 +01:00
f707f990e6 Merge pull request #2364 from syeopite/disable-quic-via-compile-time-flag
Add compile-time flag to remove code for QUIC
2021-11-12 12:58:39 +00:00
a120f143d7 Disable quic by default
See #2577
2021-11-12 04:03:23 -08:00
65fbdbff6a Remove of gzip header w/ use_quic config
Continuation of b0f127d4d8
2021-11-12 03:52:50 -08:00
6ec4dcfafd Fix handling for maxres thumbnail 2021-11-12 03:47:58 -08:00
48191aca6e Fix copy-paste error 2021-11-12 03:47:57 -08:00
83556bace2 Allow thumbnail queries with QUIC disabled 2021-11-12 03:47:57 -08:00
814c9e6c3a Use https for storyboard image requests 2021-11-12 03:47:57 -08:00
547abe17d9 Use https for ggpht requests 2021-11-12 03:47:57 -08:00
6b8450558d Allow storyboard queries with QUIC disabled 2021-11-12 03:47:57 -08:00
c3747c2d49 Allow ggpht queries with QUIC disabled 2021-11-12 03:47:57 -08:00
245122104a Respect use_quic param and fix typos 2021-11-12 03:47:57 -08:00
b0f127d4d8 Fix gzip decompression with HTTP::Client 2021-11-12 03:47:57 -08:00
d379a36c0e Add compile-time flag to remove code for QUIC 2021-11-12 03:47:50 -08:00
a12571e748 Fix minor error in config.example.yml
Update the "note" for `locale`
2021-11-12 02:32:15 +01:00
21879da80d Added -d parameter for dbname to postgres-container healthcheck (#2571)
Co-authored-by: Sebastian <sbeck@darklxserver>
2021-11-08 21:47:00 +00:00
6cabc96f75 Merge pull request #2471 from SamantazFox/extractor-patch-2
Fix infinite recursion caused by `to_json` methods in different data structures
2021-11-07 21:32:02 +01:00
f4f9e75c27 Translations update from Weblate (#2557)
* Update Spanish translation
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>

* Update Japanese translation
Co-authored-by: The Hatsune Daishi <nao20010128@gmail.com>

* Update Croatian translation
Co-authored-by: Milo Ivir <mail@milotype.de>

* Update Swedish translation
Co-authored-by: Joel A <joeax910@student.liu.se>

* Update Esperanto translation
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>

* Update Chinese (Simplified) translation
Co-authored-by: Hosted Weblate <hosted@weblate.org>

* Update Turkish translation
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>

* Update Chinese (Traditional) translation
Co-authored-by: Jeff Huang <s8321414@gmail.com>

* Update Lithuanian translation
Co-authored-by: g <muziejusinfo@gmail.com>

* Update Portuguese translation
Co-authored-by: SC <lalocas@protonmail.com>

* Update Indonesian translation
Co-authored-by: Neko Nekowazarashi <i.musthafa66@gmail.com>


Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
Co-authored-by: The Hatsune Daishi <nao20010128@gmail.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Joel A <joeax910@student.liu.se>
Co-authored-by: Eric <spice2wolf@gmail.com>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
Co-authored-by: g <muziejusinfo@gmail.com>
Co-authored-by: SC <lalocas@protonmail.com>
Co-authored-by: Neko Nekowazarashi <i.musthafa66@gmail.com>
2021-11-05 02:25:01 +01:00
2f235adadf Enhance some stuff in the README 2021-11-02 18:58:22 +01:00
afb284fa9b Add "preferences_quality_dash_label" to en_US.json
This key never existed before and #2524 just made it obvious.
2021-11-01 15:48:05 +01:00
93252f33ff Translations update from Weblate (#2543)
* Update Spanish translation
* Update Arabic translation
* Update Esperanto translation
* Update Chinese (Simplified) translation
* Update Turkish translation
* Update Chinese (Traditional) translation
* Update Lithuanian translation
* Update Portuguese translation

Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
Co-authored-by: Rex_sa <rex.sa@pm.me>
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
Co-authored-by: Eric <spice2wolf@gmail.com>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
Co-authored-by: Gediminas Murauskas <muziejusinfo@gmail.com>
Co-authored-by: SC <lalocas@protonmail.com>

* Update translation files

Translation: Invidious/Invidious Translations
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/

Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Omer I.S <omeritzicschwartz@gmail.com>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Co-authored-by: 황윤성 <hys@osbusiness.net>
2021-10-31 16:56:56 +01:00
6cf0ff6b49 Remove useless auto_generated param from PlaylistVideo#to_xml
given the variables available in this function's context, 'author' and 'ucid'
provide the same data 'self.author' and 'self.ucid', respectively.

Given that fact, the variable `auto_generated` has no impact on the logic of
this function, and hence can be safely removed. this greatly simplifies the
code and makes it perfectly compatible with crystal's calling convention for
'#to_xml' methods.
2021-10-29 16:26:42 +02:00
86f75758a7 Fix 'to_json' in struct PlaylistVideo 2021-10-29 16:26:42 +02:00
0ec94405ce Add TODO comments to other places 2021-10-29 16:26:42 +02:00
33780f1995 Also fix 'to_json' in struct Video 2021-10-29 16:26:35 +02:00
1cb715ac9f serialized_yt_data: force datatype of 'locale' 2021-10-28 17:48:08 +02:00
f65b628bf3 serialized_yt_data: Remove default nil value in to_json
this will ensure that two parameters are passed and that it
doesn't collide with 'to_json(builder)'
2021-10-28 17:48:07 +02:00
60fa552469 Fix an infinite recursion caused by #2228
Changes in the aforementioned PR lead to change the behavior
of some old code.

The data type of the parameters aren't explicit enough, which
makes the compiler use the wrong method because of type infering.
2021-10-28 17:48:07 +02:00
437bdedb07 Use env.request.resource for instance switch link 2021-10-26 16:12:25 -07:00
a531f4f057 Rebase error 2021-10-26 16:12:25 -07:00
bb396a310e Remove unneeded redirect.invidious.io code in /redirect 2021-10-26 16:12:25 -07:00
66e7285108 Only use /redirect when automatically redirecting 2021-10-26 16:12:16 -07:00
2b81a82620 Merge pull request #2529 from DmitrySandalov/master
Feature Request: Localization for trending iv-org#331
2021-10-26 23:49:56 +02:00
b555df8377 Merge pull request #2428 from syeopite/ameba-fixes
Fix (some) issues detected by Ameba
2021-10-26 23:34:18 +02:00
232730e909 Merge branch 'master' into master 2021-10-26 23:31:48 +02:00
2c1b4b0dd8 Merge pull request #2524 from SamantazFox/preferences-locales-rework
Preferences locales key normalization
2021-10-26 23:23:29 +02:00
1e0712625a Normalize translation key for preferences categories
categories normalized:
 - Miscellanous
 - Player
 - Visual
 - Administrator
 - Data
 - Subscription
2021-10-26 23:17:04 +02:00
88752f32bd Normalize translation key for user prefrerences
preferences normalized:
 - annotations
 - annotations_subscribed
 - automatic_instance_redirect
 - autoplay
 - captions
 - comments
 - continue
 - continue_autoplay
 - dark_mode
 - default_home
 - extend_desc
 - feed_menu
 - listen
 - local
 - locale
 - max_results
 - notifications_only
 - player_style
 - quality
 - quality_dash
 - related_videos
 - show_nick
 - sort
 - speed
 - thin_mode
 - unseen_only
 - video_loop
 - volume
 - vr_mode
2021-10-26 23:15:39 +02:00
7a93d4c7e4 Merge pull request #2523 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-10-26 21:10:07 +02:00
c3c767eed8 Update Indonesian translation
Update Portuguese (Brazil) translation

Update German translation

Update Portuguese translation

Update Croatian translation

Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Update translation files

Updated by "Remove blank strings" hook in Weblate.

Update translation files

Updated by "Remove blank strings" hook in Weblate.

Update translation files

Updated by "Remove blank strings" hook in Weblate.

Update translation files

Updated by "Remove blank strings" hook in Weblate.

Update translation files

Updated by "Remove blank strings" hook in Weblate.

Update translation files

Updated by "Remove blank strings" hook in Weblate.

Update translation files

Updated by "Remove blank strings" hook in Weblate.

Update translation files

Updated by "Remove blank strings" hook in Weblate.

Update translation files

Updated by "Remove blank strings" hook in Weblate.

Co-authored-by: Gabriel Cardoso <g.cardoso@mailfence.com>
Co-authored-by: Gordon Shumway <machine@gordon-shumway.net>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Neko Nekowazarashi <i.musthafa66@gmail.com>
Co-authored-by: SC <lalocas@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/
Translation: Invidious/Invidious Translations
2021-10-26 15:31:25 +02:00
6f19a3a21e Delete lock.yml 2021-10-26 15:31:13 +02:00
06be0fb351 Add healthcheck for docker-compose 2021-10-26 10:13:39 +02:00
e2bbc9a6fa Switch to #sort_by! in pull_popular_videos job 2021-10-25 01:14:14 -07:00
17e481c107 Reduce block verbosity further 2021-10-25 01:14:14 -07:00
b8f27a42a7 Optimize assigning of on_response_received_endpoints 2021-10-25 01:14:14 -07:00
575c66efd3 Remove extra dot between [] from ambea copy-pasting. 2021-10-25 01:14:14 -07:00
88ad7c8d8d Update src/invidious/routes/playlists.cr
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2021-10-25 01:14:09 -07:00
1adcac175e Update src/invidious/routes/channels.cr
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2021-10-25 01:14:09 -07:00
dd8c412abc Fix Style/IsAFilter issues 2021-10-25 01:14:08 -07:00
e969c1490a Fix Performance/ChainedCallWithNoBang issues 2021-10-25 01:12:26 -07:00
e91421253e Fix Style/VerboseBlock issues 2021-10-25 01:12:26 -07:00
35d15c7c2b Fix Style/VariableNames issues 2021-10-25 01:12:26 -07:00
20cb751ff6 Fix Lint/UnusedArgument issues 2021-10-25 01:12:26 -07:00
0614b52f03 Fix Lint/RedundantStringCoercion issues 2021-10-25 01:12:19 -07:00
a629521c37 Feature Request: Localization for trending (remove region from server config) 2021-10-25 10:57:27 +03:00
5eb83bb39c Bump crystal version for ARM docker container to 1.2.0-r0 (#2527) 2021-10-24 19:26:53 +00:00
0e17d026f2 Feature Request: Localization for trending (fix lint CONTENT_REGIONS end comma) 2021-10-21 23:38:49 +03:00
ea0b1fdf44 Feature Request: Localization for trending (reword region doc) 2021-10-21 22:37:43 +03:00
1d78d67af3 Feature Request: Localization for trending (move TRENDING_REGIONS to i18n.cr as CONTENT_REGIONS) 2021-10-21 22:30:49 +03:00
d9c58c4837 Feature Request: Localization for trending iv-org#331 2021-10-21 14:54:15 +03:00
129779a757 Merge pull request #2433 from iv-org/increase-channel-refresh-delay
Decrease channel refresh frequency (1 min -> 1 h)
2021-10-20 19:12:35 +00:00
c8a985cc77 Merge pull request #2477 from SamantazFox/move-prefs-and-config
Move user preferences and server config
2021-10-18 17:06:07 +00:00
db7e7aae46 Merge pull request #2478 from SamantazFox/code-cleanup
Code cleanup
2021-10-18 16:52:37 +00:00
cb9b84f940 Move 'extract_text()' to 'extractors_utils.cr' 2021-10-18 16:14:37 +02:00
33d9be0ffb Move 'extractors.cr' to 'yt_backend' folder 2021-10-18 16:12:49 +02:00
2571e420f3 Move 'add_yt_headers()' to 'connection_pool.cr' 2021-10-18 16:12:18 +02:00
e17c8b1f4d Move 'extract_videos' and 'extract_selected_tab' too 2021-10-18 16:12:18 +02:00
8805ee7c8c Add fetch_continuation_token back (required by #2215) 2021-10-18 16:12:18 +02:00
7df2fd0bc8 Add 'require' statement to 'invidious.cr' 2021-10-18 16:12:17 +02:00
f7f0910953 Remove fetch_continuation_token(): dead code 2021-10-18 16:12:17 +02:00
d300797e22 Move the YoutubeConnectionPool code to its own file 2021-10-18 16:12:17 +02:00
56dbe15943 Move proxy & YoutubeAPI code to the yt_backend folder 2021-10-18 16:12:17 +02:00
736d63c08f Translations update from Weblate (#2518)
* Update Arabic translation
* Update Chinese (Simplified) translation
* Update Chinese (Traditional) translation
* Update Esperanto translation
* Update Lithuanian translation
* Update Norwegian Bokmål translation
* Update Spanish translation
* Update Turkish translation

Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
Co-authored-by: Eric <spice2wolf@gmail.com>
Co-authored-by: Gediminas Murauskas <muziejusinfo@gmail.com>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Co-authored-by: Rex_sa <rex.sa@pm.me>
Co-authored-by: TheFrenchGhosty <TheFrenchGhosty@posteo.is>
2021-10-18 15:50:27 +02:00
5f65e92500 Merge pull request #2508 from syeopite/lazy-load-images
Lazy load (some) images
2021-10-17 18:25:59 +00:00
a65b9b2b53 Merge pull request #2406 from TechnicalSuwako/fix-non-js-player
fix non-JS player #2405
2021-10-17 18:22:08 +00:00
cc10e8ca5d bump version number for crystal alpine linux package 2021-10-17 15:14:00 +00:00
dfe0c738d6 Fix in README: license is AGPLv3, not AGPLv3+ 2021-10-17 15:53:01 +02:00
21b96a3159 Merge pull request #2506 from syeopite/handle-empty-playlist-tabs
Handle YT tabs without content
2021-10-15 22:13:25 +00:00
888c7e2c29 Merge pull request #2491 from syeopite/extract-image-routes
Extract image routes
2021-10-15 22:13:10 +00:00
d6eaeef8a6 Add Crystal 1.2.0 to CI and bump install-crystal (#2517) 2021-10-15 16:01:03 +02:00
961c5740b7 Merge pull request #2512 from iv-org/fix-2510
Fix #2510
2021-10-14 19:01:12 +00:00
22e8f7e287 Fix #2510 2021-10-14 21:00:14 +02:00
c26b383a1b Update English (United States) translation (#2511)
Co-authored-by: TheFrenchGhosty <TheFrenchGhosty@posteo.is>
2021-10-14 20:53:51 +02:00
2cec1fe4bb Merge pull request #2510 from iv-org/donate-page
Link to invidious.io/donate/ in the footer
2021-10-14 18:46:56 +00:00
9da1c6c6de Translations update from Weblate (#2505)
* Update Arabic translation

* Update Spanish translation

* Update Spanish translation

* Update Esperanto translation

* Update Chinese (Simplified) translation

* Update Turkish translation

* Update Chinese (Traditional) translation

* Update Japanese translation

* Update Lithuanian translation

* Update Korean translation

* Update Portuguese translation

Co-authored-by: Rex_sa <rex.sa@pm.me>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
Co-authored-by: Eric <spice2wolf@gmail.com>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
Co-authored-by: 黒にゃんこ <renraku@076.ne.jp>
Co-authored-by: Gediminas Murauskas <muziejusinfo@gmail.com>
Co-authored-by: 황윤성 <me@hys.pe.kr>
Co-authored-by: SC <lalocas@protonmail.com>
2021-10-14 20:41:54 +02:00
806ddf1aca Change the translation key of the Donate page 2021-10-14 20:40:20 +02:00
0ad2793b68 Link to invidious.io/donate/ in the footer 2021-10-14 20:20:25 +02:00
585e4617e8 Lazy load (some) images 2021-10-14 08:18:44 -07:00
76c6886791 Merge pull request #2507 from fredsterorg/master
Fix typo
2021-10-14 09:27:15 +00:00
91bc6599c6 Fix typo 2021-10-13 21:45:51 -07:00
4d44b2c3a4 Handle YT tabs without any content 2021-10-13 11:38:20 -07:00
b49b5fbda9 Support empty categories 2021-10-13 11:35:31 -07:00
17e6093abb Merge pull request #2497 from Yetangitu/videorendererparser_parse_missing_title
Handle missing title fields in VideoRendererParser.parse (fixes #2495)
2021-10-12 19:04:51 +00:00
3dc980e800 Fix for #2488 - parse contents of search results of type=Category (#2496)
* Fix for #2488 - parse contents of search results of type=Category (returned on first page for universal (type=all) queries instead of returning an error.

* Moved content array walker to Category#to_json

As requested by reviewer this change moves the content array walker from the API endpoint to the Category class.

* Update src/invidious/helpers/serialized_yt_data.cr

Co-authored-by: syeopite <70992037+syeopite@users.noreply.github.com>
2021-10-12 18:17:45 +00:00
c44c1003af Handle missing title fields in VideoRendererParser.parse 2021-10-12 14:56:15 +00:00
39c27f0c66 Merge pull request #2257 from diogorac/fix-only-second-vid 2021-10-11 23:55:09 +02:00
678b10dbcf Lookback 50 videos 2021-10-11 23:52:57 +02:00
a1d6411f1f propagate video_id field on getting playlists 2021-10-11 23:51:07 +02:00
c4c8a10507 rename from continuation to video_id on get_playlist_videos 2021-10-11 23:49:08 +02:00
ee94ccdeb0 update to new YoutubeAPI 2021-10-11 23:49:08 +02:00
e3df9f9ead use dig for getting the video index 2021-10-11 23:49:08 +02:00
62dc629337 linting 2021-10-11 23:49:08 +02:00
dccdf38ce7 increase the max videos in a playlist 2021-10-11 23:49:07 +02:00
84124b837d use v1/next instead of searching for the continuation index 2021-10-11 23:49:07 +02:00
6176da3cbb linting 2021-10-11 23:46:23 +02:00
24bc3e2704 no need to normalize the offset 2021-10-11 23:45:22 +02:00
f13fb80b42 scroll the nextVideo into the top 2021-10-11 23:43:41 +02:00
0a9e19646a pass the api/v1/playlists with videos before the offset 2021-10-11 23:43:41 +02:00
65e45c4079 linting 2021-10-11 23:30:49 +02:00
440105976f fix cases when high offset video from playlist has no offset in url 2021-10-11 23:30:49 +02:00
7eba7fbcc7 add index to playlist item 2021-10-11 23:30:49 +02:00
d9bfb3d305 playlist starts at the offset 2021-10-11 23:30:49 +02:00
4246c7a523 Extract image routes 2021-10-11 13:22:11 -07:00
e3054ccdd2 Fix Role "kemal" does not exist (#2490) 2021-10-11 19:34:25 +00:00
df968d1919 variable postgres username and database name (#2451) 2021-10-11 19:16:56 +00:00
7661c3c061 Remove useless 'require' statement in spec 2021-10-11 18:33:36 +02:00
57ed047025 Add mising 'require' statement to 'invidious.cr' 2021-10-11 18:33:36 +02:00
bda3a26423 Move server structure to a separate file 2021-10-11 18:33:36 +02:00
080d9a8dc7 move theme converter function to a separate file 2021-10-11 18:33:36 +02:00
984a4acc7b Move user preferences structure to a separate file 2021-10-11 18:33:36 +02:00
b10f37bea9 Use kemal in production mode (#2455) 2021-10-11 14:42:22 +02:00
0947c26612 Fix URL-encoding in href strings (#2460)
* hrefs: replace HTML.escape w/ URI.encode_www_form

* Fix search_query_encoded
2021-10-11 05:18:20 -07:00
f5e7fe34a5 Added border radius to channel-profile (#2484) 2021-10-11 09:53:37 +02:00
c6f088d6ca Reduce refresh delay, increase backoff start duration 2021-10-08 18:39:02 +02:00
21e29411af Fix extractor bugs (#2454)
* Add debug/trace logging to extract_items
* Handle invalid timestamps for livestreams extraction
* Make use of author_fallback in playlist extractor
* Don't use extract_text for video length extraction

The extract_text function attempts to extract from both the simpleText and
the runs route. This is typically what we'd want for text extraction as
it could appear in both locations. However, while this still holds true,
the thumbnailOverlayTimeStatusRenderer writes a numerical length (when
present on the video) to the simpleText route and uses runs for a
text overlay like "LIVE" or "PREMIERE".

Therefore, when a video has a text overlay instead of a numerical one,
Invidious still passes it onto decode_length_seconds, which obviously
raises since it cannot be converted into integers.

In the future, if more routes requires one text route over the other, we
should go ahead and add an argument to extract_text itself. Though for
now, this is sufficient.

* Handle unsupported "special" categories
2021-10-07 23:39:21 +02:00
f85930700b Add myself (SamantazFox) as codeowner of locale files (#2472) 2021-10-07 06:01:25 -07:00
707ef1d0f7 Translations update from Weblate (#2470)
* Update Russian translation

* Update Arabic translation

* Update Spanish translation

* Update Esperanto translation

* Update Chinese (Simplified) translation

* Update Turkish translation

* Update Chinese (Traditional) translation

* Update Lithuanian translation

* Update Portuguese translation

Co-authored-by: Nikita Epifanov <nikgreens@protonmail.com>
Co-authored-by: Rex_sa <rex.sa@pm.me>
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
Co-authored-by: Eric <spice2wolf@gmail.com>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
Co-authored-by: Gediminas Murauskas <muziejusinfo@gmail.com>
Co-authored-by: SC <lalocas@protonmail.com>
2021-10-07 05:25:54 -07:00
adc12addfa Add config option to display source code URL in footer (#2450) 2021-10-07 13:53:12 +02:00
bfef9d4b6e Update Persian translation (#2463)
Co-authored-by: Mostafa Ahangarha <ahangarha@gmail.com>
2021-10-05 16:18:08 +00:00
fd29cb9023 Add missing filter ui locales (#1912) 2021-10-05 14:46:19 +00:00
d806310665 Revert "Fix typo (#2456)" (#2457)
This reverts commit 4982bff74d.
2021-10-04 19:51:57 +02:00
4982bff74d Fix typo (#2456) 2021-10-04 17:47:57 +00:00
347c189f3f Merge pull request #1678 from Rjevski/idempotent-database-migrations
Make DB migrations idempotent.
2021-10-03 18:53:35 +00:00
81b12b8001 Add support to make invidious API-only via flag (#2363) 2021-10-02 20:04:02 +00:00
3e781b7d13 Merge pull request #2443 from iv-org/syeopite-patch-1
Use make_client when querying instance api
2021-10-02 20:00:37 +00:00
9c44e41a4c Merge pull request #2228 from syeopite/extract-items-overhaul
Overhaul extract_item(s) functions and add infrastructure for parsing YouTube categories
2021-10-02 20:00:16 +00:00
402bb01151 Update container-release.yml 2021-10-02 16:10:23 +00:00
82a1d9dffa Install Crystal in container-release for linter 2021-10-02 16:10:07 +00:00
570541ba49 Run linter in container-release workflow 2021-10-02 16:00:43 +00:00
73eabb6ca2 Actually fix lint 2021-10-02 08:53:58 -07:00
5a52b4fe45 Fix lint 2021-10-02 17:41:25 +02:00
caa08a6379 Disable locales with less than 50% of strings translated 2021-10-02 17:38:06 +02:00
cd02078e26 Add Portuguese (pt) to locales
follow up to #2437
2021-10-02 17:19:28 +02:00
0341faeb13 Translations update from Weblate (#2437)
* Add Portuguese translation
* Update German translation
* Update Basque translation
* Update Spanish translation
* Update Portuguese (Brazil) translation
* Update Portuguese (Portugal) translation
* Update Korean translation

Co-authored-by: SC <lalocas@protonmail.com>
Co-authored-by: Pukima <pukima@pukima.site>
Co-authored-by: Sergio Varela <sergitroll9@gmail.com>
Co-authored-by: Kim Tae Kyeong <kim@taekyeong.me>
2021-10-02 17:17:30 +02:00
77131cff91 Use make_client when querying instance api 2021-10-02 15:16:07 +00:00
0c7726d4e1 Update/create versions.yml after dep installation 2021-10-02 06:17:03 -07:00
1f1e14fba5 Propagate exceptions from fiber 2021-10-02 06:07:48 -07:00
9be8263f26 Use command literal for extraction 2021-10-02 05:52:42 -07:00
7b2aa5f98e add icon-buttons to playlist items (#2442) 2021-10-02 11:59:33 +00:00
26b28cea49 Use break instead of short-circuit return 2021-10-01 05:39:23 -07:00
23049e026f Improve readabltiy of SearchChannel auto-gen detect 2021-09-28 08:55:02 -07:00
9ab242ca2e Optimize routing logic of extract_item(s) funcs 2021-09-28 08:50:23 -07:00
aa59925374 Rename get_browse_endpoint to get_browse_id 2021-09-28 08:39:00 -07:00
43ea8fa706 Convert nil for AuthorFallback to empty strings 2021-09-28 08:25:03 -07:00
6df85718e6 Apply suggestions from code review
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
2021-09-28 15:23:36 +00:00
82e6f6e095 Create CODEOWNERS (#2417)
https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners

Allows automatically assigning PRs to teams/users when it modifies a 
specific section of the repo that they "own".
2021-09-28 06:14:42 +00:00
9ba3e1cdb4 Decrease channel refresh frequency (1 min -> 1 h)
This is a temporary fix to reduce load on instances with many channels and avoid IP being flagged by Google.
2021-09-26 23:31:14 +02:00
b20f72b963 Use default timeout (5 seconds) for YT pool (#2430) 2021-09-26 23:03:45 +02:00
092b8a4e52 Add documentation to extractors.cr 2021-09-24 21:07:07 -07:00
e5f07dedbf Typos and tiny styling changes 2021-09-24 21:07:07 -07:00
ca9eb0d539 Bountiful extractor changes
- Add extract_text to simplify extraction of InnerTube texts
- Add helper extractor methods to reduce repetition in parsing InnerTube
- Change [] more than 2 blocks long to use #dig or #dig?
- Remove useless ?.try blocks for items that always exists
- Add (some) documentation to VideoRendererParser
2021-09-24 21:07:07 -07:00
142317c2be Overhaul extractors.cr to use modules 2021-09-24 21:07:07 -07:00
3dea670091 Switch to structs in extractors.cr for performance 2021-09-24 21:07:07 -07:00
8435e79913 Improve documentation for extract_item(s) funcs 2021-09-24 21:07:07 -07:00
30e85b40f9 Fix extract_videos 2021-09-24 21:07:07 -07:00
be1a43a337 Manually extract category refactor from 1b569bbc99207cae7c20aa285f42477ae361dd30
Also fixes some errors caused by cherry-picking
2021-09-24 21:07:07 -07:00
abca8f7a7c Rename invidiousitems.cr 2021-09-24 21:07:07 -07:00
7b60dac526 Add description_html field to Category
(cherry picked from commit aa8f15f795787113e56473f8e8fd606749a14bdd)
2021-09-24 21:07:07 -07:00
ea6434662d Change typing of Category contents to only Array
(cherry picked from commit d3384e17f10d0baca70db7993df14100485be9da)
2021-09-24 21:07:06 -07:00
0b7a108a59 Move continuation_token out of Category struct
(cherry picked from commit 0e96eda28f25171a0344b972af1852a4d6fc3007)
2021-09-24 21:07:06 -07:00
57c63f3598 Rename "items_without_cate_items" to reflect usage 2021-09-24 21:07:06 -07:00
ae30f32c36 Unpack search items that are embedded in categories
This is a squash of a bunch of commits
cherry-picked commits

Fix category parse error on search

(cherry picked from commit cc02fed4e69f0eb5f19e017173632b3a3f20519f)

Fix category items not being extracted in search

(cherry picked from commit 2605b9c609ff217b5a6ae09d22450596dcad90fc)

Make search not include category items for now

(cherry picked from commit ca4afd59f46b595e3c339f31432cad98a5771ee1)

Change behavior of categories in search results

(cherry picked from commit cc1067561051b1c113b490e79c4a71cd346f7b3f)

Fix missing search results in extraction

(cherry picked from commit abda6840d5bfe58f845128bdd1a3f4916dd3bb84)

Fix miscount of search results

(cherry picked from commit 491e33450eb1300d0234bb33df0d0e78a027114f)
2021-09-24 21:07:06 -07:00
a50f64f6e9 Add parser for categories (shelfRenderer)
This commit adds a new parser for YT's shelfRenderers which are
typically used to denote different categories.The code for featured
channels parsing has also been moved to use the new parser but some
additional refactoring are needed there.

The ContinuationExtractor has also been improved and is now capable of
extraction continuation data that is packaged under
"appendContinuationItemsAction"

In additional this commit adds some useful helper functions to extract
the current selected tab the continuation token. This is to mainly
reduce code size and repetition.
--
This cherry-picked commit also removes the code for parsing featured
channels present on the original.

(cherry picked from commit 8000d538dbbf1eb9c78e000b1449926ba3b24da9)
2021-09-24 21:07:06 -07:00
1323b94b7a Rewrite extract_item and extract_items functions
This commit completely rewrites the extract_item and extract_items
function. Before this commit these two function were an unreadable
mess. The extract_item function was a lengthy if-elsif chain
while the extract_items function contained an incomprehensible
mess of .try, else and ||.

With this commit both of these functions have been pulled into a
separate file with the internal logic being moved to a few classes.

This significantly reduces the size of these two methods, enhances
readability and makes adding new extraction/parse rules much simpler.

See diff for details.

--
This cherry-picked commit also removes the code for parsing featured
channels present on the original.

(cherry picked from commit a027fbf7af1f96dc26fe5a610525ae52bcc40c28)
2021-09-24 21:06:46 -07:00
6d68fbc31d Fix livestream regex regression caused by #2271
Closes #2352

Special thanks to @WaywardHeart for finding this issue!
2021-09-25 02:47:52 +00:00
d97e128dc0 Translations update from Weblate (#2424)
* Update Russian translation

* Update Indonesian translation

* Update Croatian translation

Co-authored-by: Nikita Epifanov <nikgreens@protonmail.com>
Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
2021-09-23 23:49:28 +02:00
86ca568d6d Remove login type button from frontend (#2423) 2021-09-23 08:44:26 +02:00
92b04a30f3 Prevent indexing of Invidious instances (#2420)
Closes #2418
2021-09-22 01:29:51 +02:00
2b0bb69a4f Fix mixes route (#2421) 2021-09-20 22:39:32 -07:00
67b01506c9 Update note on video.js in js dependencies file 2021-09-19 15:06:59 -07:00
b20b802a8d Bump video.js to 7.11.0 2021-09-19 14:56:05 -07:00
87f46a7532 Unregister captcha job (#2390) 2021-09-19 10:30:19 +00:00
45a1407144 Downgrade video.js version
Dash qualties can't be changed on anything higher than 7.10.2. This is
likely something wrong with videojs-http-source-selector.
2021-09-18 19:59:43 -07:00
4a0359c04e Pass success msg from dep script during compile-time 2021-09-18 14:48:57 -07:00
4e629ca858 Use shell command sha1sum for checksum
Crystal doesn't support OpenSSL3, the version Alpine uses. See
https://github.com/iv-org/invidious/pull/2397#issuecomment-922375908
2021-09-18 14:42:41 -07:00
c32cae00d5 Fix phrasing 2021-09-18 13:30:17 -07:00
02431b3f98 Use correct videojs-vtt-thumbnails location in licences.ecr 2021-09-18 13:30:17 -07:00
0323202a03 Revert to iv-org fork of silvermine-videojs-quality-selector
Upstream requires at least two additional sources. Whereas Invidious needs it to be
able to display a single additional source for normal (dashless)
qualites. Aka medium and hd720.
2021-09-18 13:30:17 -07:00
b6670a7e3d Fix minified silvermine-...quality* fetching 2021-09-18 13:30:17 -07:00
62c1991b88 Typo 2021-09-18 13:30:17 -07:00
3a6085ad31 Readd player.css 2021-09-18 13:30:17 -07:00
6e1b62aedf Fix docker
Clone scripts folder to docker container

Copy videojs-dependencies.yml to docker container

Copy assets folder eariler in build process

Copy assets folder from builder
2021-09-18 13:30:17 -07:00
2451497b31 Typo 2021-09-18 13:30:17 -07:00
6699c80357 Preserve videojs directory for dependency script 2021-09-18 13:30:17 -07:00
1af1474d04 Change "VideoJS" in put reports to "Player" 2021-09-18 13:30:17 -07:00
06a1d2ac41 Rename fetch_videojs* to fetch_player* 2021-09-18 13:30:16 -07:00
f47b588b91 Print message when VideoJS deps are satisfied 2021-09-18 13:30:16 -07:00
262131f68e Add script to resolve and fetch VideoJS files 2021-09-18 13:30:15 -07:00
ceae48088e Stop shipping VideoJS files 2021-09-18 13:28:48 -07:00
e655af251c Try not to log search queries (#2362) 2021-09-16 09:36:22 +00:00
3351ad8197 fix non-JS player #2405 2021-09-15 20:23:48 +09:00
5054510d15 Prevent VR from being initialized in listen mode (#2396) 2021-09-15 01:37:23 +02:00
947fe4fbb3 HTML escape video mimetype
Video mimetype may contain code information between double quotes.
If not properly escaped, it breaks the browser's parser. E.g:
```
type="video/mp4; codecs=" avc1.64001f,="" mp4a.40.2""=""
```

Thank Robin for catching this!
2021-09-13 18:20:11 +02:00
50c8afb525 Handle equirectangular projections for VR (#2379) 2021-09-10 07:42:39 +00:00
a539de4f97 Bump dependencies (#2378)
* Upgrade to Kemal v1.1.0

* Bump postgres driver
2021-09-10 07:42:15 +00:00
8d5a867271 Merge pull request #2380 from syeopite/fix-invidious-showing-yt-redirect-links
Fix invidious showing yt redirect links
2021-09-06 11:15:08 +02:00
6a1954f8f7 Translations update from Weblate (#2384)
* Update Arabic translation

* Update Spanish translation

* Update Esperanto translation

* Update Chinese (Simplified) translation

* Update Turkish translation

* Update Chinese (Traditional) translation

* Update Portuguese (Brazil) translation

* Update Lithuanian translation

* Update Japanese translation

Co-authored-by: Rex_sa <rex.sa@pm.me>
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
Co-authored-by: Eric <spice2wolf@gmail.com>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
Co-authored-by: André Marcelo Alvarenga <andrealvarenga@gmx.net>
Co-authored-by: Gediminas Murauskas <muziejusinfo@gmail.com>
Co-authored-by: GnuPGを使うべきだ <dieeeazpnnqbpddh@cock.email>
2021-09-06 10:54:54 +02:00
0044178d49 Merge pull request #2382 from unixfox/fix-comment-replies
fix comment replies
2021-09-06 10:54:03 +02:00
387bddb51b Improve detection and handling of yt redirect links 2021-09-05 13:13:37 -07:00
41ba19b615 fix comment replies 2021-09-04 15:37:16 +02:00
0e37e42abd use crystal 1.1.1 for the ARM docker image 2021-09-03 19:15:04 +02:00
a28945273d Propagate replacing yout.be links to /watch to RSS 2021-09-03 03:33:49 -07:00
fd6f03655e Fix typo causing links to be youtube.com/redirect 2021-09-03 03:30:36 -07:00
8b62c05fe2 remove 3gp only from the player (#2376)
+ video quality precedence on default player when js is not enabled
2021-09-03 09:39:11 +02:00
0e92a63d14 fix image location for helm 2021-09-01 21:21:38 +00:00
a4ff0b62ce Skip container release for insignficant changes (#2367) 2021-09-01 11:28:20 +00:00
dd141daefd Make building in release mode optional (#2368) 2021-09-01 13:24:17 +02:00
a1001ada47 Properly transform youtu.be links to be /watch routes in comments and descriptions (#2365) 2021-09-01 12:59:47 +02:00
f938aa530e Merge pull request #2372 from TheFrenchGhosty/master
Remove the mention of 'Omar Roth' from the footer
2021-09-01 10:34:10 +00:00
8d419da277 Actually translate the new string to French 2021-09-01 12:30:39 +02:00
8e3ff79f22 Remove the mention of 'Omar Roth' from the footer 2021-09-01 12:23:50 +02:00
d0c12caae9 Merge pull request #2371 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-09-01 10:16:22 +00:00
17a99a524b Update Finnish translation 2021-09-01 12:15:45 +02:00
41a757c3be Update German translation 2021-09-01 12:15:44 +02:00
61fc6539c2 Merge pull request #2366 from TheFrenchGhosty/more-cryptocurrencies
Add Ethereum and Litecoin as donation methods
2021-08-31 21:04:27 +00:00
99f04012a7 Add Ethereum and Litecoin as donation methods 2021-08-31 22:58:38 +02:00
891116f13b docker images with --release for more stability
fixes #1652
2021-08-31 21:24:54 +02:00
4fcd0964cd Extract API routes (#2271)
* Extract API routes from invidious.cr
* Remove deprecated APIs
  - insights
  - top feed
2021-08-30 18:27:47 +02:00
5005212bec Extract feed routes (#2269)
* Extract feed routes from invidious.cr
* Removes the deprecated route for /feed/top
* Deprecate /view_all_playlist & use /feed/playlists
* Move feed views into their own directory

* Add haltf method to halt current route context
* Change status_code + return blocks to use haltf

* Set appropriate response headers for RSS routes
2021-08-30 16:58:24 +02:00
a279d6f433 Fix livestream parsing URLs (#2356) 2021-08-26 21:02:26 +00:00
5c74196f60 remove docker cache on the CI test 2021-08-24 23:20:39 +02:00
33724d40a8 moved APKBUILD files to iv-org/lsquic.cr/docker
and remove docker cache
2021-08-24 23:15:41 +02:00
d78e5281fe use pre-compiled lsquic docker image
from https://quay.io/repository/invidious/lsquic-compiled
fixes #2325
2021-08-24 23:12:19 +02:00
fceb8093f1 Use athena-negotiation to detect language through Accept-Language header (#2324)
Detect language through Accept-Language header
2021-08-24 19:59:27 +00:00
d984a898d4 Remove usage of haltf in /api/v1/channels/:ucid/comments 2021-08-23 17:07:45 -07:00
52688106e4 Fix /api/v1/search/suggestions route link 2021-08-23 16:38:29 -07:00
66b45a8fe2 Bountiful changes
- Use haltf in more locations
 - Fix wrong URL params
 - Rename API modules
 - Remove API routing file and move everything to general iv routing
   file
2021-08-23 16:28:30 -07:00
0db23f9252 Merge pull request #2332 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-08-21 22:59:51 +00:00
23b2abc273 Update Arabic translation 2021-08-21 15:32:33 +02:00
0350d0784a Update Lithuanian translation 2021-08-21 15:32:33 +02:00
83219a499c Update Swedish translation 2021-08-21 15:32:33 +02:00
3f4d5bc85c Update Esperanto translation 2021-08-21 15:32:33 +02:00
83b790950c Update Spanish translation 2021-08-21 15:32:33 +02:00
16b10ec3d7 Update Polish translation 2021-08-21 15:32:33 +02:00
1d4dd4484d Add cache(?) to arm docker build (#2337)
* Add cache(?) to arm docker build

* Update ci.yml
2021-08-21 06:32:28 -07:00
8bd2669d3d Update lock inactive days (#2331) 2021-08-16 10:41:32 -07:00
b5d2eb5c70 fetch with innertube api when video is unavailable (#2329)
+ rename some client type to better names
+ fix thirdParty hack
2021-08-16 10:41:16 -07:00
25362f16a0 Readd paid attribute for videos (#2330) 2021-08-15 10:38:30 +02:00
39b34eece8 Extract API routes from invidious.cr (3/3)
- Auth (excluding notifications*) APIs
- Mixes

*Notifications currently require the "connection_channel" channel
for talking with the notifications job. Unfortunately, we cannot
access that within the route modules yet.
2021-08-14 00:18:25 -07:00
b3426fdc94 Restructure API routes to use more namespaces 2021-08-14 00:18:25 -07:00
6aa65593ef Extract API routes from invidious.cr (2/?)
- Video playback endpoints
- Search feed api
- Video info api
2021-08-14 00:18:24 -07:00
66becbf46f Restructure API route organisation 2021-08-14 00:18:24 -07:00
cbf3d75087 Extract API routes from invidious.cr (1/?) 2021-08-14 00:18:24 -07:00
0b0036813f Remove deprecated APIs
- insights
- top feed
2021-08-14 00:18:03 -07:00
c06a20e085 Switch to innertube API for videos (#2220)
Commit history:
- Switch to innertube API for videos
- fix hardcoded strings + fix bypass geo-restriction
2021-08-13 20:29:43 +00:00
c60fccd7f6 Update crystal docker image to 1.1.1 2021-08-13 08:44:44 +02:00
46f8b04e40 Revert "bump crystal docker image version +"
This reverts commit f2b69fd812.

Crystal 1.1.0 is not supported by Invidious due to upstream issue. See
crystal-lang/crystal#10972
2021-08-12 16:10:40 -07:00
12b46bbd41 switch to innertube API for about channels (#2255) 2021-08-12 16:00:26 -07:00
f2b69fd812 bump crystal docker image version +
use alpine:edge docker image in order to use crystal 1.1.1
2021-08-12 23:33:28 +02:00
0aae728e33 Fix "fatal role postgres doesn't exist" (#2296)
* Fix "fatal role postgres doesn't exist" 

Fix a frequent error with recent postgres docker images:
`FATAL:  role "postgres" does not exist`

* Use $$VAR so it's expanded by the shell, not docker
2021-08-12 19:55:10 +00:00
cea38de4ad Check for existance of "adaptiveFormats" in videos
Combined from commits:
- Check for existance of "adaptiveFormats" in videos
- Remove usage of ternary conditional
2021-08-12 19:26:50 +00:00
3e4fab7070 Merge pull request #2323 from unixfox/fix-comments
Fix comments - related to #2322
2021-08-12 18:52:19 +00:00
6745ca7775 fix comments using dig 2021-08-12 20:00:14 +02:00
88c5e3b6fa Use the new youtube api for comments (#2217)
* use the new youtube api for comments
* remove PG_DB & action parameter + allow force region
* support new comments data with onResponseReceivedEndpoints
2021-08-12 19:14:30 +02:00
2fdb2c7c9a Exempt "blocked" PRs from being marked as stale (#2321) 2021-08-12 08:42:09 -07:00
7afa027b95 Switch routing logic to use modules (#2298)
* Switch routing logic to use modules
* Add more macros for adding routes of different HTTP methods
2021-08-11 12:36:25 +02:00
637a5cc14f Add CI for testing arm64 docker (#2315)
* Add CI for testing build of docker-arm64

* Add specs check to dockerfiles
2021-08-09 22:34:52 -07:00
81e77693b2 Merge pull request #2294 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-08-09 03:28:41 -07:00
d49f884f69 Update Indonesian translation 2021-08-06 11:08:48 +02:00
34eeb29436 Update Arabic translation 2021-08-06 11:08:48 +02:00
0495347c64 Update Portuguese (Brazil) translation 2021-08-06 11:08:48 +02:00
023f9b44d3 Update Korean translation 2021-08-06 11:08:48 +02:00
5248814053 Update Spanish translation 2021-08-06 11:08:48 +02:00
7ddab5b8cd Don't run CI on locale only changes (#2306) 2021-08-06 11:08:44 +02:00
a26adb162c Bump Crystal 1.1.0 to 1.1.1 2021-08-06 00:40:54 -07:00
ef5df36a8a Add nightly crystal to CI matrix (#2264)
* Add nightly crystal to a spec matrix

This project is very large and serves as a great test bed for breakages
in nightly builds of crystal

* Order crystal version in CI matrix

* Add daily CI runs
2021-08-06 00:40:32 -07:00
9b74cf3225 Typo 2021-08-03 23:57:48 +02:00
1321c90920 Extract channel routes (#2227)
* Extract primary channel routes from invidious.cr

Also removes timedtext_video stub since all it does is redirect to the
homepage. However, Invidious's 404 handler already does this.

--
As the template for the channel about page doesn't exist yet, the
behavior for the /channel/:ucid/about endpoint has been changed to be
the same as what's currently present on Invidious

(cherry picked from commit 8fad19d8057d7d22e3de27ebbc88a9978c1df27b)

* Manually extract brand_redirect from 1b569bbc99207cae7c20aa285f42477ae361dd30

This commit manually extracts the brand_redirect function from the
commit mentioned.

However, the redirect to the  `.../about` endpoint is removed due to the
fact that it doesn't exist yet.

This commit is also mainly just a bridge for the next few cherry picks from
\#2215

* Update brand_redirect to use youtubei resolve_url

(cherry picked from commit 53335fe7cfdfac392365b7cac447bc7cc6478134)

* Add additional channel endpoints to brand_redirect

(cherry picked from commit 8fc6f3add637dabb09b2034f4d82fc3d039ba15c)

* Add separate handler for /profile endpoint

* Add /channel/:ucid/home route

* Document all channel brand_urls
2021-08-03 23:46:15 +02:00
4b46313e19 Fix crystal overrides (#2295)
* Move Crystal stdlib classes overrides to a separate file
* Document known crystal overrides
* Update crystal overrides for HTTP::Client socket
* Update shard.yml to restrict crystal versions
* Fix compilation error in Crystal 1.1.x (See
   https://github.com/crystal-lang/crystal/issues/10965
   for more details about this issue).
2021-08-03 23:44:47 +02:00
e9add69e26 Fix #resolve_url by adding ClientConfig argument
The private `_post_json` method of the YoutubeAPI requires a ClientConfig
as the third parameter. This was passed in all Youtube API methods except the
`#resolve_url` method.
2021-08-03 00:48:58 -07:00
5b020e81ca Youtube api improvements (#2277)
* Put youtube API functions under the YoutubeAPI namespace

* Implement the following endpoints:
  - `next`
  - `player`
  - `resolve_url`

* Allow a ClientConfig to be passed to YoutubeAPI endpoint handlers.

* Add constants for many new clients

* Fix documentation of YoutubeAPI.browse(): Comments and search
  result aren't returned by the browse() endpoint but by the next()
  and search() endpoints, respectively.

* Accept gzip compressed data, to help save on bandwidth

* Add debug/trace logging

* Other minor fixes
2021-08-03 02:58:27 +02:00
c76bd7b45b Merge pull request #2288 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-07-31 14:18:29 +00:00
21b7ae3ac3 Update Korean translation 2021-07-29 02:15:57 +02:00
e45da7161f Update Korean translation 2021-07-29 02:15:57 +02:00
7a3c000955 Update Vietnamese translation 2021-07-29 02:15:57 +02:00
f75c5db372 Update Lithuanian translation 2021-07-29 02:15:57 +02:00
7cd1d82d26 Update Danish translation 2021-07-29 02:15:57 +02:00
0085c3b0d8 Update Croatian translation 2021-07-29 02:15:57 +02:00
4251c6cb99 Update Indonesian translation 2021-07-29 02:15:57 +02:00
ac973df8e7 Update Hungarian translation 2021-07-29 02:15:57 +02:00
a76a955a1b Update Portuguese (Portugal) translation 2021-07-29 02:15:57 +02:00
c89b98a1e0 Update Portuguese (Brazil) translation 2021-07-29 02:15:57 +02:00
dda4596c0c Update Japanese translation 2021-07-29 02:15:57 +02:00
4ac863203d Update Japanese translation 2021-07-29 02:15:57 +02:00
be5831d9bd Update Turkish translation 2021-07-29 02:15:57 +02:00
1e2fa27af7 Update Chinese (Simplified) translation 2021-07-29 02:15:57 +02:00
fcbaf2a978 Update Icelandic translation 2021-07-29 02:15:56 +02:00
b5c172974e Update Spanish translation 2021-07-29 02:15:56 +02:00
7bb70924c1 Update Basque translation 2021-07-29 02:15:56 +02:00
a62fb6dcd1 Update French translation 2021-07-29 02:15:56 +02:00
e9c06237f2 Update Norwegian Bokmål translation 2021-07-29 02:15:56 +02:00
bdb1eca741 Update Polish translation 2021-07-29 02:15:56 +02:00
29000a5209 Update German translation 2021-07-29 02:15:56 +02:00
88f0867442 Update Russian translation 2021-07-29 02:15:56 +02:00
3de06174bf Update English (United States) translation 2021-07-29 02:15:56 +02:00
5187894add Update Croatian translation 2021-07-29 02:15:56 +02:00
d58f7bb935 Update English (United States) translation 2021-07-29 02:15:56 +02:00
84594b0e1e Remove workaround for decompression of proxied files (#2286)
Was used by `proxy_file` before crystal 0.35.0.
Implemented in: f7dbf2bdd4
orphaned since: d30a972a90
2021-07-28 17:15:51 -07:00
578bbcd181 Fix raw parameter for videos in listen mode (#2270) 2021-07-28 16:28:09 -07:00
0cdf13742a Merge pull request #2283 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-07-28 13:38:52 +00:00
b00d24579d Update Korean translation 2021-07-27 17:28:58 +02:00
5c76cdaad9 Merge pull request #2280 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-07-27 13:51:48 +00:00
5d994d179e Update Korean translation 2021-07-27 09:07:29 +02:00
8930020776 Update Korean translation 2021-07-27 09:07:27 +02:00
0637bf0dcb Merge pull request #2274 from syeopite/svg-logo
Change Invidious logo in README to be a svg.
2021-07-26 20:06:10 +00:00
2abec5b62f Use colorized version of safari-pinned-tab.svg 2021-07-25 16:07:11 -07:00
bc937a6434 Add Korean (ko.json) to loaded locales
Required because of c83113d49b.
2021-07-26 00:15:32 +02:00
3a84e3abcf Remove locales consistency check
This is not required anymore, due to the new weblate config (from now
on, weblate adds strings as they are translated).
2021-07-26 00:12:43 +02:00
e4c223ca59 Merge pull request #2266 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-07-26 00:09:30 +02:00
31de2d304c Change README logo to use vector image 2021-07-24 15:14:58 -07:00
c83113d49b Update Korean translation 2021-07-24 20:48:39 +02:00
d95980b3ba Update Portuguese (Brazil) translation 2021-07-24 20:48:39 +02:00
08a88af965 Update Japanese translation 2021-07-24 20:48:39 +02:00
4d4f61c922 Update Arabic translation 2021-07-24 20:48:39 +02:00
110b77f453 Update Russian translation 2021-07-24 20:48:39 +02:00
ba0d205457 Add Korean translation 2021-07-24 20:48:39 +02:00
1ee4cae802 Rework the README (#2135)
Major README.md cleaning

Additions:
* Add the invidious logo
* Add Quickstart section
* Add relevant links (instance list, documentation, contribute, donate) directly in the header

Badges:
* Add badges for open issues and PRs
* Add "Awesome Humane Tech" badge, as we're listed there
* Move CI passed/translated badges to the top
* Replace the "license feature" with a proper badge

Major section changes:
* Reword titles
* Rewrite features list
* Promote the screenshots sections. People like screenshots!
* Move "donate" to the end, there is a link at the top anyway
* Move section "made with invidious" after all the other invidious related sections + rename it to "Projects using Invidious"

Other fixes:
* Remove useless HTML in the screenshots table
* Remove extra columns in H2 titles
* Remove all useless lines between sections
* Use markdown for git commands + add the staging step
* Promote invidious redirect in "Extensions"
* Update preference screenshots
2021-07-24 20:48:30 +02:00
095c894548 Merge pull request #2201 from pinchese/patch-1
futureproof comment avatars
2021-07-16 21:43:37 -07:00
9f5f5da894 config_example.yaml: document all possible options (#2083)
Fixes https://github.com/iv-org/documentation/issues/46
2021-07-16 20:34:40 +02:00
aa3608f0af Include liblsquic build in dockerfile + add support for ARM64 on Docker (#2147)
Co-authored-by: Emilien Devos <contact@emiliendevos.be>
2021-07-15 21:57:20 +00:00
56ebef4352 Multiple front-end fixes (#2247)
Fixes:
* Sanitize user-provided content in HTML (Fixes #2193)
* Fix encoding of search query in prev/next pages (Fixes #2229)
* Fix some issues introduced with #2196:
   - Fix alignment of all <h3> elements (Move the inline style from the parent to the <h3> element)
   - Add missing comma on 'dir' HTML attribute (Typo introduced by PR #2196)

Code cleaning:
* Remove unnecessary 'each_sclice' + 'each' double loop in ECR files
* Clean the player's <source> list generation code (in player.ecr)
2021-07-15 23:01:36 +02:00
3e5c353298 Merge pull request #2205 from syeopite/fix-age-restricted-videos
Partial (and temporary) fix for age restricted videos
2021-07-14 10:11:03 -07:00
0d57a887ea Mute unbuffered_flush IOError exception (#2235)
Related to #1416, it doesn't really fix the real error, but instead mutes the exception message.

Like explained in #1416, this "exception Error" while flushing the client data doesn't harm the client-server connection. However, this exception message continuously spams the logs and makes debugging and error finding really difficult.
2021-07-14 17:59:33 +02:00
b5fdd29cd5 Translations update from Weblate (#2251)
* Update Arabic translation
* Update Bengali (Bangladesh) translation
* Update Chinese (Simplified) translation
* Update Chinese (Traditional) translation
* Update Croatian translation
* Update Czech translation
* Update Danish translation
* Update Dutch translation
* Update Esperanto translation
* Update Hebrew translation
* Update Indonesian translation
* Update Lithuanian translation
* Update Norwegian Bokmål translation
* Update Portuguese (Brazil) translation
* Update Serbian (cyrillic) translation
* Update Spanish translation
* Update Turkish translation
* Update Vietnamese translation

Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Co-authored-by: Eric <spice2wolf@gmail.com>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
Co-authored-by: Gediminas Murauskas <muziejusinfo@gmail.com>
2021-07-14 17:54:03 +02:00
ae61662f61 Debloat channels.cr into multiple files (#2225)
Cherry picked from ui overhaul branch with a few modifications:
  - channel folder is renamed to channels
  - parsing for channel home and featured channels are removed due to
    lack of infrastructure from other commits

(cherry picked from commit 44d18b8e147b47ad06a54cc6fd08423d9f39074d)
2021-07-14 17:46:12 +02:00
b633f8d207 More locales fixes for consistency checks 2021-07-12 21:58:38 +02:00
c4c813fd0a Fix da.json for consistency checks 2021-07-12 20:45:26 +02:00
f9c4cc274a Fix sr.json for consistency checks 2021-07-12 20:37:51 +02:00
cc45a0ca28 Fix cs.json for consistency checks 2021-07-12 20:34:10 +02:00
9ed1d28f76 Fix sk.json for consistency checks 2021-07-12 20:30:50 +02:00
7ca2acd24e Fix si.json for consistency checks 2021-07-12 20:19:09 +02:00
fdca468049 Update bn_BD.json to pass consistency checks 2021-07-12 20:05:10 +02:00
c0e8feb66e Add new and missing locales to i18n.cr
New locales: lt, vi
Missing: bn_BD, cs, da, eu, hu-HU, si, sk, sr, sr_Cyrl
2021-07-12 19:41:35 +02:00
0dd710c195 Translations update from Weblate (#2219)
* Add Lithuanian translation
* Add Vietnamese translation
* Update Arabic translation
* Update Chinese (Simplified) translation
* Update Chinese (Traditional) translation
* Update Croatian translation
* Update Czech translation
* Update Esperanto translation
* Update French translation
* Update Indonesian translation
* Update Norwegian Bokmål translation
* Update Portuguese (Brazil) translation
* Update Turkish translation

Co-authored-by: GM <muziejusinfo@gmail.com>
Co-authored-by: Petter Reinholdtsen <pere-weblate@hungry.com>
Co-authored-by: phlostically <phlostically@mailinator.com>
Co-authored-by: Eric <spice2wolf@gmail.com>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
Co-authored-by: Vinicius <rodriguessv30@gmail.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Cao Dũng <dung.cc@hubservices.vn>
Co-authored-by: Rex_sa <rex.sa@pm.me>
Co-authored-by: Ondřej Sedláček <behests_phocaena@aleeas.com>
Co-authored-by: ToldYouThat <itoldyouthat@protonmail.com>
Co-authored-by: Samantaz Fox <translator-weblate@samantaz.fr>
Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
2021-07-12 19:10:05 +02:00
39110ad21c Use struct for caption object 2021-07-11 16:17:22 -07:00
57bb8c610a Use embed stream pull as fallback for gated videos 2021-07-02 00:25:00 -07:00
cf619f24a9 Remove workaround for kemalcr/kemal/issues/575 (#2230)
Full URL of the issue: https://github.com/kemalcr/kemal/issues/575
2021-07-01 16:13:06 +00:00
fd313f0d66 Fix alignment of "invidious" logo on search page
The alignment was broken by #2196
2021-06-29 23:18:17 +02:00
67a18dcff6 Merge pull request #2196 from ahangarha/patch-1
Add bi-directional text support
2021-06-27 22:39:45 +02:00
54b19a04bb Fix caption parsing on age restricted videos 2021-06-27 08:35:28 -07:00
ca4df29670 Wrap comment 2021-06-25 14:14:41 -07:00
7da0b2fd7f Switch from URI::Params.new to URI::Params.encode 2021-06-25 12:14:21 -07:00
cfcb64c516 Fix layout of video 'card' items
Previous changes broke alignment of text and icons
2021-06-25 20:47:15 +02:00
135ae11c20 Merge pull request #2195 from B0pol/trending
Use youtubei API for trending
2021-06-25 17:53:07 +02:00
ce68d09d26 Pick a random video for bypass captcha
pick a random video from the 1000 first rows of the channel_videos table
in order to bypass the captcha more efficiently
2021-06-25 15:37:37 +00:00
aa55e67389 Fix extraction of age restricted videos 2021-06-25 07:51:51 -07:00
f7992d2d09 futureproof comment avatars
i was injecting custom css into the site that made the avatars round, and noticed comment avatars looked a little odd

i opened dev tools and siffed through the html, and noticed that the image was being padded,
when it would look nicer if the element used margin instead of padding

with padding:
https://imgur.com/c0pB37e

with proposed changes (margin instead of padding):
https://imgur.com/iKmBzEi
2021-06-24 23:50:37 -05:00
eecfc155b8 Right-align the RSS icon in channel playlists 2021-06-25 02:15:49 +02:00
9cef7945c0 Fix RTL text in video titles on Firefox
The behavior was as follow: on Right-To-Left text (e.g Arabic) that is wrapped
(because it's too long to fit on one line), the second row and following rows
may or may not be right aligned (as RTL text should be). Opening the devtools
fixes that alignement, as consistently as closing the devtool breaks it.

This problem seems to arrive only in the following configurations (link nested
in a paragraph, both of which may or may not have the dir= attribute):

* `<p><a href="some_link">RTL_TEXT</a></p>`
* `<p><a href="some_link" dir="auto">RTL_TEXT</a></p>`
* `<p dir="auto"><a href="some_link">RTL_TEXT</a></p>`

with the following CSS:

```
p {
	unicode-bidi: plaintext;
	text-align: start;
}
```

Changing the HTML to the following configuration (a paragraph with the dir=
attribute, nested in a link) seems to fix it:

`<a href="some_link"><p dir="auto">RTL_TEXT</p></a>`
2021-06-25 02:03:09 +02:00
1b1932f787 fix feed alignment on community view 2021-06-24 17:40:02 +04:30
9e4fd193c6 Limit descriptions width to ease mixed LTR/RTL text reading
This will prevent, on large pages, the LTR and RTL text to be
far away, on each side of the page. This could happen on channel
and playlists descriptions, when the page is displayed on a large
screen.
2021-06-24 17:35:44 +04:30
d16a748f37 set alignment for feed link 2021-06-24 17:08:40 +04:30
f616b8e518 Revert "remove unnecessary text-align"
This reverts commit 97b469f59c.
2021-06-24 16:53:16 +04:30
97b469f59c remove unnecessary text-align 2021-06-24 15:58:54 +04:30
7ec93825b6 Change description-box from flex to block
I also make minor changes to the surroundings so that the same layout
and functionality as before is preserved.
2021-06-24 15:12:05 +04:30
4a4867deeb Undo last commit 2021-06-24 13:10:31 +04:30
965a8ea9fd Change display to block
Change display from flex to block so that the direction of content would get properly set
2021-06-24 12:17:49 +04:30
3e8ddabcc1 Add bidi support
Adding these styles is the easiest way to add bidi (bidirectional text) support without or with least side effect. I have tested it by adding it manually on yewtu.be instance and so far it works very well.
2021-06-24 11:56:58 +04:30
50267a6dd6 Use youtubei API for trending 2021-06-24 00:54:06 +02:00
5a8825d016 Fix quoting of 'none' in CSP header
The keyword 'none' must be surrounded by single quotes.
Regression introduced by #2168.
2021-06-20 18:43:00 +02:00
e6bdcff0dd Merge pull request #2183 from iv-org/unixfox-patch-1
update video URL for recaptcha detection
2021-06-19 22:02:42 +02:00
4803285e50 update video URL for recaptcha detection 2021-06-19 17:38:49 +00:00
bab263f426 Merge pull request #2179 from syeopite/remove-welcome-from-username-display
Remove unnecessary "Welcome, " on username display
2021-06-19 13:15:54 +00:00
03d5509b44 Merge branch 'master' into remove-welcome-from-username-display 2021-06-19 13:15:36 +00:00
4a5f193e94 Merge pull request #2180 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-06-19 13:14:53 +00:00
fdd66f12f0 Update Chinese (Simplified) translation 2021-06-19 15:13:54 +02:00
349f073b8e Remove unnecessary "Welcome, " on username display 2021-06-19 06:03:50 -07:00
84e271be4b Merge pull request #2178 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-06-19 13:01:30 +00:00
f215fa936b Update Indonesian translation 2021-06-19 14:28:34 +02:00
75d04a92c8 Merge pull request #1043 from makos/display-username
Display username of currently logged in user
2021-06-19 05:28:30 -07:00
90c907710c Display username in header 2021-06-19 04:58:42 -07:00
00425670d7 Merge pull request #1940 from syeopite/instance-redirect-button
Add instance redirects!
2021-06-19 11:35:40 +00:00
cb525af0a2 Connect to api.invidious.io with https 2021-06-19 04:17:49 -07:00
09f7e38eed Disable automatic instance redirection by default 2021-06-19 04:17:49 -07:00
7c49a0ba7a Rephrase auto instance redirect preference 2021-06-19 04:17:49 -07:00
45e57f1ad3 Refactor fetch_random_instance 2021-06-19 04:17:49 -07:00
eb911de928 Handle if inst. api is down for rand inst fetch 2021-06-19 04:17:49 -07:00
b393e31b76 Fix inst. fetching for inst w/ disabled stats/err 2021-06-19 04:17:49 -07:00
4a095eb98e Fix <hr> styling on empty search page 2021-06-19 04:17:49 -07:00
d793d4ba78 Add switch invidious instance btn to all chan tabs 2021-06-19 04:17:49 -07:00
2f54ec4e18 Fix locale consistency for err template redirects 2021-06-19 04:17:46 -07:00
b9cd40fe1e Add redirect buttons to error template 2021-06-19 04:16:18 -07:00
173cd7c15e Fix switch invidious instance btn on videos 2021-06-19 04:16:18 -07:00
950c8f7104 Enhance fetch_random_instance func
Handle cross-inst. redirect w/ broken health stats

Add check for instance version in cross-redirect
2021-06-19 04:16:18 -07:00
b63bebb519 Allow automatic instance redirect to be turned off
Instead the "switch invidious instance" link would bring users to
redirect.invidious.io
2021-06-19 04:16:18 -07:00
cf72b34866 Fix locale discrepancy for instance redirect btn 2021-06-19 04:16:18 -07:00
d06cf2a07b Add playlist redirect 2021-06-19 04:16:18 -07:00
10804927bb Add channel redirect 2021-06-19 04:16:18 -07:00
f178297452 Generalize redirect route 2021-06-19 04:16:18 -07:00
311e7684b2 Add instance redirect on empty/broken search 2021-06-19 04:16:18 -07:00
37ff2ac2b9 Overhaul button icon html and styling 2021-06-19 04:16:18 -07:00
4786d586cf Add new icon button for instance redirects 2021-06-19 04:16:17 -07:00
b7aaae4a19 Add 'Switch Invidious Instance' to en locale 2021-06-19 04:16:17 -07:00
008598b56f Change wording of redirect hyperlink 2021-06-19 04:16:17 -07:00
f3bc55e37e Expose instance redirect to frontend 2021-06-19 04:16:17 -07:00
31fa3dfd59 Add route to redirect to another instance 2021-06-19 04:16:17 -07:00
5b47438b71 Add helper function to fetch random instance 2021-06-19 04:16:17 -07:00
c33ee83d87 Merge pull request #2124 from raycheung/master
Fix storyboard when proxied with an external port
2021-06-19 07:45:33 +00:00
835dd1abcc Merge pull request #2177 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-06-19 07:42:11 +00:00
576f5496c0 Update Dutch translation 2021-06-19 09:41:02 +02:00
ff460c7736 Update Arabic translation 2021-06-19 09:41:02 +02:00
22adbe2073 Merge pull request #2168 from SamantazFox/rewrite-response-headers
Rewrite response headers
2021-06-19 07:40:59 +00:00
b8f0b4b583 Typo 2021-06-19 09:40:33 +02:00
f88e5f09b4 Merge pull request #2152 from syeopite/hooks-and-scripts
Add scripts to ease development
2021-06-19 07:38:33 +00:00
2b9c6c95b1 Merge pull request #2155 from SamantazFox/fix-utf8-in-search
Multiple search fixes
2021-06-19 07:36:58 +00:00
3f34db549f Merge pull request #2174 from syeopite/workflow-improvements
Workflow improvements
2021-06-19 07:33:13 +00:00
f4c0ee49a7 Merge pull request #2158 from 808-cowbell/increase-hr-margins
Add 10px margin to top and bottom of hr element
2021-06-18 12:45:22 -07:00
2fc0a6df93 Prevent CI run when src or wrkflows aren't chngd 2021-06-18 11:53:28 -07:00
0a9c804940 Reduce PR stale length
PRs should be active. Anything that hasn't had activity in more than 45 days should be considered abandoned.
2021-06-18 11:10:11 -07:00
96faa9d12b Delete For-Matrix-org-Support.md 2021-06-18 15:52:24 +02:00
42d9fd9c88 Rewrite response headers
Fixes #2018 and #2153
2021-06-17 19:53:39 +02:00
908bc7561b Add 10px margin to top and bottom of hr element 2021-06-14 12:24:01 -06:00
3de92b337d Use if/else instead of return in search route 2021-06-14 17:27:47 +02:00
31466785ad Merge pull request #2157 from MrPaulBlack/master
Disallow /watch path for bots again
2021-06-14 01:47:23 -07:00
e38b602b7d Disallow /watch path for bots again 2021-06-14 10:40:59 +02:00
a2f5342a83 Multiple search fixes
* Remove percent-encoding of the search query when calling youtube API, as it
  breaks UTF-8
* Empty search redirects to /search, not /
* Show the fullscreen search "home page" (from #1977) at /search
* Allow 'region=' parameter to be passed to /search
* Other minor fixes
2021-06-13 21:52:36 +02:00
d432732959 Add ability to propagate locale removals 2021-06-13 07:23:45 -07:00
4eb3de7b4e Fix typos 2021-06-13 06:56:17 -07:00
2e6adfb44a Add locale-key-propagater and auto linter hooks 2021-06-13 06:40:04 -07:00
c85c6d0ac5 Add new line at end of locale files 2021-06-13 06:23:41 -07:00
6c9dd8deb6 Change internal i18n key of sv-SE from sv to sv-SE 2021-06-13 06:23:18 -07:00
fe64e6dbf2 Merge pull request #2141 from watchingdogs/patch-1
Update hu-HU.json
2021-06-11 14:05:28 +00:00
4fd51ec880 Merge branch 'master' into patch-1 2021-06-11 14:04:05 +00:00
0323c521be Merge pull request #2145 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-06-11 14:02:23 +00:00
992125febc Update Indonesian translation 2021-06-11 16:01:26 +02:00
f0bd0abc0f Update Hungarian translation 2021-06-11 16:01:26 +02:00
5c0d4c4408 Merge pull request #2144 from iv-org/silence-thread-locker
Silence thread locker
2021-06-11 01:39:33 -07:00
5f8e47a14d Temporarily remove thread locker comments 2021-06-11 01:38:54 -07:00
9407b91060 Fix typo in hu-HU translation
Change requested by the original translator, see https://github.com/iv-org/invidious/pull/2141#pullrequestreview-679868487
2021-06-10 17:22:20 +02:00
a6e38e2ad2 Merge pull request #2115 from syeopite/crystal-1.0.0-2
Upgrade to crystal 1.0.0
2021-06-10 05:03:37 -07:00
8701de64ce Bump lsquic.cr shard version to v2.18.1-2 2021-06-10 04:49:19 -07:00
114cac99e7 Update CI's crystal version 2021-06-09 16:34:54 -07:00
78194599e2 Update hu-HU.json
finished the translation
2021-06-09 17:59:53 +02:00
49d9491fda Create For-Matrix-org-Support.md 2021-06-09 15:41:59 +02:00
392a363d02 Update Dockerfile for crystal 1.0 2021-06-08 13:20:46 -07:00
0a87ba6930 Decode URL encoded preference cookie when parsing 2021-06-08 13:11:04 -07:00
065c104f27 Upgrade to crystal 1.0.0 2021-06-08 13:10:58 -07:00
7f272f1293 Allow issue/pull locker to be manually dispatched 2021-06-08 12:13:58 -07:00
e67f50f157 Merge pull request #2129 from syeopite/lock-stale-closed-issues
Add workflow to lock inactive closed issues
2021-06-08 12:07:33 -07:00
dd13392e36 Change wording of issue/pull locker message 2021-06-08 12:02:48 -07:00
2638c66638 Merge pull request #2132 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-06-08 17:04:48 +00:00
1d40225159 Update Serbian translation 2021-06-07 22:59:36 +02:00
08f11d2f22 Update Czech translation 2021-06-07 22:59:36 +02:00
ee20ab3041 Update Hebrew translation 2021-06-07 22:59:36 +02:00
e0402919e1 Update Danish translation 2021-06-07 22:59:36 +02:00
086e156a02 Update Croatian translation 2021-06-07 22:59:36 +02:00
d0b9292aee Update Indonesian translation 2021-06-07 22:59:36 +02:00
7b0cb69938 Update Slovak translation 2021-06-07 22:59:36 +02:00
479dd684f8 Update Bengali (Bangladesh) translation 2021-06-07 22:59:36 +02:00
573738443c Update Serbian (cyrillic) translation 2021-06-07 22:59:36 +02:00
0268629c3b Update Chinese (Traditional) translation 2021-06-07 22:59:36 +02:00
cf9e6c5d06 Update Turkish translation 2021-06-07 22:59:36 +02:00
ad44c6eeee Update Chinese (Simplified) translation 2021-06-07 22:59:36 +02:00
2b79d76541 Update Esperanto translation 2021-06-07 22:59:36 +02:00
cfaf3180f9 Update Spanish translation 2021-06-07 22:59:36 +02:00
7881efa269 Update French translation 2021-06-07 22:59:36 +02:00
1ac52ce18f Update Norwegian Bokmål translation 2021-06-07 22:59:36 +02:00
bb123ae0df Update Danish translation 2021-06-07 22:59:36 +02:00
4859b67a7b Update Portuguese (Brazil) translation 2021-06-07 22:59:36 +02:00
586e8b1479 Update Chinese (Simplified) translation 2021-06-07 22:59:36 +02:00
5a526e2077 Update Spanish translation 2021-06-07 22:59:36 +02:00
d3452775b3 Update Polish translation 2021-06-07 22:59:36 +02:00
d82734641b Merge pull request #1985 from SamantazFox/improve-youtube-api-helper
Improve youtube api calls
2021-06-07 13:59:26 -07:00
abbc2bad35 Slash inactive days for issue locker by half 2021-06-05 13:51:11 -07:00
b491d69eec Formatting 2021-06-05 07:17:41 -07:00
d93514d327 Add workflow to lock stale closed issues 2021-06-05 07:16:07 -07:00
49ed485145 Merge pull request #2128 from unixfox/patch-1
fix typo in the template file
2021-06-04 21:52:26 -07:00
1a2ca8634d typo in the template file 2021-06-04 18:53:24 +00:00
60cceabaa6 Merge pull request #2127 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-06-03 10:29:05 +00:00
56df6b5e08 Update Indonesian translation 2021-06-03 02:28:17 +02:00
ca5d5668d9 Fix storyboard when proxied with an external port
Say if it's `http://host:port` internally and proxied to
`https://domain:external_port`, the storyboard URL was rendered as
`https://domain:port`.
2021-05-29 11:43:39 +08:00
4a45d10a8b Merge pull request #2116 from syeopite/extend_desc_fix
Allow user preferences to effect extend_desc
2021-05-26 18:35:34 +00:00
82e1e9f0e5 Merge pull request #2085 from TheFrenchGhosty/protodec-org
Bring protodec to the Invidious organization
2021-05-26 18:32:29 +00:00
2e1b93b857 Merge pull request #2117 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-05-26 18:13:31 +00:00
37e9cefc52 Update Croatian translation 2021-05-26 17:54:06 +02:00
1807b1492e Update Japanese translation 2021-05-26 17:54:05 +02:00
460a6b4e99 Update Chinese (Traditional) translation 2021-05-26 17:54:05 +02:00
96d87a288f Update Turkish translation 2021-05-26 17:54:05 +02:00
a0d00410ca Update Esperanto translation 2021-05-26 17:54:04 +02:00
445ff856fe Allow user preferences to effect extend_desc 2021-05-24 09:16:58 -07:00
b7fe212a18 Fix youtube API function's documentation 2021-05-24 15:25:00 +02:00
cbabf0ae7e Craft the "context" data in a dedicated function
As the amount of API endpoint function grow, this will
prevent ugly code copy/pasta
2021-05-24 13:44:49 +02:00
344ccf3b03 Use '/youtubei/v1/browse' endpoint for playlists 2021-05-24 13:19:28 +02:00
26a7e1b049 Use '/youtubei/v1/search' endpoint for search queries 2021-05-24 13:19:28 +02:00
43bd331e48 Multiple youtube_api.cr helper fixes
Add documentation
Bump web client version string
Add charset=UTF-8 to the 'content-type' header
Parse JSON and return it as a Hash
Handle API error messages
2021-05-24 13:19:28 +02:00
8bbb016fa4 Only ignore the videojs libraries 2021-05-23 17:59:02 +00:00
ea43ba7124 Only ignore the JS libraries 2021-05-23 17:55:47 +00:00
5a59bd9998 Make the Github Linguist ignore JS files 2021-05-23 16:53:16 +00:00
993d731c92 Merge pull request #2010 from syeopite/360videosupport
Add experimental support for 360° videos
2021-05-23 16:27:47 +00:00
f529948d81 Change videojs-vr to the unminified version 2021-05-23 09:24:49 -07:00
4f3f51c583 Add "Interactive 360 degree videos: " to locales 2021-05-23 09:24:48 -07:00
5ba9a1f87d Fix lint 2021-05-23 09:22:37 -07:00
a0fb75efcb Add licence for videojs-vr 2021-05-23 09:22:37 -07:00
6e6f4d5a37 Allow configurable support of interactive 360 vid 2021-05-23 09:22:37 -07:00
f06053b1cf Fix projection settings for VR 2021-05-23 09:22:37 -07:00
df0cd30236 Add support for VR videos through videojs-vr 2021-05-23 09:22:29 -07:00
8806c57c63 Merge pull request #2077 from watchingdogs/patch-2
Update hu-HU.json
2021-05-22 14:10:39 +02:00
f66cfa1299 Merge branch 'master' into patch-2 2021-05-22 14:10:09 +02:00
9e84a4dbab Translations update from Weblate (#2068)
* Update German translation

* Update French translation

* Update Italian translation

* Update Norwegian Bokmål translation

* Update Arabic translation

* Update Spanish translation

* Update Esperanto translation

* Update Turkish translation

* Update Chinese (Traditional) translation

* Update Japanese translation

* Update Croatian translation

* Update Norwegian Bokmål translation

* Update Japanese translation

* Update Portuguese (Brazil) translation

* Update Swedish translation

* Update Czech translation

* Update Czech translation

* Update Czech translation

* Fix some changes made to the french translation

Co-authored-by: J. Lavoie <j.lavoie@net-c.ca>
Co-authored-by: Deleted User <noreply+31557@weblate.org>
Co-authored-by: zer0-x <zer0_@tutanota.com>
Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
Co-authored-by: phlostically <phlostically@mailinator.com>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
Co-authored-by: GnuPGを使うべきだ <dieeeazpnnqbpddh@cock.email>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
Co-authored-by: Daniel de Souza Melo <jxzk@protonmail.com>
Co-authored-by: Luna Jernberg <droidbittin@gmail.com>
Co-authored-by: paaton <paatzondrej@gmail.com>
Co-authored-by: Jan Myler <weblate@jm24.4wrd.cc>
Co-authored-by: TheFrenchGhosty <47571719+TheFrenchGhosty@users.noreply.github.com>
2021-05-22 14:09:21 +02:00
59ab066518 Merge pull request #2110 from unixfox/fix-likes-comments
Fix the parsing of likes in the comments
2021-05-22 00:11:31 +02:00
960bd2a6be fix likes parsing 2021-05-21 23:16:48 +02:00
2cdaef1371 Merge pull request #2101 from iv-org/remove-freenode
Remove freenode
2021-05-21 18:05:35 +02:00
9b6c5c08d8 Remove freenode
Reasons can be found in https://libera.chat/news/welcome-to-libera-chat
2021-05-20 17:43:59 +02:00
268ce4fefc Update shard.lock with the new URL 2021-05-14 19:57:54 +02:00
bca8dace80 Update shard.yml with the new URL 2021-05-14 19:57:28 +02:00
75e5b49c3a Merge pull request #2008 from syeopite/mobile-ui
Improve player controls for mobile devices
2021-05-13 10:33:47 +02:00
3cf08dc451 Merge pull request #2052 from Myzel394/patch-1
Add autofocus attribute to search input
2021-05-13 10:32:38 +02:00
76c9cf62ff Merge pull request #1995 from syeopite/watch-on-invidious
Add watch on Invidious button to embeds
2021-05-13 10:32:02 +02:00
7a93af1786 Merge pull request #2072 from Maykin-99/revert-2062-patch-1
Revert "Set correct permissions in Dockerfile"
2021-05-13 10:29:45 +02:00
6f899d998f Merge pull request #1968 from syeopite/iss677
Add ability to expand/collapse description.
2021-05-13 10:26:38 +02:00
73da8463ca Merge pull request #1953 from syeopite/fix1673
Update regex expressions to handle unexpected '};'
2021-05-13 10:24:44 +02:00
b38fab9738 Update hu-HU.json
updated the translations so they don't feel like a machine made them
2021-05-13 00:09:53 +02:00
45e4d64b20 Update hu-HU.json
Fixed a typo
2021-05-12 23:53:18 +02:00
e6fba5d802 Fix locale discrepancy for extend desc feature 2021-05-10 00:34:34 -07:00
50ba3c5d5c Remove unused class attr on label 2021-05-10 00:26:43 -07:00
65663fb857 Update code to reflect 'read more' btn name change 2021-05-10 00:26:42 -07:00
8df2f38d34 Change wording of 'read more/less' & add to locale 2021-05-10 00:25:22 -07:00
c5fae84263 Add functionality to read more button 2021-05-10 00:25:20 -07:00
533d0a1fd4 Added "Read More" button for video descriptions 2021-05-10 00:24:11 -07:00
a0fe229c7a make assets, config and locales readable only 2021-05-09 10:29:06 +00:00
f876cd5a6a Revert "Set correct permissions in Dockerfile" 2021-05-09 10:26:08 +00:00
62e9e9a662 Merge pull request #2062 from Maykin-99/patch-1
Set correct permissions in Dockerfile
2021-05-09 11:33:56 +02:00
a51c5c3ae7 Merge pull request #2063 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-05-06 13:32:13 +02:00
26636eda0d Update Hebrew translation 2021-05-05 13:27:35 +02:00
074df7637b Set correct permissions in Dockerfile
When having a `umask` of `xx7` (e.g. `027`) on the host machine then the directories `assets`, `config` and `locales` don't become readable to the `invidious` user inside the Docker container since the `COPY` commands result in files owned by `root` with the same file permissions like on the host (`640` in my case).

By adding `--chown=invidious` to the `COPY` command we ensure the `invidious` user can read these files.
2021-05-05 08:16:11 +00:00
4fc8905ebf Merge pull request #2061 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-05-04 19:38:50 +02:00
8cbb2278a7 Update Danish translation 2021-05-04 15:22:54 +02:00
fe7f8c3c3a Update Indonesian translation 2021-05-04 15:22:53 +02:00
91430738e7 Update French translation 2021-05-04 15:22:51 +02:00
d6585d7583 Overhaul Invidious's "Youtube" player style 2021-05-03 04:22:17 -07:00
1924d75c2b Improve mobile user interface for video player 2021-05-03 03:44:33 -07:00
06b27d932d Move player styling to separate file 2021-05-03 03:44:33 -07:00
ac1ac2cfed Add mobile-ui js to licenses 2021-05-03 03:44:33 -07:00
53cdb04be7 Improve mobile ux with videojs-mobile-ui 2021-05-03 03:44:33 -07:00
c106de02e9 Added autofocus attribute to search input
Since the main action of this form is to search something, the input should automatically be focused.
2021-04-30 15:12:36 +02:00
8bc91ced4f Merge pull request #2048 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-04-29 11:21:38 +00:00
2d0b9597cc Update Croatian translation 2021-04-29 09:42:12 +02:00
b92fbb893b Update Chinese (Traditional) translation 2021-04-29 09:42:11 +02:00
957a40df1f Update Turkish translation 2021-04-29 09:42:11 +02:00
1eea5b350d Update Esperanto translation 2021-04-29 09:42:10 +02:00
c8e7080d1d Update Spanish translation 2021-04-29 09:42:09 +02:00
629d0e441f Update French translation 2021-04-29 09:42:08 +02:00
5cfb878131 Update Russian translation 2021-04-29 09:42:08 +02:00
bfd02ac13d Merge pull request #2033 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-04-21 16:07:58 +00:00
bd50bb1aa4 Update French translation 2021-04-21 17:55:41 +02:00
1045062147 Merge pull request #2030 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-04-21 14:31:17 +00:00
492def3b76 Update Hebrew translation 2021-04-21 16:27:38 +02:00
afde9ac8a3 Update Esperanto translation 2021-04-21 16:27:38 +02:00
d977258c6c Update Spanish translation 2021-04-21 16:27:38 +02:00
62943f8803 Update French translation 2021-04-21 16:27:38 +02:00
22e0859538 Merge pull request #1920 from SamantazFox/test-locales-consistency
Test & fix locales consistency
2021-04-21 14:27:33 +00:00
2c47ef31c0 Add newline at end of file for 'el' and 'zh-TW' 2021-04-21 16:22:20 +02:00
d69b9f9cf8 Minor fixes in locales after synchronization 2021-04-21 16:11:39 +02:00
a52e9be3e8 Add missing fields to locales (part 6)
Updated da.json     (Danish)
Updated de.json     (German)
Updated eo.json     (Esperando)
Updated es.json     (Spanigh)
Updated nb-NO.json  (Norvegian)
Updated nl.json     (Dutch)
Updated pl.json     (Polish)
Updated pt-BR.json  (Portuguese, Brasil)
Updated ro.json     (Romanian)
Updated ru.json     (Russian)
Updated sv-SE.json  (Swedish)
Updated uk.json     (Ukrainian)
Updated zh-CN.json  (Chinese, China)
2021-04-21 16:11:00 +02:00
21f9141500 Add missing fields to locales (part 5)
* Also includes minor fixes when I could (french, italian, icelandic)
* Added a new line at the end of en-US translation.

Updated ar.json     (Arabic)
Updated el.json     (Greek)
Updated fa.json     (Persian)
Updated fr.json     (French)
Updated is.json     (Icelandic)
Updated it.json     (Italian)
Updated tr.json     (Turkish)
Updated zh-TW.json  (Chinese, Taiwan)
2021-04-21 16:11:00 +02:00
0e000e44aa Make the linter happy, again 2021-04-21 16:10:25 +02:00
ad9fe3be09 Add missing fields to locales (part 4)
Updated el.json     (Greek)
Updated fa.json     (Persian)
Updated fi.json     (Finnish)
Updated it.json     (Italian)
Updated pt-PT.json  (Portuguese, Portugal)
Updated zh-TW.json  (Chinese, Taiwan)
2021-04-21 16:10:25 +02:00
3829bdf198 Add missing fields to locales (part 3)
Updated el.json     (Greek)
Updated fa.json     (Persian)
Updated fi.json     (Finnish)
Updated it.json     (Italian)
Updated pt-PT.json  (Portuguese, Portugal)
Updated sv-SE.json  (Swedish)
Updated tr.json     (Turkish)
Updated uk.json     (Ukrainian)
Updated zh-CN.json  (Chinese, China)
Updated zh-TW.json  (Chinese, Taiwan)
2021-04-21 16:10:25 +02:00
6933a049b1 Add missing fields to locales (part 2)
Updated ja.json    (Japanese)
Updated nb-NO.json (Norwegian Bokmål)
Updated nl.json    (Dutch)
Updated pl.json    (Polish)
Updated pt-BR.json (Portuguese, Brazil)
Updated ro.json    (Romanian)
Updated ru.json    (Russian)
2021-04-21 16:10:25 +02:00
e3544bf4bc Add missing fields to locales (part 1)
Updated ar.json (Arabic)
Updated de.json (German)
Updated eo.json (Esperanto)
Updated es.json (Spanish)
Updated fr.json (French)
Updated hr.json (Hungarian)
Updated id.json (Indonesian)
Updated is.json (Icelandic)
2021-04-21 16:10:25 +02:00
d5d0cb6a0c Add spec (test case) for locale files consistency 2021-04-21 16:10:25 +02:00
cac5f20a28 Move locales definition to i18n.cr 2021-04-21 16:10:25 +02:00
beea32661a Merge pull request #1975 from tenpura-shrimp/disablequic
add option to disable quic
2021-04-17 17:59:16 +00:00
b9e57d0283 Merge pull request #1977 from syeopite/add996
Change empty home page to search engine like layout
2021-04-17 17:02:47 +00:00
5c0458a887 Move navbar search bar render check to templated 2021-04-17 05:18:58 -07:00
65942cd46c Rename empty.ecr to search_homepage.ecr 2021-04-17 05:16:35 -07:00
9a8f1a0b0a add option to disable quic 2021-04-14 12:03:31 -04:00
edb37c95e1 Merge pull request #2011 from syeopite/video-alias-url-params
Preserve url params in video route aliases
2021-04-13 18:07:13 +00:00
896882958d Merge pull request #2003 from 138138138/master
Fix iOS 12.5.2 Layout
2021-04-13 18:05:46 +00:00
45d687c4e1 Preserve url params in video aliases 2021-04-11 22:09:46 -07:00
42be1321b2 Merge pull request #2006 from namazso/patch-1
Fix statistics misreporting register allow state
2021-04-10 17:02:17 +00:00
f2cc16009f Fix statistics misreporting register allow state 2021-04-10 18:52:07 +02:00
4336a55c2e Update default.css 2021-04-09 23:29:18 +09:00
bc5c0f65b8 Add watch on Invidious button to embeds 2021-04-08 04:15:15 -07:00
b7eba3bc17 Merge pull request #1961 from SamantazFox/fix-thumbnails-url
Fix API giving ytimg instead of instance URLs for thumbnails
2021-04-08 11:14:36 +02:00
661d715446 Merge pull request #1942 from syeopite/1736
Add multiple video route aliases.
2021-04-08 11:08:25 +02:00
d2c166243b Merge pull request #1991 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-04-08 06:25:14 +00:00
5ed5eabbfe Update Danish translation 2021-04-08 08:24:47 +02:00
18b4b141d9 Merge pull request #1990 from SamantazFox/patch-1
Fix for issue #1989
2021-04-08 06:24:44 +00:00
cd1e478b95 Merge pull request #1976 from syeopite/fixfooter
Fix footer position to bottom of page
2021-04-08 06:23:19 +00:00
cf0ecaaf41 Translate 'Search' page & fix locale discrepancy 2021-04-07 22:32:56 -07:00
5f466eed79 Rename default_home option 'none' to 'Search' 2021-04-07 19:36:40 -07:00
93198438b8 Fix for issue #1989
Fixes #1989
2021-04-07 15:13:41 +02:00
1057d0eaa6 Fix response design on search homepage 2021-04-07 01:44:03 -07:00
73b1284234 Fix search-widget styling for change in #1976 2021-04-07 00:16:14 -07:00
5f2e87f0e3 Fix rendering of hr element 2021-04-07 00:09:38 -07:00
d9528f5cc3 Change positioning of footer to use flexbox 2021-04-06 23:53:38 -07:00
877bb5c821 Add aliases for watch route 2021-04-06 20:36:23 -07:00
ae353cef2e Merge pull request #1974 from syeopite/fix1562
Fix channel info extract for video game channels
2021-04-06 15:49:11 +00:00
909606826d Change footer div into footer element 2021-04-06 04:15:08 -07:00
e6e2d51b58 Improve search widget margins 2021-04-05 20:42:04 -07:00
ea16c01fa2 Fix mobile responsive design for footer 2021-04-05 20:24:02 -07:00
f20d420aa7 Merge pull request #1980 from syeopite/fix1625
Allow default_home config to be an empty string
2021-04-05 14:44:16 +00:00
a8649f286c Handle nil type for default_homepage 2021-04-04 17:19:31 -07:00
fe879e6d94 Fix missing colon in empty.css 2021-04-04 17:17:59 -07:00
94f285695e Add missing closing div element 2021-04-04 16:10:27 -07:00
428747ab69 Allow default_home config to be empty value 2021-04-04 15:20:08 -07:00
049e8e07ef Fix footer position to bottom of page 2021-04-04 02:45:38 -07:00
716a845e92 Fix missing navbar search bar 2021-04-04 02:26:07 -07:00
47dfd4e681 Scale text logo on search engine like homepage 2021-04-04 02:26:01 -07:00
555108c7fd Add styling to search bar on empty home page 2021-04-04 00:48:14 -07:00
e1af3d9bf3 Add html of search bar to empty home page 2021-04-03 23:26:58 -07:00
e864c7541c Hide header search bar when default_home is empty 2021-04-03 21:32:30 -07:00
b4a6cbbd09 Merge info extract functions back to one 2021-04-03 20:54:10 -07:00
fe4eef5855 Fix channel info extract for 'video game' channels 2021-04-03 20:26:38 -07:00
c0997f951c Merge pull request #1929 from Svallinn/channel_playlist_fix
Fix channels' playlists fetching
2021-04-03 21:21:42 +00:00
cb378c1754 Merge pull request #1973 from syeopite/fixcomments
Preserve all original cookies when adding the consent cookie.
2021-04-03 09:40:25 +00:00
20b961c1c8 Preserve original cookies 2021-04-02 17:08:55 -07:00
c4c2e01213 Merge pull request #1922 from Svallinn/search_api_fixes
Fix channels' search API
2021-04-02 05:53:41 +00:00
4b6d0fb517 Merge pull request #1967 from SamantazFox/fix-long-playlists-2
Fix missing last page in playlists
2021-04-01 19:51:33 +00:00
62e46b7a36 Fix missing last page in playlists 2021-04-01 18:46:49 +00:00
052c5c67b8 Merge pull request #1960 from syeopite/fix1959
Add new YT consent cookie to every request
2021-04-01 16:07:07 +00:00
b794c5cfcf Set the request cookie to "YES+" 2021-04-01 15:59:24 +00:00
be8a4013a7 Merge pull request #1945 from syeopite/trending-api-fix
Fix Trending API
2021-04-01 10:22:46 +00:00
87c25f83a4 Fix API giving ytimg instead of instance URLs for thumbnails 2021-04-01 02:36:35 +02:00
e08bea5f51 Fix lint 2021-03-31 15:34:29 -07:00
739f610507 Add new YT consent cookie to every request 2021-03-31 14:57:00 -07:00
608313c1d1 Update regex expressions to handle unexpected '};' 2021-03-29 17:37:12 -07:00
2c1cf42994 Merge pull request #1937 from syeopite/smallfilteruifix
Prevent filtering options from jumping above its drop down menu.
2021-03-28 16:18:27 +00:00
196db1e1d0 Merge pull request #1939 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-03-28 16:17:46 +00:00
a2f5435c48 Update Serbian translation 2021-03-28 18:15:25 +02:00
75ec0b4fcf Add Serbian translation 2021-03-28 18:15:25 +02:00
b4bfe27786 Update Danish translation 2021-03-28 18:15:25 +02:00
7617382114 Update Bengali (Bangladesh) translation 2021-03-28 18:15:25 +02:00
b2f67cb154 Update Serbian (cyrillic) translation 2021-03-28 18:15:25 +02:00
c5107ddd3d Merge pull request #1938 from tenpura-shrimp/fixcommentsextractcursor
remove comments extract cursor
2021-03-28 16:15:20 +00:00
8b75590d3e Remove news trending section from ui 2021-03-28 01:25:04 -07:00
a7624d4724 Fix trending API 2021-03-27 22:48:43 -07:00
b3099001be Fix minor scaling issue in filter drop down.
Basically prevents filter content from jumping above the dropbox when there's
enough space to do
2021-03-26 13:51:22 -07:00
533c6cefee Merge pull request #1927 from syeopite/add-link-to-yt
Add "Watch on Youtube" button next to audio mode Icon.
2021-03-26 17:23:00 +00:00
acfa9e8a55 Parse responses to JSON instead of using regex 2021-03-26 04:17:46 +00:00
8823753b46 Remove commented line 2021-03-26 03:54:10 +00:00
c5ccefe6f7 Parse response to JSON instead of using regex 2021-03-26 03:52:28 +00:00
148071a744 Add 'www' to URL on watch on youtube button 2021-03-25 11:24:02 -07:00
56fab9d178 Add watch on youtube button on each video item 2021-03-24 18:34:06 -07:00
f422a77014 Add translation to Audio Mode icon on vid result 2021-03-24 18:07:18 -07:00
e248e7ebaf Remove unused function and related test 2021-03-24 05:35:26 +00:00
aa4c623a06 Add deprecation note 2021-03-24 05:34:23 +00:00
cbdba66ef3 Use the youtubei API over the legacy one 2021-03-24 05:33:45 +00:00
d652ab9920 Modify spec file 2021-03-24 05:15:30 +00:00
e49aaa0216 Fix channel search API 2021-03-24 05:15:06 +00:00
61d49a1215 remove comments extract cursor 2021-03-24 00:08:58 -04:00
c481ca924b Merge pull request #1911 from SamantazFox/fix-long-playlists
Fix long playlists (100+ videos)
2021-03-23 18:07:01 +00:00
23e5b6ba72 Remove extra 'next page' button at then end of a playlist 2021-03-23 02:25:47 +00:00
3e88b72316 Remove useless parameter 'youtubei_browse' in get_channel_videos_response() 2021-03-22 18:53:17 +01:00
7566243151 Merge pull request #1901 from tenpura-shrimp/commentreplies
fix comment replies
2021-03-22 14:52:51 +00:00
aaefa38602 Make the linter happy 2021-03-21 16:05:50 +01:00
de6db4141f Fix produce_playlist_continuation checks in spec/helpers_spec.cr 2021-03-21 15:57:41 +01:00
a61735e29a Print detailed error message when playlist can't be retrieved 2021-03-21 15:47:51 +01:00
9bdfb0a32b Playlist: Support edge case where 'content' in JSON may be erroneously plural 2021-03-21 15:47:44 +01:00
94ecd29e35 Make use of youtube API helper in src/invidious/channels.cr 2021-03-21 15:47:26 +01:00
980f5f1299 Playlist: Fix video continuation (100+ videos playlists) 2021-03-21 15:47:03 +01:00
f99d62a2bc Create youtube API wrapper fo /youtubei/v1/browse 2021-03-21 15:44:18 +01:00
89be1975ea Playlist: Fix continuation token generation 2021-03-21 15:43:49 +01:00
fec82df451 Fix fetching of large playlist 2021-03-21 00:15:39 +01:00
89fd35e02d fix comment replies 2021-03-20 00:43:12 -04:00
3286328de4 Merge pull request #1837 from syeopite/master
Enhance search filter UI for JS disabled users
2021-03-19 20:32:27 +00:00
977c34c0d7 Remove unused script element in search.ecr 2021-03-19 11:33:27 -07:00
5ec23df460 Merge pull request #1899 from Svallinn/master
Fix: functional hl / dark_mode / thin_mode params
2021-03-19 17:34:46 +00:00
7f307e3bea Merge pull request #1893 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-03-18 23:17:43 +00:00
fa050fb8a8 Fix: functional hl / dark_mode / thin_mode params 2021-03-17 19:09:37 +00:00
d741cbf6fd Update Czech translation 2021-03-17 19:02:11 +01:00
fa09327403 Add Czech translation 2021-03-17 19:02:11 +01:00
e27aaf9ba1 Merge pull request #1897 from iv-org/fix-container-build
Add yaml-static as build dependency
2021-03-17 19:02:07 +01:00
c0063ea09b Add yaml-static as build dependency 2021-03-17 18:59:02 +01:00
e3e07aa3e6 Merge pull request #1881 from SamantazFox/fix-descriptions
Fix video/playlist descriptions
2021-03-17 16:54:05 +00:00
502e8daedd Merge pull request #1889 from unixfox/fix-memory-invalid
Revert "Bump dependencies"
2021-03-13 21:34:49 +00:00
3035f0119f Revert "Bump dependencies"
This reverts commit abe283b38e.
2021-03-13 22:14:27 +01:00
48a3c3a0c1 Add hover state to filter UI 2021-03-13 10:57:27 -08:00
fab9ae64a0 Remove duplicate styling code 2021-03-13 10:55:12 -08:00
b56ebd13b6 Fix indent in search.ecr for filters 2021-03-13 09:14:55 -08:00
3de39698dd Make the build tests happy: remove blank lines 2021-03-11 03:46:17 +00:00
b86476410f playlists: Fix description being simple text (issue #1767) 2021-03-11 00:44:35 +00:00
57ea45ff51 content_to_comment_html: Fix /watch links + make newline replace universal 2021-03-11 00:42:13 +00:00
ec30f7c5d4 Merge pull request #1849 from saltycrys/channels
WIP channels fix
2021-03-06 10:06:20 +01:00
3cc9114f81 Merge pull request #1829 from SimonPhoenix96/xml-json-yt-sub-import
integrate legacy yt xml subscription import with new json sub import
2021-03-05 01:01:32 +01:00
790167e914 Merge pull request #1832 from mark9064/patch-1
Fix engagement
2021-03-05 01:00:42 +01:00
9687d432fd Merge pull request #1848 from saltycrys/lsquic-v2.23.1
Bump dependencies
2021-03-03 23:28:29 +01:00
378c0d049e WIP channels fix 2021-03-03 22:21:29 +01:00
abe283b38e Bump dependencies 2021-03-03 08:34:31 +01:00
3af42079e0 Merge pull request #1830 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-03-02 19:07:17 +01:00
eb4843649c Update Sinhala translation 2021-03-02 18:41:15 +01:00
9432efeba5 Update Norwegian Bokmål translation 2021-03-02 18:41:15 +01:00
4a3ed75ae5 Add Sinhala translation 2021-03-02 18:41:15 +01:00
fc8c555519 Merge pull request #1729 from Rjevski/12factor-database-url-restored
Support "Database URL" in addition to existing DB-related parameters
2021-03-02 18:41:10 +01:00
44f30c0e05 Merge pull request #1817 from tenpura-shrimp/master
fix search
2021-03-01 22:02:37 +00:00
83b5fd252e Enhance search filter UI for JS disabled users
Change filters UI box to use <details>.

Stylize detail button for filter ui

Fix localization for 'filter'

Fix CSS

Fix styling
2021-03-01 03:45:07 -08:00
9ae18b0b3b Fix engagement
Engagement was calculated as 0-1 but displayed as a percentage
2021-02-28 11:59:46 +00:00
84487b2e52 format invidious.cr using crystal cli 2021-02-27 21:59:09 +01:00
9689376de6 fixed line indent typo 2021-02-27 19:12:01 +01:00
a2f79a163f integrate legacy yt xml subscription import with new json sub import 2021-02-27 18:58:55 +01:00
489d0151ad Merge pull request #1735 from 138138138/patch-1
iOS audio mode double duration fix
2021-02-26 19:59:23 +01:00
bcb44ab600 Merge branch 'master' into patch-1 2021-02-26 19:59:16 +01:00
1a78bb4b58 Use instances.invidious.io 2021-02-26 14:25:20 +00:00
2600695927 fix search
Put search page in the super secret proto field
2021-02-25 22:19:22 -05:00
705e4fca06 Merge pull request #1797 from B0pol/published_utc
Use UTC for published date
2021-02-25 17:57:02 +01:00
a4ba4cf6ce Merge pull request #1795 from B0pol/comments
Fix comment replies count
2021-02-25 17:56:30 +01:00
0b2109576a Merge pull request #1804 from tenpura-shrimp/captionpreload
do not preload captions
2021-02-25 17:54:28 +01:00
c8cdc50d29 Merge pull request #1808 from tenpura-shrimp/showstreamstart
show how long ago stream started
2021-02-25 17:53:51 +01:00
b29e60a97a Merge pull request #1807 from TheFrenchGhosty/enhance-readme
Massively enhance the README
2021-02-25 12:19:38 +01:00
209a986fe4 Typo
Co-authored-by: Perflyst <mail@perflyst.de>
2021-02-25 12:18:47 +01:00
295e5c9731 show how long ago stream started 2021-02-24 23:08:04 -05:00
08c93e94e4 Remove Lapis-Tube since it's dead, and update the Cloudtube link 2021-02-25 00:57:09 +01:00
ec28e9fb27 Enhance more stuff, again 2021-02-25 00:48:20 +01:00
7081e8a226 Link to docs.invidious.io more 2021-02-25 00:39:07 +01:00
01a2383d7b Enhance more stuff 2021-02-25 00:30:44 +01:00
903b569f6c Massively enhance the README 2021-02-25 00:20:19 +01:00
9b79e35d52 do not preload captions 2021-02-24 01:02:55 -05:00
237100da18 Use UTC for published date 2021-02-21 12:35:21 +01:00
1e33c0c288 Fix comment replies count 2021-02-21 00:09:04 +01:00
cbc7603248 Merge pull request #1793 from iv-org/revert-1790-bump-dependencies
Revert "Bump dependencies"
2021-02-20 19:08:25 +01:00
8d53f3abb8 Revert "Bump dependencies" 2021-02-20 19:08:13 +01:00
2dcfec2639 Merge pull request #1790 from saltycrys/bump-dependencies
Bump dependencies
2021-02-20 03:02:47 +01:00
dacb1a70ee Bump dependencies 2021-02-20 02:58:35 +01:00
93200c00f2 Merge pull request #1781 from 138138138/player-speed-adjustment
Skip duration multiply by playback rate
2021-02-18 12:12:51 +00:00
3b484c362e Skip duration multiply by playback rate
Fast Forward/Backward like YouTube. The skip duration is multiplied by playback rate.
2021-02-17 21:33:26 +08:00
fbee9fe51e Merge pull request #1766 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-02-14 19:38:04 +00:00
c451aab150 Enable the Hebrew translation since it's now translated at more than 80% 2021-02-14 19:37:46 +00:00
48bff9a5d2 Enable the Indonesian translation since it's now translated at more than 80% 2021-02-14 19:35:05 +00:00
db36d80669 Update Indonesian translation 2021-02-14 13:26:07 +01:00
6c8d3232a0 Update Finnish translation 2021-02-14 13:26:07 +01:00
e6418fe79b Merge pull request #1776 from gripped/crystalversion
Update README.md
2021-02-14 13:26:02 +01:00
34a0bb04f7 Update README.md
Ubuntu / Debian instructions installing an old version of Crystal.
2021-02-14 10:23:16 +00:00
28302c82a3 Merge pull request #1759 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-02-11 14:33:37 +00:00
5025c40ab2 Update Hebrew translation 2021-02-11 14:50:24 +01:00
6fdd30d97f Merge pull request #1757 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-02-11 13:45:21 +00:00
b7c000e435 Update Hebrew translation 2021-02-10 13:41:43 +01:00
5ef2bbe5d6 Add Hebrew translation (#1753)
* Add Hebrew translation

* Update he.json

* Update he.json

* Update he.json

* Update he.json

* Update he.json

* Update he.json

* Update he.json

* Update he.json

Co-authored-by: TheFrenchGhosty <47571719+TheFrenchGhosty@users.noreply.github.com>
2021-02-10 00:33:23 +00:00
e1d37c3b98 Merge pull request #1750 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-02-10 00:27:32 +00:00
ec475e5783 Update Finnish translation 2021-02-10 01:12:44 +01:00
c4b67b4cae Add Hebrew translation 2021-02-10 01:12:44 +01:00
b2cfebcce2 Merge pull request #1754 from saltycrys/fix-various-artists-playlist
Fix playlists with `Various Artists` author
2021-02-10 01:12:40 +01:00
2bf445e165 Fix playlists with Various Artists author 2021-02-10 01:04:27 +01:00
121224b1b0 Fix ; () {} 2021-02-10 01:05:29 +08:00
55ce1ce3ec Merge pull request #1724 from iv-org/add-issue-templates
Add issue templates
2021-02-09 12:21:34 +00:00
2b14633047 Split enhancement and feature request, apply suggestions 2021-02-08 16:23:57 +01:00
88042d27ec Merge pull request #1715 from tenpura-shrimp/searchchannelthumbnails
Use large thumbnail for channels in search
2021-02-05 18:34:53 +01:00
148f3002ec use large thumbnail for channels in search 2021-02-04 18:20:49 -05:00
ec82c1f957 Merge pull request #1730 from notpushkin/patch-1
Add link[rel="alternate"] pointing to YouTube version
2021-02-04 07:55:39 +01:00
9919520c28 Merge pull request #1744 from saltycrys/crystal-0.36.1
Bump dependencies and update to Crystal 0.36.1
2021-02-04 05:17:59 +01:00
689795e8bc Update to Crystal 0.36.1 2021-02-04 05:13:29 +01:00
5c8ab35f55 Bump dependencies 2021-02-04 05:11:54 +01:00
ddd7f3f384 Update player.js 2021-02-03 11:50:14 +08:00
c2f74879da Merge pull request #1734 from saltycrys/crystal-0.36.0
Crystal 0.36.0
2021-02-02 21:02:25 +00:00
5311683d43 Update to Crystal 0.36.0
Crystal versions below `0.36.0` are no longer supported.
2021-02-02 20:01:02 +01:00
5f03a583d1 Update code for Crystal 0.36.0
Rename `HTTPClient@socket` to `HTTPClient@io`, see
https://github.com/crystal-lang/crystal/pull/9543.

Rename `URI#full_path` to `URI#request_target`, see
https://github.com/crystal-lang/crystal/pull/10099.
2021-02-02 20:01:02 +01:00
a6970e02f9 Fix double duration on all Apple devices
The fix will be applied when Safari browser is detected.
2021-02-02 21:25:13 +08:00
1f7f013e0a Merge pull request #1738 from saltycrys/adjust-routes
Adjust routes
2021-02-02 06:29:28 +01:00
991a04dc2a Adjust routes
Simple routes have been moved into a single `Misc` file.

Embed routes have been moved into a single `Embed` file.

The preferences route has been renamed to be more consistent with other parts
of the codebase.
2021-02-02 06:18:16 +01:00
685902adab Update player.js
Fixes audio mode duration doubled in iPhone iOS browsers. The player will stop after reaching the real duration. 
iOS() checks both iOS and iPadOS. 
Only tested on iPhone iOS browsers. Testers needed for behavior of iPadOS and MacOS.
2021-02-01 15:59:27 +08:00
26ce0eb4b9 Merge pull request #1733 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-01-31 20:17:07 +00:00
b30db728cc Add suggestions 2021-01-31 13:17:50 +01:00
5eb098b5aa Update Japanese translation 2021-01-31 12:18:45 +01:00
a2995ea03a Update Japanese translation 2021-01-31 12:18:45 +01:00
82da5cfd01 Merge pull request #1712 from tenpura-shrimp/bumpvideojs
Bump videojs and fix webworker
2021-01-31 12:18:40 +01:00
909285ea46 Merge pull request #1732 from saltycrys/unrequire-logger
Unrequire `logger`
2021-01-31 03:48:29 +01:00
a0bc0641c7 Unrequire logger
Crystal's `Logger` was required but never used in Invidious. Crystal 0.36.0
removed `Logger` in favor of `Log`.
2021-01-31 03:33:38 +01:00
e7ada61881 Add link[rel="alternate"] pointing to YouTube version 2021-01-30 23:45:55 +00:00
79e99908de Allow providing 12-Factor-style Database URL in config 2021-01-30 19:33:58 +00:00
f1d7644184 Merge pull request #1727 from TheFrenchGhosty/finish-translation
Enable the Finish translation since it's now translated at more than 80%
2021-01-30 15:45:56 +00:00
5f365927b3 Merge pull request #1721 from weblate/weblate-invidious-translations
Translations update from Weblate
2021-01-30 15:44:05 +00:00
bd893cb24c Enable the Finish translation since it's now translated at more than 80% 2021-01-30 16:42:30 +01:00
e3352c3658 Update Indonesian translation 2021-01-30 14:46:17 +01:00
63d3d6049e Update Finnish translation 2021-01-30 14:46:17 +01:00
668810858d Update Hungarian translation 2021-01-30 14:46:17 +01:00
b7131a5cd5 Update Greek translation 2021-01-30 14:46:17 +01:00
c9a316ad35 Merge pull request #1702 from saltycrys/config
Config improvements
2021-01-30 14:46:10 +01:00
ec8fe21485 Add issue templates 2021-01-30 10:53:25 +01:00
4a0b10984a Bump videojs and fix webworker 2021-01-29 19:08:28 -05:00
69406b00d1 Merge pull request #1714 from tenpura-shrimp/searchchannelthumbnailhttps
Remove HTTPS from channel thumbnail in search
2021-01-29 22:54:27 +00:00
a1f3ae730a Merge pull request #1718 from tenpura-shrimp/cacheshardstest
Fix broken build - install crystal 35.1 in ci
2021-01-29 22:51:39 +00:00
fedaef5d17 install crystal 35.1 in ci 2021-01-29 12:36:19 -05:00
e35345f135 Remove container release on PR 2021-01-28 12:51:34 +01:00
d0dbbd1cb1 remove https from channel thumbnail in search 2021-01-28 00:51:14 -05:00
70e14f92a4 Only start refresh jobs when necessary
If `channel_threads` or `feed_threads` is set to zero the corresponding job is
now not started.
2021-01-23 19:45:42 +01:00
b45f371911 Make config a constant
Instead of passing around `config` there is now the global `CONFIG`.
2021-01-23 19:39:04 +01:00
f1a7ee997b Add config environment variables
The config file can now be specified with `INVIDIOUS_CONFIG_FILE`.
A YAML formatted string can still be passed with `INVIDIOUS_CONFIG`, replacing
the config file.

Additionally all options can now be specified as environment variables.
The syntax for variable names is `INVIDIOUS_` followed by the option name in
upper case. The values are parsed as YAML.

These new env vars only update the provided main configuration, but it is
possible to point the config file at the example config and then use env vars
for all config options:
```
INVIDIOUS_CONFIG_FILE=./config/config.example.yml \
INVIDIOUS_CHANNEL_THREADS=10 \
./invidious
```
2021-01-23 18:58:13 +01:00
51ebec7c13 Merge pull request #1701 from TheFrenchGhosty/french-translation
Change some stuff done to the french translation in #1696
2021-01-23 17:26:31 +00:00
c3ed1ad040 Change some stuff done to the french translation in #1696 2021-01-23 18:22:05 +01:00
85ebf2e484 Merge pull request #1700 from TheFrenchGhosty/translations
Make invidious use all the translation files if they are translated at more than 80%
2021-01-23 17:12:37 +00:00
1996e6afaa Translations update from Weblate (#1696)
* Update German translation

* Add Bengali (Bangladesh) translation

* Update Bengali (Bangladesh) translation

* Update Portuguese (Portugal) translation

* Update Icelandic translation

* Update Bengali (Bangladesh) translation

* Update Bengali (Bangladesh) translation

* Add Catalan translation

* Update Norwegian Bokmål translation

* Add French (Canada) translation

* Update German translation

* Update Polish translation

* Update Dutch translation

* Update French translation

* Update Italian translation

* Update Greek translation

* Update French (Canada) translation

* Update Turkish translation

* Update Norwegian Bokmål translation

* Update Esperanto translation

* Update Esperanto translation

* Add Slovak translation

* Update Slovak translation

* Update Serbian (cyrillic) translation

* Update Slovak translation

* Update Esperanto translation

* Add Persian translation

* Update Persian translation

* Add Kannada translation

* Update Kannada translation

* Update Bengali (Bangladesh) translation

* Update Spanish translation

* Update Portuguese (Brazil) translation

* Update Chinese (Traditional) translation

* Update Swedish translation

* Update Portuguese (Portugal) translation

* Add Finnish translation

* Update Dutch translation

* Update Finnish translation

* Add Indonesian translation

* Add Portuguese translation

* Update Portuguese (Portugal) translation

* Update Indonesian translation

* Update Portuguese translation

* Update Polish translation

* Update Polish translation

* Update Portuguese (Brazil) translation

* Update Chinese (Simplified) translation

* Add Croatian translation

* Update Croatian translation

* Update Norwegian Bokmål translation

* Update Swedish translation

* Update Croatian translation

* Update Japanese translation

* Update Indonesian translation

* Add Danish translation

* Update Bengali (Bangladesh) translation

* Update Danish translation

* Update Chinese (Simplified) translation

* Update French (Canada) translation

* Add Malayalam translation

* Update Swedish translation

* Update Greek translation

* Update Greek translation

* Update Portuguese (Brazil) translation

* Delete Catalan translation

* Delete Malayalam translation

* Delete Kannada translation

* Delete French (Canada) translation

* Delete Portuguese translation

Co-authored-by: Jeannette L <j.lavoie@net-c.ca>
Co-authored-by: Oymate <dhruboadittya96@gmail.com>
Co-authored-by: Paulo Marinho <paulomarinho@protonmail.com>
Co-authored-by: recette-lemon <854qskawygnrtcdo@protonmail.com>
Co-authored-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Co-authored-by: Attila Farkas <farkasattila@ymail.com>
Co-authored-by: bongo bongo <mombatubongo@gmail.com>
Co-authored-by: nathgit <nathronman+github@gmail.com>
Co-authored-by: Kevin Scruff <KevinScruff@protonmail.com>
Co-authored-by: Yogesh <yogesh@karnatakaeducation.org.in>
Co-authored-by: The Cats <philosoph@snopyta.org>
Co-authored-by: FeiYang <feiyang@fyol.xyz>
Co-authored-by: Luna Jernberg <droidbittin@gmail.com>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: Unihuppio <virancannos@protonmail.com>
Co-authored-by: Joachim Opdenakker <opdenakker.joachim@gmail.com>
Co-authored-by: ziasukmana <ziasukmana@hotmail.com>
Co-authored-by: Atrate <Atrate@protonmail.com>
Co-authored-by: Karol Kosek <krkk@krkk.ct8.pl>
Co-authored-by: André Marcelo Alvarenga <andrealvarenga@gmx.net>
Co-authored-by: Eric <spice2wolf@gmail.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Petter Reinholdtsen <pere-weblate@hungry.com>
Co-authored-by: Y. Sakamoto <ysakamoto@tutanota.com>
Co-authored-by: Nimityx <c93c81b9-b581-4651-89fc-a416fd69558e@anonaddy.me>
Co-authored-by: HackerNCoder <hackerncoder@protonmail.ch>
Co-authored-by: vachan-maker <vachan2014carmel@gmail.com>
Co-authored-by: fresh <fresh190@protonmail.com>
Co-authored-by: TheFrenchGhosty <TheFrenchGhosty@posteo.is>
2021-01-23 17:10:51 +00:00
799f97e847 Make invidious use all the translation files 2021-01-23 18:07:55 +01:00
dd2a7f91cc Merge pull request #1691 from StuffNoOneCaresAbout/container-sha
Container sha without 2 builds
2021-01-22 12:42:05 +01:00
c86e9dfc8a build image daily at 0:00 GMT 2021-01-22 16:54:49 +05:30
40a2579821 different steps depending on event. 2021-01-22 09:20:17 +05:30
380b64071e Expire sha images after 6 weeks 2021-01-22 00:03:09 +01:00
5ce0b1c18e Remove image digest output
Does not work with two images at the same time
2021-01-21 23:54:31 +01:00
a00453e151 Build latest only on master, add commit sha tag
Close #1688
2021-01-21 23:51:54 +01:00
a1aa40f500 Fix container build 2021-01-21 07:45:43 +01:00
1ad4685bb7 Merge pull request #1629 from tenpura-shrimp/searchui
Add ui for search sort and filter
2021-01-20 12:56:41 +00:00
d8629e61d6 Merge pull request #1674 from iv-org/container-quay
Add container CI release
2021-01-20 12:44:16 +01:00
d4ddd7204d Rename release.yml to container-release.yml 2021-01-20 12:44:01 +01:00
5f18799d8f Merge pull request #1679 from Rjevski/videojs-dash-safari-bug-workaround
Fix DASH playback bug in Safari
2021-01-19 17:07:33 +01:00
15ba3325d9 add ui for searching 2021-01-17 14:33:49 -05:00
3046350cb2 Fix DASH playback bug. 2021-01-17 14:59:18 +00:00
ffa9e5dfab Make migrations (mostly) idempotent. 2021-01-17 14:20:34 +00:00
8584654f11 Add container CI release 2021-01-16 22:18:22 +01:00
c7e65ce795 Merge pull request #1619 from tenpura-shrimp/ignorevideoplayback
do not add local to xhr when in videoplayback
2021-01-13 10:01:03 +01:00
cc3f019b28 Merge pull request #1658 from jksladjflkjsadflkjsadf/dashmanifesthost
save host when using dash manifest
2021-01-12 17:56:52 +00:00
920785631b Merge pull request #1657 from jksladjflkjsadflkjsadf/fixsetinterval
fix incorrect use of setinterval in js
2021-01-12 13:52:53 +00:00
b7fe1db89a save host when using dash manifest 2021-01-10 18:00:45 -05:00
5a08dfa72f fix incorrect use of setinterval in js 2021-01-10 17:05:08 -05:00
c28b1f6fb9 Merge pull request #1654 from saltycrys/fix-downloads
Fix downloads
2021-01-09 21:17:55 +01:00
c81ca187f8 Fix downloads
The `itag` is now converted to a number, matching the `itag` of
`Video.adaptive_fmts` and `Video.fmt_stream`.
2021-01-09 20:40:01 +01:00
ba148d749f Merge pull request #1647 from hackerncoder/removeOmarrothMentions
Remove omarroth mentions
2021-01-08 13:02:03 +00:00
606dd11b4f Remove admin_email. Use repos url for captcha ID and reddit header. Add note about not updating changelog 2021-01-07 21:09:24 +01:00
e254d2de8e Merge pull request #1645 from saltycrys/fix-pubsub-config
Respect `use_pubsub_feeds` config
2021-01-07 20:55:10 +01:00
b0b8ba7000 Respect use_pubsub_feeds config
Setting `use_pubsub_feeds: false` now properly disables it.
2021-01-07 20:52:32 +01:00
4d512d908d Remove some mentions of omarroth 2021-01-07 19:01:13 +01:00
168376b046 Merge pull request #1636 from saltycrys/rework-logging
Rework logging
2021-01-06 16:09:32 +01:00
df9e7f284c Adjust log verbosity
The default log level has been changed from `debug` to `info`.
The `debug` log level is now more verbose. `debug` now gives a general overview
of what is happening (where implemented) while `trace` gives all available
details.
2021-01-05 20:51:18 +01:00
6365ee7487 Make logger a constant
Instead of passing around `logger` there is now the global `LOGGER`.
2021-01-05 20:43:19 +01:00
7a8620a570 Add CLI arguments to config file
The log level can now be set with `log_level` (accepts ints and strings).
The log file can now be set with `output` (also accepts `STDOUT`).
2021-01-05 20:35:59 +01:00
2c24bf3222 Merge pull request #1389 from vhuynh3000/decrypt_on_demand
add config to decrypt on demand instead of polling
2021-01-05 19:32:22 +01:00
e036d89a86 Merge pull request #1633 from saltycrys/fix-watch_videos
Fix `watch_videos` endpoint
2021-01-04 06:03:22 +01:00
36e9fb9d68 Fix watch_videos endpoint
Playlists created by `watch_videos` do not have an author which caused a crash
previously.
2021-01-04 05:35:59 +01:00
8b56a038b7 Set content type for HTML error helpers
This fixes `Unexpected char '<' at 1:1` errors caused by content type mismatch.
2021-01-04 05:24:08 +01:00
d5f0e23e29 Merge pull request #1631 from saltycrys/lsquic-static-alpine
Download liblsquic.a from iv-org/liblsquic-static-alpine
2021-01-03 23:06:00 +00:00
3a2bd4e928 add config to decrypt on demand instead of polling 2021-01-03 20:50:52 +01:00
c5136ca4d6 Download liblsquic.a from iv-org/liblsquic-static-alpine
This only affects Docker installs.
Regular builds still use the binary shipped with `lsquic.cr`.
2021-01-03 19:23:54 +01:00
28dac81a90 Merge pull request #999 from notpushkin/patch-1
Add audio mode link to items
2021-01-03 13:58:23 +01:00
c89632d2a8 Merge pull request #1608 from saltycrys/add-subscription-traces
Add Subscription Traces
2020-12-31 11:30:04 +01:00
82c8f3b556 Merge pull request #1600 from jksladjflkjsadflkjsadf/closeclients
Close http clients after use
2020-12-30 01:14:31 +00:00
29278ff916 Merge pull request #1620 from B0pol/community
fix channel/ID/community endpoint
2020-12-30 01:13:17 +00:00
608b9e66f4 fix channel/ID/community endpoint
fixes https://github.com/iv-org/invidious/issues/1611
2020-12-30 01:09:39 +01:00
ac0ed14eae do not add local to xhr when in videoplayback 2020-12-29 17:58:24 -05:00
a06dfaf82a Merge pull request #1618 from saltycrys/fix-video-mode-button
Fix Video Mode Button
2020-12-29 13:55:19 +00:00
dfd5e30015 Fix Video Mode Button
The query params that get edited for `embed_params` are now deep copied instead
of shallow copied, preventing the originals from being changed.
2020-12-29 01:22:56 +01:00
b19524d56a Merge pull request #1609 from saltycrys/add-popular-enabled-option
Add `popular-enabled` option
2020-12-28 11:30:55 +01:00
e0d25ff887 Close http clients after using
The crystal http client maintains a keepalive connection to the other
server which stays alive for some time. This should be closed if the
client instance is not used again to avoid hogging resources
2020-12-27 19:40:58 -05:00
198dfffaeb Add popular-enabled option
This is similar to the removed `top-enabled` option but for the Popular feed.
The instance needs to be restarted if the feed was enabled.

Editing admin options on the preferences page is also fixed.

The handling of the feed pages now only happens in a single place.

Instead of redirecting:
  - The Top feed now displays a message that it was removed from Invidious.
  - The Popular feed now displays a message that it was disabled if it was.
2020-12-27 06:12:43 +01:00
c4ef055248 Add RefreshChannelsJob traces
Traces can be enabled with `-l trace`.

The problem with subscriptions is that sometimes requests to YouTube never
finish. As soon as that happens `channel-threads` times subscriptions stop
being refreshed. This is most likely a problem with the lsquick bindings.
2020-12-27 05:20:33 +01:00
420ceffbb0 Rename threads to fibers
The config and command line options haven't been changed.
2020-12-27 05:14:33 +01:00
eeeecf9763 Merge pull request #1572 from saltycrys/add-dash-quality-preference
Add DASH quality preference
2020-12-23 20:36:13 +01:00
8df591e8d4 Merge pull request #1595 from saltycrys/improve-storyboards
Improve storyboards
2020-12-23 14:30:10 +01:00
702ed5bfa8 Merge pull request #1594 from saltycrys/improve-logging
Improve logging
2020-12-23 14:29:27 +01:00
75c6844b66 Improve storyboards
Instead of limiting the width of storyboards through CSS it is now done in the
VTT directly.
2020-12-21 17:02:36 +01:00
b39f01dcdf Improve logging
Everything that gets logged now has a log level associated with it.

The log level can be set with the new `-l` or `--log-level` arguments.

The defaul log level is `debug` for now. There aren't many things that get
logged but if the logs get spammed in the future it can be set down to `info`.
2020-12-21 16:32:34 +01:00
dba7dc4e96 Merge pull request #1592 from saltycrys/remove-top-feed-option
Remove "Top" feed option from preferences
2020-12-19 19:56:11 +00:00
ef96a50cea Remove "Top" feed option from preferences
The Top feed used to be a feed based on YouTube ratings. Once YouTube removed
publicly available ratings the Top feed was removed from Invidious but the
option to display a link to it remained.
2020-12-19 19:30:42 +01:00
eed78c960d Improve DASH quality preference
Besides `auto`, `best` and `worst` it is now possible to select a target height.
If the target height is not available the closest lower height is selected.
2020-12-19 18:37:41 +01:00
eea7ca9b72 Add DASH quality preference
The options are `auto` (the current and default behavior), `best` and `worst`.

The UI is only updated once playback starts.
2020-12-19 18:37:30 +01:00
c7c732ebc0 Merge pull request #1584 from matthewmcgarvey/user-preferences
Extract out User Preferences endpoints
2020-12-16 08:08:58 +00:00
fb06482916 Extract out User Preferences endpoints 2020-12-15 18:54:30 -06:00
1bb24efbbc Merge pull request #1580 from saltycrys/css-improvements
Css improvements
2020-12-15 20:32:55 +01:00
13800589a9 Bump dependencies (#1578) 2020-12-14 19:33:31 +01:00
848add1b1b Set channel thumbnail as icon for feeds (#1106) 2020-12-14 19:25:39 +01:00
fc67dd18d0 Increase color contrast of light theme links 2020-12-14 14:20:31 +01:00
b3e9b92344 Fix pure-button hover color on a-tags 2020-12-14 14:15:03 +01:00
a291b29c6f add EXPOSE port command in Dockerfile (#1568)
added EXPOSE (see https://docs.docker.com/engine/reference/builder/#expose) in the Dockerfile. With this the reverse proxy Traefik can detect the port automatically.
2020-12-13 19:49:54 +01:00
b566c4ba1a Untrack config.yml (#1557)
* Untrack config.yml

`config/config.yml` has been untracked and moved to `config/config.example.yml`.

The Dockerfile has been updated to copy all `config/config.*` files and to try
to move `config/config.example.yml` to `config/config.yml`. If a user supplied
`config/config.yml` exists it is not overwritten.

* Update Dockerfile to use `shard.lock`

* Fix tests
2020-12-10 08:18:30 +01:00
2349a6ab0c Actually fix the icons of #1564 but for real this time 2020-12-09 20:21:42 +01:00
70eaf41acb Actually fix the icons of #1564 by using an icon that exist in ionicons v4 2020-12-09 20:14:06 +01:00
912091981e Fix the icons of #1564 and remove a useless line 2020-12-09 20:04:59 +01:00
aca42ff6a5 Update the cryptocurrency addresses and replace the Liberapay link with a link to the documentation (#1564)
* Update the cryptocurrency address with newly created one

* Replace the icon used for the donation address and link

* Replace the word Monero with the word XMR

* Replace the Liberapay placeholder with a link to the documentation
2020-12-09 19:43:45 +01:00
3fd885a188 Merge pull request #1560 from matthewmcgarvey/extract-login-routes
Extract login/signout routes from global file
2020-12-09 15:21:24 +00:00
2dacdf0210 Extract login/signout routes from global file 2020-12-08 20:50:39 -06:00
5e8856e65b Merge pull request #1551 from saltycrys/add-embed-link
Add embed link to watch page
2020-12-08 21:30:13 +00:00
d42539949e Add YT embed link to watch page 2020-12-08 19:10:29 +01:00
28ca5b2b57 Merge pull request #1552 from azhao-squareup/master
do not proxy hls livestrem on supported browser
2020-12-08 18:00:36 +00:00
eea6f5cbfa Merge pull request #1549 from saltycrys/invidious-playlist-continuation
Fix Invidious playlist continuation
2020-12-08 11:55:40 +00:00
b55dcc16ae Merge pull request #1548 from saltycrys/patch-1
Remove unused steps from CI
2020-12-08 11:54:03 +00:00
0cb442d40e do not proxy hls on supported browser 2020-12-08 00:53:48 -05:00
680dc1f962 Shuffle URL params
The `list` and `index` params are the most important and come first now.
2020-12-08 02:30:48 +01:00
30c92ce1b7 Add embed link to watch page 2020-12-08 02:28:44 +01:00
e55a09241e Fix Invidious playlist continuation
Playing a video in a Invidious playlist now correctly redirects to the next
video. The problem was that the offset was updated in the wrong place.
2020-12-07 22:28:27 +01:00
5f02237119 Remove unused steps from CI
There is no way to cache Crystal unfortunately.
See https://github.com/oprypin/install-crystal/issues/2
2020-12-07 19:18:38 +01:00
68552b6d65 Merge pull request #1544 from schwukas/fix-youtube-subscription-import
Fix youtube subscription import
2020-12-07 17:03:57 +00:00
44a4cea3a2 Merge pull request #1546 from schwukas/fix-empty-documents
Fix #1516 Document is empty
2020-12-07 16:23:00 +00:00
77c13e10ec Update link to instructions 2020-12-07 13:34:40 +01:00
0f66ff50a4 Fix #1516 Document is empty 2020-12-07 13:10:00 +01:00
af515856c2 Merge pull request #1543 from schwukas/update-screenshots
Add missing screenshot and update the older ones
2020-12-07 03:19:17 +00:00
62e8c09183 Fix YouTube subscription import parser 2020-12-06 21:47:50 +01:00
cb40a74aaf Add temporary link to subscription export instructions 2020-12-06 21:46:58 +01:00
a2c3ef94ec Add missing screenshot and update the older ones 2020-12-06 17:25:00 +01:00
4184fb3ae7 Increase YouTube request timeout (#1540)
Increase YouTube request timeout
2020-12-06 12:12:02 +00:00
20d2d141e4 Merge pull request #1539 from saltycrys/fix-comments
Fix comments
2020-12-06 04:08:25 +00:00
0cfc3bfb79 Fix comment continuation tests 2020-12-06 04:28:35 +01:00
2de206cb81 Fix comments
The YouTube headers are now always added for requests to YouTube.
Previously they were only added for requests going through QUIC.

The session token is now JSON decoded to unescape escaped Unicode characters.

The comment continuation protobuf has been updated and the request now goes
through the YouTube `pbj` JSON API.
2020-12-06 04:11:41 +01:00
64c6dfd307 Merge pull request #1538 from Sonic-Y3k/master
Fix invidious version for docker image
2020-12-05 22:13:13 +00:00
03d0b296e1 Fix invidious version for docker image
As Alpine-Linux per default uses the busybox date command, the -f option is not available and the build will fail.
2020-12-05 20:06:24 +01:00
ca4408b343 Merge pull request #1519 from saltycrys/github-actions-ci
Switch to GitHub Actions for CI
2020-12-04 20:59:07 +00:00
527f408f6a Merge pull request #1529 from saltycrys/fix-version
Fix invidious version for old git versions
2020-12-04 03:06:47 +00:00
adccca366e Fix invidious version for old git versions
The `%cs` format was only added to git in version 2.25 while `%ci` has been
around forever.
2020-12-04 01:58:27 +01:00
76cad41382 Merge pull request #1525 from saltycrys/fix-video-descriptions
Fix `extract_polymer_config`
2020-12-03 23:31:39 +00:00
501db8f276 Merge pull request #1526 from saltycrys/fix-redirect-channels
Fix redirect channels
2020-12-03 22:46:53 +00:00
cc684ff0b1 Fix redirect channels
Redirect channels may use JS to redirect now, instead of only a response header
as it used to be. This fix reads the channel to redirect to from `ytInitialData`.
2020-12-03 21:02:52 +01:00
7823c07f1a Fix extract_polymer_config
The `ytInitialPlayerResponse` regex can now handle `var` and `window`
assignments.

The video streams can now be extracted from `player_response` and
`initial_data`.

This fixes the descriptions on videos and videos themselves. Videos are
technically broken right now, but work becasue of a fallback that goes through
embeds.
2020-12-03 18:10:41 +01:00
eb6d3d68a9 Run CI on api-only branch, too 2020-12-03 13:06:27 +01:00
c98c7d47db Better message for the Stale action 2020-12-02 17:13:31 +01:00
194694a59b Replace the Stale bot with a Github action because it has been reported as dead 2020-12-02 17:10:57 +01:00
555cee3500 Merge pull request #1520 from matthewmcgarvey/extract-search-endpoints
Extracting search endpoints from global file
2020-12-02 15:12:48 +00:00
f4bb854372 Update the Stale bot config with a 1 month delay between mark and close 2020-12-02 16:00:58 +01:00
d04b8e2fc6 Add the Stale bot config 2020-12-02 15:53:26 +01:00
21c1450e4a Run CI only once per change 2020-12-02 05:33:42 +01:00
2b6b0e62f4 Add shard caching to CI 2020-12-02 04:40:13 +01:00
4fb360b19f Track shard.lock 2020-12-02 04:39:55 +01:00
0fa1567793 Display lint fixes on lint error 2020-12-02 01:32:19 +01:00
d7377015a2 Extracting search endpoints 2020-12-01 18:02:39 -06:00
139017ba7c Switch to GitHub Actions for CI
Travis CI is slow, builds are first queued up forever and then the builds
themselves are slow, too.

GitHub Actions run pretty much immediately and are fast. Also separate jobs run
at the same time unlike on Travis CI.
2020-12-01 21:45:33 +01:00
ff3b53e34a Merge pull request #1513 from saltycrys/improve-error-message-2
Improve error message 2
2020-12-01 16:36:27 +00:00
b409cdece5 Improve error message 2
Electric Boogaloo

The long backtrace has been moved into a `<details>` HTML element, as suggested
by @B0pol. To make the error still visible it has been added to the top under
`Title:`. This also encourages informative issue titles.
2020-12-01 13:41:19 +01:00
2478e67d16 Switch to date based versioning scheme
Since no new tags are created for releases the version has been frozen for some
time, with only the commit hash changing.

Versions based on the latest commit date make it much easier to identify them.
2020-12-01 13:29:30 +01:00
dd35877eda Update the readme with links to the new documentation repository 2020-11-30 21:47:22 +00:00
4acfd2c342 Merge pull request #1506 from tirz/fix-channel_parsing
fix: channel info parsing
2020-11-30 19:16:31 +00:00
df3f9a2ae8 fix: channel info parsing 2020-11-30 19:35:45 +01:00
78ae9ff093 Remove the donation link from the readme 2020-11-30 15:11:18 +00:00
ca781651cb Fix formatting of #1504 2020-11-30 15:56:01 +01:00
417fa3cf3c Merge pull request #1504 from saltycrys/improve-error-message
Improve error message
2020-11-30 14:17:10 +00:00
92bb477f68 Improve error message
The error message has been reworded and the issue template now includes the
date, route, version and backtrace.
2020-11-30 13:02:35 +01:00
0f08cc5aa9 Remove backtrace on YouTube error
YouTube returning an error is not a bug in Invidious, so it should not print
a backtrace.
2020-11-30 12:57:25 +01:00
3dac33ffba Add backtraces to errors (#1498)
Error handling has been reworked to always go through the new `error_template`,
`error_json` and `error_atom` macros.
They all accept a status code followed by a string message or an exception
object. `error_json` accepts a hash with additional fields as third argument.

If the second argument is an exception a backtrace will be printed, if it is a
string only the string is printed. Since up till now only the exception message
was printed a new `InfoException` class was added for situations where no
backtrace is intended but a string cannot be used.

`error_template` with a string message automatically localizes the message.
Missing error translations have been collected in https://github.com/iv-org/invidious/issues/1497
`error_json` with a string message does not localize the message. This is the
same as previous behavior. If translations are desired for `error_json` they
can be added easily but those error messages have not been collected yet.

Uncaught exceptions previously only printed a generic message ("Looks like
you've found a bug in Invidious. [...]"). They still print that message
but now also include a backtrace.
2020-11-30 10:59:21 +01:00
fe73eccb90 Merge pull request #1479 from saltycrys/theme-flash
Apply dark theme immediately
2020-11-28 20:54:45 +00:00
b9544d9534 Update logrotate configuration command (#1500)
Using sudo with `echo ... | tee /path/to/file` doesn't make sense, as the command requiring the superuser privileges is the `tee` command and not the echo.
2020-11-28 21:50:27 +01:00
99ba9874b1 Merge pull request #1490 from tirz/fix-regex_parsing
fix: ytInitialData parsing with regex
2020-11-26 17:28:34 +00:00
b41ca72d2b revert: remove 'JSON.parse("' 2020-11-26 18:22:31 +01:00
1ba17a0e14 feat: centralize ytInitialData parsing 2020-11-26 13:43:53 +01:00
480d31eb5e fix: ytInitialData parsing with regex 2020-11-26 07:22:47 +01:00
1973f93d4a Merge pull request #1482 from matthewmcgarvey/extract-playlist-routes
Extract playlist routes from global file
2020-11-20 21:48:34 +00:00
3a2f4d4def allow to set a custom anti-captcha api url (#1473) 2020-11-20 22:21:26 +01:00
192d2b86b6 Extract playlist routes from global file 2020-11-19 19:21:48 -06:00
6ca948ac3c Merge pull request #1477 from saltycrys/empty-preference-values
Fill empty preference values
2020-11-19 21:45:00 +00:00
5f932e9749 Fix CSS specificity issues 2020-11-18 00:10:32 +01:00
ff46c18164 Move themes into default.css
Now that themes are controlled with a class instead of setting
media="none" on the stylesheet link and both themes already being
duplicated in default.css for the automatic themeing it makes sense
to have all theme related CSS in the same place.

This commit also fixes the missing dark theme on embeds.
2020-11-17 22:53:45 +01:00
de777907f2 Apply dark theme immediately
Themes are now controlled with a class on the body element.

If a preference is set the body element will have either "dark-theme"
or "light-theme" class. If no preference is set or the preference is
empty the class will be "no-theme".

"dark-theme" and "light-theme" are handled by darktheme.css and
lighttheme.css respectively.

"no-theme" is handled by default.css where depending on the value of
"prefers-color-scheme" the styles corresponding to "dark-theme" or
"light-theme" are applied.

Unfortunately this means that both themes are duplicated, once in the
theme .css and once in default.css.
2020-11-16 04:19:41 +01:00
72c4fd868a Fill empty preference values 2020-11-16 01:33:55 +01:00
4bc2cd003d Merge pull request #1476 from unixfox/patch-1
Remove duplicate Referrer-Policy
2020-11-15 18:17:58 +01:00
c9c6c1f769 Remove duplicate Referrer-Policy 2020-11-15 10:02:45 +00:00
bb7d8735cb Merge branch 'master' into patch-1 2020-11-12 17:06:38 +01:00
557b0d76ab Merge pull request #919 from edumoreira1506/feature/add-buttons-top-page
Add Previous/Next page buttons at the top of the page
2020-11-12 17:00:23 +01:00
13073411cc Merge pull request #1465 from saltycrys/storyboards
Update videojs-vtt-thumbnails to latest upstream version and improve storyboard display
2020-11-12 16:54:28 +01:00
0530045536 Remove double empty line 2020-11-12 16:53:31 +01:00
6d29e9c1b7 Fix missing videos tab on some channels (#1462)
* Fix missing videos tab on some channels

* Fixed formatting

Co-authored-by: Linux User <user@localhost.local>
2020-11-12 15:35:12 +00:00
d3e4739745 Improve storyboard display 2020-11-08 22:23:24 +01:00
3379f3ef61 Update videojs-vtt-thumbnails to latest upstream version
Note that the latest version on NPM is over two years old so this was built from source.
2020-11-08 22:02:25 +01:00
9da7919062 Merge pull request #1459 from matthewmcgarvey/embed-routes
Extract embed routes into separate classes
2020-11-08 20:17:07 +01:00
aeed7deb2d Update README.md (#1461)
Update README.md
2020-11-08 13:05:11 +00:00
38b617d848 Formatting 2020-11-07 08:22:44 -06:00
dda02f783f Extract embed routes into separate classes 2020-11-06 16:44:36 -06:00
cda322e311 Merge pull request #1449 from raycheung/master
Fix stale playlist video counting on add/drop (#1448)
2020-11-03 17:39:34 +01:00
934d3178a2 Merge pull request #1453 from matthewmcgarvey/extract-watch-route
Extract /watch route from main file
2020-11-03 17:37:03 +01:00
2cded8dcac Extract /watch route from main file 2020-11-02 18:06:06 -06:00
babe0c31ad Fix stale playlist video counting on add/drop (https://github.com/iv-org/invidious/issues/1448)
The return of `cardinality()` is not affected by the `array_append()`
and `array_remove()` of the same statement.
2020-11-01 12:20:44 +08:00
aa2ae37365 Merge pull request #1440 from saltycrys/master
Fix storyboards
2020-10-26 03:20:45 +00:00
9a8b81fcbe Fix storyboards 2020-10-25 09:35:16 +01:00
138f38aade more polish (#1437) 2020-10-24 03:26:17 +00:00
42914bff6f polish some stuff (#1436) 2020-10-23 22:17:40 +00:00
59acf95bf5 Update README.md (#1433)
Updated "Hosted Weblate" link and added two items about translations, in order to make this kind of information more prominent.
2020-10-23 22:03:08 +00:00
31c1046771 Add liability clause (#1434)
* Add liability clause

* Update README.md
2020-10-23 22:02:34 +00:00
ec4a22687f Update get_about_info for polymer (iv-org/invidious#1423) (#1429)
Update get_about_info for polymer (iv-org/invidious#1423)
2020-10-23 01:40:07 +00:00
22d9d16a7a Update parsing of ytInitialData (#1427)
Update parsing of ytInitialData
2020-10-22 10:02:15 +00:00
0520e67303 [refactor] Finish converting jobs to new job setup (#1420)
[refactor] Finish converting jobs to new job setup
2020-10-17 12:25:57 +00:00
d571573e52 Set preferences before conditional breaks in before_all (#1412) 2020-10-16 10:23:18 +00:00
0f643daac6 Use the new version of lsquic.cr (#1413) 2020-10-16 09:47:12 +00:00
989317e5d3 Extract RefreshChannelsJob (#1403) 2020-10-15 14:22:41 +00:00
cce6db4aeb Replace the riot.im link with a matrix.to link (#1409) 2020-10-10 16:00:33 +00:00
46109abde5 More readme enhancements and fixes (#1408)
* More enhancements and fixes to the readme

* Move liberapay away from the features list
2020-10-10 13:32:54 +00:00
2e16774190 Major readme enhancements and fixes (#1407)
* Major enhancement to the readme
2020-10-10 12:52:41 +00:00
812a21bce6 Merge pull request #1372 from tleydxdy/patch-1
Add exponential backoff to refresh_channels
2020-10-10 14:01:47 +02:00
17e0207120 Merge pull request #1406 from Perflyst/channel-api-v3
Use channel API v3
2020-10-10 11:47:29 +00:00
e02608edf8 Use channel API v3 2020-10-10 12:15:30 +02:00
1a7e160956 Merge pull request #1402 from matthewmcgarvey/feed-menu-overlap
Fix feed menu overlap at iPad screen widths
2020-10-08 08:35:50 +00:00
59d966356e Merge pull request #1399 from matthewmcgarvey/routing-job-patterns
Provide rough draft of better project organization
2020-10-08 10:08:23 +02:00
5937e0289e Fix feed menu overlap at ipad screen widths 2020-10-07 23:01:18 -05:00
85c212aee3 Provide rough draft of better project organization 2020-10-05 23:57:19 -05:00
1978c3d3bd Merge pull request #1379 from Rjevski/patch-1
Remove on-hover tooltip from player
2020-10-05 11:11:25 +00:00
30a2c28d74 Merge pull request #1391 from Perflyst/update-requirements
Add zlib1g-dev as requirement
2020-10-04 08:09:40 +00:00
94a330532d Merge pull request #1394 from Perflyst/fix-ci-test
Fix CI tests
2020-10-04 08:08:55 +00:00
f65e57ee82 Fix formatting 2020-10-03 15:19:12 +02:00
750064c06f Add zlib1g-dev as requirement 2020-09-27 21:17:52 +02:00
651fd79325 Merge pull request #1360 from FlipEnergy/helm_services
[Helm] add service type values and InitContainer to wait for Postgres
2020-09-25 23:10:09 +00:00
b53f988fca Merge pull request #1387 from GauthierPLM/fix-playlist-index
Fix #1382 : Playlists missing first video
2020-09-25 23:04:48 +00:00
1595eaeb74 Fix #1382 : Playlists missing first video
The index was set to index - 1, causing the first video to be shifted in fetch_playlist_videos
(because of its index being -1 lower than it should) and thus not displayed on playlist page.
2020-09-25 14:26:07 +02:00
a54cbe896d Remove on-hover tooltip from player
Using the player on latest Safari, the tooltip appears and stays stuck for long even when switching to fullscreen which is annoying. You need to explicitly click anywhere to dismiss that stuck tooltip.

This doesn't seem to happen in Firefox so I am not sure whether this is a browser bug, but in any case I don't see any value in keeping this tooltip so maybe we can just remove it?
2020-09-15 18:50:17 +01:00
9995a8d53f Allow cookies from anti-captcha to be optional (#1371) 2020-09-09 23:04:08 +00:00
b88872d54b Fix sub refresh (#1370) 2020-09-09 23:03:27 +00:00
f02ac01f7e Add exponential backoff to refresh_channels
In practice with the patch I usually see backoff to 2 hours when blocked, so it should improve recovery time. The lim_thread is to work with multi-threading, not sure if it's the best way to do it.
2020-09-09 11:47:11 -04:00
3ab3a5a236 Merge pull request #713 from leonklingele/keydown-mediakeys-detection
js: add support to detect media keys in keydown handler
2020-09-09 03:15:21 +00:00
fa3eb185ab Remove space 2020-09-06 00:37:43 -07:00
4a56ba34d4 Fix pg_is ready user 2020-09-06 00:37:05 -07:00
b860c69fd7 Add initContainer to check for postgres up 2020-09-05 19:51:58 -07:00
8408ceffe8 also add initial delay 2020-09-05 17:12:21 -07:00
da9133c3c3 add service values 2020-09-05 13:46:51 -07:00
4a6e920d0e Use new youtube API to fetch channel videos (#1355)
* Use new API to fetch videos from channels

This mirrors the process used by subscriptions.gir.st. The old API is
tried first, and if it fails then the new one is used.

* Use the new API whenever getting videos from a channel

I created the get_channel_videos_response function because now instead
of just getting a single url, there are extra steps involved in getting
the API response for channel videos, and these steps don't need to be
repeated throughout the code.

The only remaining exception is the bypass_captcha function, which still
only makes a request to the old API. I don't know whether this code
needs to be updated to use the new API for captcha bypassing to work
correctly.

* Correctly determine video length with new api

* Remove unnecessary line
2020-09-02 20:28:57 +00:00
13f58d602f Replace omarroth with iv-org where applicable (#1353)
Fixes #1353
2020-08-25 16:07:16 +00:00
45fda595c3 Merge pull request #1346 from resttime/fix-docker-init
Use bash in the docker init shebang
2020-08-21 12:52:15 +00:00
1f15ea0bd8 Merge pull request #1197 from iv-org/comradekingu-patch-1
TRANSLATION file for l10n
2020-08-19 19:50:15 +00:00
99eebfa10f Merge pull request #1339 from stephane-r/made-with-invidious-holoplay
Adding HoloPlay application on Made with Invidious README
2020-08-19 19:47:40 +00:00
ccbbe81141 Use bash in the shebang 2020-08-19 13:36:35 -05:00
ad2da5969e Adding HoloPlay application on Made with Invidious README 2020-08-15 16:27:47 +02:00
2ce82f3da5 Merge pull request #1335 from szepeviktor/patch-1
Fix CI badge
2020-08-14 11:59:45 +02:00
6bc9479e00 Update .travis.yml 2020-08-14 11:51:44 +02:00
740e52229f Merge pull request #1336 from GauthierPLM/dependency-update
Update lsquic.cr dependency to use iv-org version
2020-08-14 11:22:22 +02:00
1efd2390e3 Update lsquic.cr dependency to use iv-org version 2020-08-14 11:18:04 +02:00
564328abf9 Fix CI badge 2020-08-13 08:12:40 +02:00
926f819e31 Merge pull request #1218 from SuperSandro2000/patch-1
Add RAM requirement
2020-08-05 20:53:31 +02:00
45f0b9ac45 Update README.md
Co-authored-by: Perflyst <mail@perflyst.de>
2020-08-05 20:16:53 +02:00
9a82e86ce9 Merge pull request #1254 from SuperSandro2000/patch-2
Update database automatically in Docker
2020-08-03 17:11:50 +02:00
0ad974c57b Merge pull request #1211 from SuperSandro2000/improve-postgres
Improve postgres Dockerfile
2020-08-03 17:09:51 +02:00
62f015fc34 Fix playlist export for playlists with more than 100 videos 2020-07-28 17:21:39 -04:00
b508787037 Fix spec 2020-07-26 15:29:03 -04:00
176ef19cca Update mixes link 2020-07-26 11:50:26 -04:00
db83ede73c Add missing default for ConfigPreferences 2020-07-26 11:09:45 -04:00
452d1e8307 Fix warnings with latest version of Crystal 2020-07-26 10:59:31 -04:00
92f337c67e Add playlist import/export 2020-07-26 10:59:31 -04:00
1e4022680a Fix playlists with one video 2020-07-26 10:59:31 -04:00
e16d951da0 Create postgres user to avoid fatal warning 2020-07-25 21:51:58 +02:00
7b2b19b4ba Remove empty Dockerfile 2020-07-25 21:51:58 +02:00
8ebfaed546 Remove no longer needed POSTGRES_HOST_AUTH_METHOD 2020-07-25 21:51:57 +02:00
0b52d52f4a Use inbuilt init script 2020-07-25 21:51:57 +02:00
6901d10d54 Set magic ENV varialbes for user, default DB
instead of doing it ourselves
2020-07-25 21:51:39 +02:00
7caa2ae9bc Merge pull request #1295 from jwilk-forks/readme
README: Fix and update URLs
2020-07-22 22:23:59 +02:00
cc50859912 README: update GitHub repo URLs
Follow the https://github.com/omarroth/invidious ->
https://github.com/iv-org/invidious redirect.
2020-07-22 19:12:39 +02:00
6c16780144 README: fix changelog URL 2020-07-22 19:09:18 +02:00
b5f79444f9 Fix optional value in data extractor 2020-07-21 20:11:13 -04:00
b73c6e94c0 Bump docker dependencies 2020-07-19 22:26:41 -04:00
07616a9d34 Bump lsquic version to v2.18.1 2020-07-19 11:56:28 -04:00
e88ee26e3b Requested README changes made 2020-07-13 13:22:01 +02:00
7422c38e66 README reworked 2020-07-13 10:34:22 +02:00
8ed1c77e47 Skip DASH streams segmented by URL 2020-07-04 14:17:46 -04:00
8c65b8c16f Update playlists to support polymer redesign 2020-06-24 22:19:36 -04:00
1f435522b4 Fix cast from nil in short_description 2020-06-17 19:22:28 -04:00
eb880e8de0 Update database automatically in Docker
Applying the migrations scripts by hand in Docker is not that easy and most people expect this to automatically happen.
2020-06-17 09:59:21 +02:00
83b1d80a5b Fix signature URL regex 2020-06-16 19:21:29 -05:00
529aff3126 Update peertubeify url to new location (#1227)
On the URL specified it says: "Project 'Ealhad/peertubeify' was moved to 'Cha_deL/peertubeify'. Please update any links and bookmarks that may still have the old path."
2020-06-16 18:05:17 -05:00
bf2bd519eb Switch to official crystallang alpine image (#1247)
* Switch to official crystal-lang alpine image
2020-06-16 18:04:41 -05:00
38c7dda00f Fix genreUrl 2020-06-16 17:51:49 -05:00
056e7432bd Update channel playlists to use polymer 2020-06-16 17:51:35 -05:00
074497b0f6 Add migration script for polymer redesign 2020-06-15 18:20:31 -05:00
1eca969cf6 Add support for polymer redesign 2020-06-15 18:18:04 -05:00
c1cbdae5ee Make HOST_URL constant 2020-06-15 18:13:14 -05:00
4d4b6a2fa0 Remove top page 2020-06-15 18:11:36 -05:00
d30a972a90 Support Crystal 0.35.0 2020-06-15 18:11:06 -05:00
24013af3bb Mention SWAP 2020-06-15 19:24:35 +02:00
338dc3223c Merge pull request #1182 from DmitrySandalov/master
Allow user to subscribe to playlist (#17)
2020-06-13 15:10:18 +03:00
c422a6dd4f Add RAM requirement
Closes #1152
2020-06-06 04:12:43 +02:00
8305af8f10 Update docker build 2020-05-29 20:06:43 -05:00
6435c7b921 Fix reCaptcha 2020-05-28 12:21:47 -05:00
af7c57b082 TRANSLATION file for l10n 2020-05-26 18:02:21 +00:00
80941eacbd More consistent HTML IDs for info section (#1156)
* More consistent IDs for info section

More consistent IDs for info section: watch-on-youtube, annotations and download

* Consistent IDs: channel-name

* Consistent IDs: published-date

The term "published" can also be found in the answer for the following YouTube API request: https://developers.google.com/youtube/v3/docs/videos/list
2020-05-26 02:57:10 -05:00
ceb252986e Update captcha job 2020-05-25 12:52:15 -05:00
5d8de5fde2 Allow user to subscribe to playlist (#17) 2020-05-17 14:28:00 +03:00
750ef296c6 Update captcha handler 2020-05-13 16:09:39 -05:00
454ae8656a Cleanup request headers 2020-05-08 09:00:53 -05:00
75450dcdbc Update signature param 2020-05-08 08:59:09 -05:00
bd2c7e3bb9 Verify download, fix invidious file permission (#949)
* Fix docker
2020-04-30 20:35:34 -05:00
9d23cf33fd Consistent IDs for info section (#1133) 2020-04-30 15:01:29 -05:00
97eb01a28d Merge weblate 2020-04-20 16:46:00 -05:00
9a2a636aed Update Portuguese (Brazil) translation 2020-04-20 16:12:20 -05:00
61c8256ef0 Update Turkish translation 2020-04-20 16:12:15 -05:00
8e1791570e Update Ukrainian translation 2020-04-20 16:12:15 -05:00
aa30d1f359 Add Portuguese (Portugal) translation 2020-04-20 16:12:12 -05:00
326f4bd681 Update Basque translation 2020-04-20 16:12:09 -05:00
7690c6c33d Update Russian translation 2020-04-20 16:12:06 -05:00
fece1077f2 Update Swedish translation 2020-04-20 16:12:05 -05:00
75fc7db50d Update Romanian translation 2020-04-20 16:12:05 -05:00
96da04576e Update Italian translation 2020-04-20 16:12:05 -05:00
001ec3663e Add Serbian (cyrillic) translation 2020-04-20 16:12:02 -05:00
21a00b77bd Add Hungarian translation (#1111) 2020-04-20 16:05:28 -05:00
408f3852ec Hide playlist widget when user has no playlists 2020-04-15 16:30:02 -05:00
61150c74d2 Move privacy type into playlists.sql 2020-04-14 18:09:48 -05:00
7bb7003c9d Fix authorThumbnails in /api/v1/channels 2020-04-10 11:49:51 -05:00
920463f2ff Fix playlist_ajax 2020-04-10 11:49:18 -05:00
ca1185d0be Fix warnings in latest version of Crystal 2020-04-09 12:18:09 -05:00
be655ee328 Bump dependencies 2020-04-09 11:14:21 -05:00
02d4186b11 Fix player matching 2020-04-09 10:55:50 -05:00
3f97bebd69 Support adding video to playlist from watch page 2020-04-09 10:55:32 -05:00
2e378da922 Add support for Swedish locale 2020-04-04 15:57:29 -05:00
b37f51bd7f Fix /c/ redirect 2020-04-04 15:31:24 -05:00
eb8b0f72cc Add Swedish translation (#1078)
Co-authored-by: Daniel Lublin <daniel@lublin.se>
2020-04-02 16:26:54 -05:00
d8fe9a4d29 nb-NO: Translate "subscription" correctly (#1089)
Co-authored-by: Oskar Gewalli <gewalli@gmail.com>
2020-04-02 16:16:27 -05:00
c97cdf551e Refactor extract_plid 2020-03-30 14:27:07 -05:00
80fc60b5e2 Add spec for extract_plid 2020-03-30 14:23:51 -05:00
3b2e142542 Fix JSON serialization 2020-03-29 18:04:44 -04:00
0e58d99f4e Fix player mouseover events 2020-03-27 09:47:46 -05:00
92798abb5d Add manifest-src to CSP 2020-03-19 13:41:08 -05:00
bd7950b757 Add toggle_parent to dynamic handlers 2020-03-15 18:52:49 -04:00
59a15ceef6 Remove VarInt class 2020-03-15 17:47:16 -04:00
4011a113cc Strip invalid characters from referer URLs 2020-03-15 17:47:16 -04:00
70cbe91776 Migrate to a good Content Security Policy (#1023)
So attacks such as XSS (see [0]) will no longer be of an issue.

[0]: https://github.com/omarroth/invidious/issues/1022
2020-03-15 16:46:08 -05:00
f92027c44b Escape 'sort_by' 2020-03-10 11:25:32 -04:00
1443335315 Switch textcaptcha to HTTPS 2020-03-10 11:12:11 -04:00
6ff2229a09 Bump dependencies 2020-03-06 13:59:42 -05:00
bb72672dd9 Replace static asset requests with QUIC 2020-03-06 13:53:35 -05:00
d96dee3aa6 Add debug info to videoplayback 2020-03-06 13:50:00 -05:00
bd0aaa343b Prevent storyboards from hanging 2020-03-05 13:49:06 -05:00
3126e1ac94 docker: allow to configure Invidious by env var (#1030)
Invidious gained support to read its configuration from an env var
instead of config file in e3c10d779d.

Unfortunately, Docker doesn't allow newline characters in env var
values (see [0]) which means we can only provide a proper YAML config
by using the inlined configuration in docker-compose.yml which,
unfortunately, is tracked by Git. Once support for multiline env var
values has been added to Docker, we should migrate and read the config
from a .env file instead (which is not tracked by Git).

[0]: https://github.com/docker/compose/issues/3527
2020-03-04 12:33:13 -06:00
a117d87f33 Skip validation checks for videoplayback, ggpht 2020-03-04 13:06:17 -05:00
9dc4f8a1aa Escape item titles in search page 2020-03-04 13:03:14 -05:00
0d536d11e3 Verify token signature in constant time, Run cheap checks first in token validation process (#1032)
* Verify token signature in constant time

To prevent timing side channel attacks

* Run cheap checks first in token validation process

Expensive checks such as the nonce lookup on the database or the
signature check can be run after cheap/fast checks.
2020-03-02 10:04:36 -06:00
72a4962fd0 add lapisTube (#1027) 2020-03-02 09:35:28 -06:00
a3045a3953 Use a MediaQueryListener to toggle on demand. Tested on OSX. (#925)
Closes #867.
2020-03-02 09:33:47 -06:00
c620a22017 Add logfile to logrotate (#892) 2020-03-02 09:19:07 -06:00
e3593fe197 js: add support to detect media keys in keydown handler
See [0] for all the relevant codes.

[0]: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values#Multimedia_keys

Fixes a regression introduced in e6b4e12689.
Fixes https://github.com/omarroth/invidious/issues/712.
2020-03-01 17:43:19 +01:00
856ec03cc7 Revert "Add HOST_AUTH_METHOD=trust to docker compose (see docker-library/postgres#681)"
This reverts commit ef70668a77.
2020-03-01 11:07:37 -05:00
c80c5631f0 docker: do not require password for PostgreSQL superuser, docker,kubernetes: create "privacy" type before using it, travis: do not run "docker-compose up" in detached mode (#1042)
* docker: do not require password for PostgreSQL superuser

A password is now required by the postgres Docker image which makes
initial setup (and our CI build) fail with the following error:

    postgres_1   | Error: Database is uninitialized and superuser password is not specified.
    postgres_1   |        You must specify POSTGRES_PASSWORD for the superuser. Use
    postgres_1   |        "-e POSTGRES_PASSWORD=password" to set it in "docker run".
    postgres_1   |
    postgres_1   |        You may also use POSTGRES_HOST_AUTH_METHOD=trust to allow all connections
    postgres_1   |        without a password. This is *not* recommended. See PostgreSQL
    postgres_1   |        documentation about "trust":
    postgres_1   |        https://www.postgresql.org/docs/current/auth-trust.html

See https://github.com/docker-library/postgres/issues/681.

* docker,kubernetes: create PostgreSQL "privacy" type before using it

Fixes the following error when setting up the database:

    postgres_1   | 2020-02-21 01:01:22.371 UTC [172] ERROR:  type "privacy" does not exist at character 200
    postgres_1   | 2020-02-21 01:01:22.371 UTC [172] STATEMENT:  CREATE TABLE public.playlists
    postgres_1   | 	(
    postgres_1   | 	    title text,
    postgres_1   | 	    id text primary key,
    postgres_1   | 	    author text,
    postgres_1   | 	    description text,
    postgres_1   | 	    video_count integer,
    postgres_1   | 	    created timestamptz,
    postgres_1   | 	    updated timestamptz,
    postgres_1   | 	    privacy privacy,
    postgres_1   | 	    index int8[]
    postgres_1   | 	);
    postgres_1   | ERROR:  type "privacy" does not exist
    postgres_1   | LINE 10:     privacy privacy,

* travis: do not run "docker-compose up" in detached mode

Rather, allow database to finish its setup procedure and grant
Invidious time to launch.
2020-03-01 10:06:45 -06:00
ef70668a77 Add HOST_AUTH_METHOD=trust to docker compose (see docker-library/postgres#681) 2020-03-01 10:51:17 -05:00
ebd4691462 Update Polish translation 2020-03-01 16:31:32 +01:00
28554235be Update Ukrainian translation 2020-03-01 16:31:32 +01:00
efbbb6fd20 Update German translation 2020-03-01 16:31:32 +01:00
9de57021a3 Update postgres setup 2020-03-01 10:30:55 -05:00
e21f770485 Fix status check for channel page 2020-02-28 15:57:45 -05:00
697c00dccf Sanitize PLID 2020-02-28 14:10:01 -05:00
1caf6a3298 Fix deadlock when updating notifications 2020-02-28 13:13:48 -05:00
02fd02d482 Remove DB array concatenation 2020-02-28 12:14:29 -05:00
239fb0db94 Remove duplicated Github logo on footer (#986)
* Remove duplicated Github logo on footer
2020-02-20 18:50:54 -05:00
fe1d73c3e5 Merge pull request #1015 from leonklingele/add-kubernetes
Add support to run on Kubernetes, add Helm chart
2020-02-20 18:45:25 -05:00
43da06a354 Remove temp fix for crystal/crystal-lang#7383 2020-02-20 18:30:46 -05:00
fea6b67067 Remove 'type' attribute from community embed 2020-02-20 18:30:46 -05:00
f065ae54d5 Merge pull request #1031 from leonklingele/crystal-0.33.0-format
Update code formatting for Crystal 0.33.0
2020-02-20 18:10:56 -05:00
3cf417766d Merge pull request #1033 from leanderseidlitz/master
readme.md: fix missing playlist relation in postgresql
2020-02-20 18:10:26 -05:00
0fb41b10e9 readme.md: fix missing playlist relation in postgresql 2020-02-15 20:58:52 +01:00
bc9dc3bf1e Update code formatting for Crystal 0.33.0
Crystal 0.33.0 introduced some changes to to the code formatter.
Run "crystal tool format" so CI doesn't fail anymore.
2020-02-15 19:52:28 +01:00
3cde5e28a8 Add support to run on Kubernetes, add Helm chart
See relevant README.md for more details.
2020-02-07 13:46:12 +01:00
cb8e7181c4 Merge pull request #1016 from leonklingele/config-env
Add support to read config from environment variable
2020-02-06 20:13:34 -05:00
9a3becdecc Merge pull request #1011 from jorgesumle/master
Remove invalid and useless HTML from embed player
2020-02-06 20:12:17 -05:00
e3c10d779d Add support to read config from environment variable
Try to read app config from the "INVIDIOUS_CONFIG" environment variable.
If the variable is undefined, read config from config.yml file as before.

Required by https://github.com/omarroth/invidious/pull/1015 et al.
2020-02-04 15:53:46 +01:00
dd9f1024f4 Remove invalid HTML from embed player 2020-02-01 19:25:03 +01:00
9841f74adc Add handling for comments with no content 2020-02-01 12:14:37 -05:00
b56e493d92 Remove frameborder from community embeds 2020-02-01 11:23:12 -05:00
a2c5211b20 Check /browse_ajax for channel blocks 2020-02-01 11:23:12 -05:00
b7a7abed48 Merge pull request #1004 from outloudvi/zhcn-l10n
Update zh-CN translation
2020-02-01 11:13:03 -05:00
72bfdfd925 Merge pull request #975 from jorgesumle/embed
Change embed code
2020-02-01 11:11:12 -05:00
b80d34612a Update zh-CN translation 2020-01-27 13:01:53 +08:00
648cc0f006 Refactor signature extraction 2020-01-24 17:02:28 -05:00
1fc9506442 Add audio mode link to items 2020-01-21 15:36:56 +03:00
830692dd60 Update Chinese (Simplified) translation 2020-01-17 22:50:16 -05:00
95a6759381 Update Polish translation 2020-01-17 22:50:16 -05:00
960b37b1c2 Update Spanish translation 2020-01-17 22:50:16 -05:00
b1d17dea4f Update Esperanto translation 2020-01-17 22:50:16 -05:00
6b06471953 Update Chinese (Traditional) translation 2020-01-17 22:50:16 -05:00
4ca957d3eb Update Russian translation 2020-01-17 22:50:16 -05:00
eb9b63477c Update Turkish translation 2020-01-17 22:50:16 -05:00
80c01b055c Update Norwegian Bokmål translation 2020-01-17 22:50:16 -05:00
50aec67069 Merge pull request #984 from rreuvekamp/202001_improve-dutch-locale
Improve Dutch locale
2020-01-17 22:26:46 -05:00
7baced75e5 Fix channel redirect 2020-01-14 08:21:17 -05:00
99743a94fb Improve Dutch locale 2020-01-12 19:00:10 +01:00
9bdfd6025b Add base-devel to Arch dependencies 2020-01-08 21:06:22 -05:00
91400d2ce0 Merge pull request #959 from frajibe/wip/frajibe/frenchTs
Small fixes for the french translation
2020-01-08 20:29:26 -05:00
7b88d0efe3 Minor refactor 2020-01-08 20:27:21 -05:00
4aada65dae Fix channel playlists for genre channels 2020-01-08 20:26:47 -05:00
0560d2cfb7 Bump video.js 2020-01-08 20:19:47 -05:00
58c1a68ad9 Change embed code 2020-01-04 15:27:45 +01:00
588fc6df85 Bump dependencies 2019-12-14 16:10:46 -05:00
2c9e4ded40 Fix the french translation 2019-12-14 18:20:26 +01:00
88a538e71b Minor refactor for channel playlists 2019-12-05 15:47:35 -05:00
513363504f Add better error message for fetch_channel 2019-12-05 15:46:21 -05:00
0e844edacb Add support for pt-BR 2019-12-05 15:26:35 -05:00
5751bb2481 Add Brazilian Portuguese locale (#915)
* adding Brazilian Portuguese locale
2019-12-05 15:24:53 -05:00
28669d940a Remove --release from dockerfile 2019-12-05 14:49:44 -05:00
3d87bdb6b4 Merge pull request #938 from tleydxdy/patch-2
Proper fix for docker build
2019-12-05 14:49:14 -05:00
1499ce43bf Add support for Romanian locale 2019-12-03 19:41:58 -05:00
4d22b43d65 Merge pull request #942 from vcvlad/master
Invidious translated into Romanian
2019-12-03 19:41:26 -05:00
823603650f Add support for /sorry/index CAPTCHA 2019-12-03 19:14:11 -05:00
062867a38d Strip domain from caption URLs 2019-12-01 17:52:39 -05:00
f3e0c5d653 Update ro.json
Invidious translated from English into Romanian.
2019-11-28 17:16:46 +00:00
fc7f48b7db Create ro.json 2019-11-28 15:09:41 +00:00
04d56420d1 Run 'crystal tool format' 2019-11-28 08:20:44 -06:00
a017574f74 Add support for force_resolve to QUIC client 2019-11-28 08:19:28 -06:00
ae24360c02 Proper fix for docker build
return to static linking
2019-11-26 18:20:23 -05:00
3fea1976c8 Update dependencies 2019-11-24 15:26:19 -05:00
cf97dd9fcd Bump dependencies 2019-11-24 14:00:53 -05:00
0e3a48ff76 Update QUICPool 2019-11-24 13:41:47 -05:00
48cbe45a9d Add Previous/Next page buttons at the top of the page 2019-11-20 15:59:07 -03:00
276bf09238 Skip preferences for assets 2019-11-20 12:04:53 -05:00
05988c1c49 Bump version 2019-11-18 20:41:42 -05:00
d46b26e3bc Use QUIC for connections to YouTube 2019-11-18 17:28:32 -05:00
236c172c6f Merge pull request #896 from sh4dowb/master
Fixed double quotes in meta description
2019-11-14 10:38:38 -05:00
59fcb56972 Merge pull request #907 from tleydxdy/patch-2
Fix docker build for now
2019-11-14 10:38:12 -05:00
c07cd3a856 Fix typo in playlist url 2019-11-14 10:11:33 -05:00
37766347a5 Fix docker build for now 2019-11-13 08:57:12 -05:00
79da61782b Fixed double quotes in meta description 2019-11-11 19:00:23 +03:00
8af87f1a8b Fix updating of cookies 2019-11-10 10:02:02 -05:00
494c954cbb Add etag to /api/v1/annotations 2019-11-09 22:05:17 -05:00
71bc9eea28 Add support for Anti-Captcha 2019-11-09 14:22:39 -05:00
e3b2bcfd06 Fix ID for search duration 2019-11-08 09:29:33 -05:00
142d974641 Use force_resolve for search suggestions 2019-11-07 12:25:34 -05:00
e56129111a Update CHANGELOG and bump version 2019-11-05 23:38:49 -05:00
0e1d6aa85c Update error messages for video extractor 2019-11-05 19:39:11 -05:00
bcdb8cd770 Fix default fo dark_mode 2019-11-04 17:08:13 -05:00
7b2ca55089 Fix escaping in email query 2019-11-04 12:26:05 -05:00
f6ef0b684a Fix word-break for links in channel RSS 2019-11-03 08:53:16 -05:00
02e1cdf210 Add support for '/yts/img' endpoint 2019-11-01 12:02:38 -04:00
b58950c574 Fix decoding for channel playlists extractor 2019-11-01 12:00:59 -04:00
833a60f29c Update pubsub to use client pool 2019-11-01 07:34:36 -04:00
f776d67c03 Update sed replace in Dockerfile 2019-10-28 12:49:03 -04:00
13e7cca1a4 Bump read timeout 2019-10-28 12:34:50 -04:00
0f3c477ff3 Remove dependency on ImageMagick (replace with rsvg-convert) 2019-10-28 10:49:05 -04:00
039cc30c07 Fix host replace in Dockerfile 2019-10-28 10:45:22 -04:00
25c8cd9246 Fix escaping for search params 2019-10-28 06:17:39 -04:00
c58841100a Fix extractor for channel community cursor 2019-10-27 21:44:17 -04:00
03e24cccd0 Add support for configurable administrator email 2019-10-27 14:18:07 -04:00
35f011758d Merge pull request #850 from XVnNzb2kFEhV9Tjm/master
Add Japanese translations
2019-10-27 14:09:31 -04:00
2ebfaf76f2 Refactor continuation token handling 2019-10-27 13:50:42 -04:00
0cf187dee7 Add support for image captcha in Google login 2019-10-27 00:19:05 -04:00
bdeb325bad Fix monkeypatch for HTTP::Client 2019-10-26 11:51:23 -04:00
a1225b6d0d Sanitize input to decode_length_seconds 2019-10-26 10:17:25 -04:00
f0368b02c4 Add Japanese translations 2019-10-26 18:34:25 +09:00
202de1436d Fix broken connections in pool 2019-10-25 23:06:08 -04:00
7f8746fcd4 Remove invalid connections from pool 2019-10-25 22:40:53 -04:00
e05a25d701 Vary user-agent 2019-10-25 18:02:33 -04:00
6930570fa2 Add HTTPClient pool 2019-10-25 12:58:16 -04:00
aba2c5b938 Remove code for /api/v1/insights 2019-10-25 12:25:57 -04:00
d82f86dcd9 Update entrypoint.postgres.sh (#843)
* Update entrypoint.postgres.sh
2019-10-22 07:37:26 -04:00
159b4f9734 Format source 2019-10-21 21:40:03 -04:00
46a737c7a1 Skip deleted videos in playlist 2019-10-21 19:00:56 -04:00
a731486ab7 Fix typo in locale regex 2019-10-21 11:11:29 -04:00
c3e57f1fdd Fix typo in footer 2019-10-20 23:02:16 -04:00
a9af484412 Merge pull request #839 from TheFrenchGhosty/crypto
Add protocol to the cryptocurrencies
2019-10-20 22:39:24 -04:00
007646774e Fix typo in English locale 2019-10-20 21:01:27 -04:00
2d78e35e16 Fix typo in syncing user preferences 2019-10-20 20:58:50 -04:00
7524b5e349 Move feed_menu and default_home into user preferences 2019-10-20 20:43:33 -04:00
2a04a48b89 Fix redirect for livestreams 2019-10-20 12:48:55 -04:00
3cbdaab81e Add protocol to the cryptocurrencies 2019-10-19 20:23:27 +02:00
8c858a5953 Merge pull request #829 from l10n-tw/translation
Update zh_TW translations.
2019-10-19 13:14:33 -04:00
1812958106 French Translation updated, custom playlists update, enhancements and corrections (#830)
* French Translation updated, custom playlists update and corrections
2019-10-19 13:13:49 -04:00
4e5324916c Merge pull request #836 from EsmailELBoBDev2/master
Update ar.json
2019-10-19 13:12:58 -04:00
1a77becc6a Update ar.json 2019-10-18 17:22:45 +00:00
23ccaea2ff Fix comment event listener 2019-10-18 12:44:11 -04:00
2a4b252a9d Only force resolve for www.youtube.com 2019-10-18 12:41:03 -04:00
9ae4edfee5 Update zh_TW translations. 2019-10-17 08:48:34 +08:00
bf48809b61 Allow unlisted playlists to be viewed from /api/v1/playlists/ 2019-10-16 08:21:26 -04:00
57a80a3c10 Add missing text to locales 2019-10-15 22:52:11 -04:00
3f3e52d7ae Fix indexId for created playlist video 2019-10-15 22:09:01 -04:00
5c69110658 Merge pull request #673 from omarroth/add-playlists
Add initial support for custom playlists
2019-10-15 21:29:34 -04:00
be055d9dcb Add support for custom playlists 2019-10-15 21:17:14 -04:00
1e34a61911 Fix white-space for RSS feeds 2019-10-14 21:07:07 -04:00
97bd1da2a2 Remove SSL redirect 2019-10-14 21:07:07 -04:00
330ffb803f Remove invalid source map directive for videojs-quality-selector 2019-10-14 21:07:07 -04:00
7b77f200be Merge pull request #817 from TheFrenchGhosty/master
French Translation updated - Rewording and corrections
2019-10-13 17:34:45 -05:00
15a3c8408f Assume feed means subscriptions feed 2019-10-12 23:15:53 +02:00
bc1784ed2b French Translation updated, rewording and corrections 2019-10-12 23:11:40 +02:00
55f0a82249 Remove Patreon links 2019-10-12 10:07:18 -04:00
7aada3f328 Avoid override for X-Client headers 2019-10-10 23:45:46 -04:00
dad885c051 Add YouTube-Client headers to HTTP requests 2019-10-10 22:03:39 -04:00
f5c7bbfda8 Add support for zh-TW translation 2019-10-09 10:23:26 -04:00
f832743009 Update Arabic translation 2019-10-09 16:22:39 +02:00
7551de6439 Merge pull request #791 from l10n-tw/translation
Add zh-TW translations.
2019-10-09 10:22:34 -04:00
e03b4b7505 Hide scrollbar for player menus 2019-10-05 11:51:31 -04:00
2d59fdd178 Fix default value for empty description 2019-10-04 17:04:43 -04:00
e61c8046f4 Fix z-index, scrollbar in player 2019-10-04 12:50:44 -04:00
c0796ac3d6 Add description to RSS body 2019-10-04 12:50:22 -04:00
68be24ffc6 Refactor process_video_params 2019-10-04 12:23:28 -04:00
9dcc87c705 Refactor storyboard generation 2019-10-04 10:26:02 -04:00
d36c536107 Merge pull request #792 from delightfulagony/master
Fixed bug that made the whole 'Invidious' home link div clickable. Solves #691
2019-10-04 10:25:10 -04:00
affeeb39de Fixed bug that made the whole 'Invidious' div clickable. Solves #691 2019-10-02 14:05:58 +02:00
f5d8a952f2 Add zh-TW translations. 2019-10-02 16:28:25 +08:00
da07f99d3d Bump supported Crystal version 2019-09-30 15:36:54 -04:00
eef66de68c Merge pull request #743 from girst/rssparams
Forward query string parameters from Atom feeds
2019-09-30 15:36:35 -04:00
4aa1180fce Forward parameters given in &params= from Atom feeds
Any parameters given in &params=... are appended to /watch URLs.  This
allows e.g. passing &raw=1&listen=1 to a playlist of music and use an
rss reader like newsboat as a media player, like so:

    https://invidio.us/feed/playlist/XXX?params=%26raw%3D1%listen%3D1

All three feeds--channels, playlists, subscriptions--are supported.
2019-09-30 17:48:13 +02:00
553d52a45e Update silvermine quality selector 2019-09-26 17:11:10 -04:00
347b153884 Merge pull request #765 from leonklingele/docker-travis-warnings
docker,travis: fail build on any warning
2019-09-24 20:51:12 -04:00
1e7c176481 Merge pull request #766 from leonklingele/travis-shallow-clone
travis: unshallowly clone Git repo
2019-09-24 20:50:48 -04:00
e390405d0c Update privacy policy 2019-09-24 20:47:49 -04:00
7378a84c96 travis: unshallowly clone Git repo
This fixes a compilation error if too many commits were made after the
most recent tag:

    fatal: No names found, cannot describe anything.
    In src/invidious.cr:60:19
      60 | CURRENT_VERSION = {{ "#{`git describe --tags --abbrev=0`.strip}" }}
    Error: expanding macro

See https://travis-ci.org/leonklingele/invidious/jobs/588672881#L275-L290.
2019-09-25 01:23:12 +02:00
b25013c4a2 docker,travis: fail build on any warning 2019-09-25 01:22:51 +02:00
6942916f13 Merge remote-tracking branch 'weblate/master' 2019-09-24 13:48:49 -04:00
f69f0b97f5 Add fix for index out of bounds during high load 2019-09-24 13:38:50 -04:00
4361ea9686 Update DB calls for 0.31.0 2019-09-24 13:38:50 -04:00
be2ee33273 Fix overflow for player controls 2019-09-24 13:38:50 -04:00
8c2ddb0255 Add config options for host binding and port 2019-09-24 13:38:50 -04:00
466a5a932b Add support for Turkish translation 2019-09-24 13:38:50 -04:00
8a3c6382e9 Add Turkish translation 2019-09-24 13:38:46 -04:00
a2b45120c5 Update Turkish translation 2019-09-24 19:31:37 +02:00
546ad52e11 Add Turkish translation 2019-09-24 19:31:37 +02:00
1aefc5b540 Update to Crystal 0.31.0, resolve compiler deprecation warnings, update dependencies (#764)
* shard: update to crystal 0.31.0

Additionally, no longer use the Crystal "markdown" library which has
been removed from the Crystal stdlib in version 0.31.0.
See https://github.com/crystal-lang/crystal/pull/8115.

Also fix some deprecation warnings using the following commands:

    find . \( -type d -name .git -prune \) -o -type f -exec sed -i 's/URI\.escape/URI\.encode_www_form/g' "{}" \;
    find . \( -type d -name .git -prune \) -o -type f -exec sed -i 's/URI\.unescape/URI\.decode_www_form/g' "{}" \;
    sed -i 's/while \%pull\.kind \!\= \:end_object/until \%pull\.kind\.end_object\?/g' src/invidious/helpers/patch_mapping.cr
2019-09-24 13:31:33 -04:00
1085ca4a2d Fix typo in Google login 2019-09-22 09:54:54 -04:00
9766322e99 Update videojs-quality-selector 2019-09-21 22:22:20 -04:00
cfb68e3bff Add additional handling for unplayable videos 2019-09-21 20:06:08 -04:00
a006963fb8 Update Google login 2019-09-21 20:06:08 -04:00
24c95c27c3 Merge pull request #752 from gnomus/master
[Fix][Docker] Update Package Repository for Install
2019-09-14 10:05:35 -04:00
3c40c0be6b Update Package Repository for Install 2019-09-13 15:06:44 +02:00
b1fc80b79a Update sub_count extractor 2019-09-12 21:09:23 -04:00
50d793e49b Hide video count for auto-generated channels 2019-09-12 13:11:21 -04:00
34c43b8349 Add support for abbreviated sub count in search 2019-09-12 13:06:27 -04:00
7002a316fd Filter movies from recommended videos 2019-09-12 13:06:10 -04:00
1f37faad42 Fix plurilzation regex 2019-09-09 18:09:21 -04:00
68cf24d100 Add support for channel redirects 2019-09-08 12:08:59 -04:00
86491da253 Fix map for recommended videos 2019-09-07 21:56:33 -04:00
90249cdafa Fix extractor for short_view_count_text 2019-09-07 20:09:08 -04:00
7c75111c41 Refactor error handling for API endpoints 2019-09-05 14:12:14 -04:00
7b53b6bfef Shrink continuation cursor for YouTube comments 2019-09-04 15:47:27 -04:00
fded5fd900 Update Spanish translation 2019-09-03 21:10:49 -04:00
950965bd4a Update French translation 2019-09-03 21:10:49 -04:00
3a359319fa Update German translation 2019-09-03 21:10:49 -04:00
d3dd82c699 Update Norwegian Bokmål translation 2019-09-03 21:10:49 -04:00
81f192bccb Update Esperanto translation 2019-09-03 21:10:49 -04:00
60a23febed Update Arabic translation 2019-09-03 21:10:48 -04:00
d0e280cbac Update ar.json (#728)
* Update ar.json
2019-09-03 21:04:04 -04:00
ecb62c8659 Italian translation update (#724)
* Italian translation update
2019-09-03 21:02:53 -04:00
12669df92b Merge pull request #729 from Infinisil/migrate
Provide db user in migrate-db-3646395.sh
2019-09-01 17:30:22 -04:00
44b2afeffa Merge pull request #675 from Dragnucs/patch-1
Add Postgres health check
2019-09-01 09:53:04 -04:00
70f435e909 Fix nillable for recommendedVideos 2019-08-31 16:24:13 -04:00
512d82071e Fix invalid viewCountText in related videos 2019-08-31 15:58:38 -04:00
3896230199 Fix type cast for viewCount 2019-08-31 01:11:45 -04:00
b902880a05 fix docker build (#734) 2019-08-31 01:11:25 -04:00
418526af16 Provide db user in migrate-db-3646395.sh 2019-08-29 02:25:15 +02:00
45ad212459 Handle redirects in /videoplayback 2019-08-27 09:53:44 -05:00
0f49d424d3 Refactor search params 2019-08-27 09:35:15 -05:00
01e42c8d6f Flatten viewCountText 2019-08-27 08:52:22 -05:00
26107bd6c3 Minor refactor 2019-08-27 08:08:26 -05:00
7d3ecd2297 Bump JS/CSS dependencies 2019-08-27 08:01:33 -05:00
16056661dd Update recommended videos extractor 2019-08-27 08:00:04 -05:00
059f50dad4 Add 'playlistThumbnail' to playlist objects 2019-08-21 19:08:11 -05:00
4c9975a7d9 Use accurate sub count when available 2019-08-21 18:35:54 -05:00
9f9cc1ffb5 Refactor search extractor 2019-08-21 18:23:20 -05:00
e768e1e277 Fix allowed_regions for globally blocked videos 2019-08-19 10:16:11 -05:00
acaf7b969a js: add support to detect alt, meta and control key in keydown handler (#704)
This fixes a quite severe user experience issue where pressing the
'alt', 'meta' and/or 'ctrl' key along with one of the supported keys
(e.g. 'f' to enter video fullscreen mode) would overwrite the default
browser behavior. In the case of 'f+meta' we would enter fullscreen
mode, and not open the browser search panel as one might expect.

This change is required to stay consistent with the way YouTube
handles keydown events.
2019-08-18 23:22:39 -05:00
2b94975345 Fix playlist_thumbnail extractor 2019-08-16 20:06:21 -05:00
e6b4e12689 js: add support for keydown events (#678)
* js: add support for keydown events

This will modify the player behavior even if the player element is unfocused.

Based on the YouTube key bindings, allow to

- toggle playback with space and 'k' key
- increase and decrease player volume with up / down arrow key
- mute and unmute player with 'm' key
- jump forwards and backwards by 5 seconds with right / left arrow key
- jump forwards and backwards by 10 seconds with 'l' / 'j'  key
- set video progress with number keys 0–9
- toggle captions with 'c' key
- toggle fullscreen mode with 'f' key
- play next video with 'N' key
- increase and decrease playback speed with '>' / '<' key

* js: remove unused dependency 'videojs.hotkeys.min.js'

Support for controlling the player volume by scrolling over it is
still retained by copying over the relevant code part from the
aforementioned library.
2019-08-16 16:01:14 -05:00
7eaac995bd Change font family to better native selection (#679) 2019-08-16 15:59:05 -05:00
a19cdb5e72 Fix season playlists 2019-08-16 15:46:59 -05:00
f54fbd057e Add prefers-color-scheme support (#601)
* Add prefers-color-scheme support

This should fix <https://github.com/omarroth/invidious/issues/559>.
The cookie storage format has been changed from boolean
("true"/"false") to tri-state ("dark"/"light"/""), so that users
without a cookie set will get dark mode if they have enabled the dark
theme in their operating system. The code for handling the cookie
state, along with the user's operating system theme, has been factored
out into a new function `update_mode`, which is called both at window
load and at the "storage" event listener, because the "storage" event
listener is only trigerred when a change is made to the localStorage
from another tab/window (for more info - see
<https://stackoverflow.com/a/4679754>).
2019-08-15 11:29:55 -05:00
19eceb4ecc Merge pull request #694 from 2secslater/player-preferences-typo-fix
Fix annoying typo in Preferences view for the player view
2019-08-14 19:17:29 -05:00
dcff1ec25f Merge pull request #698 from leonklingele/docker-build-on-alpine-edge
docker: use alpine:edge base image for building
2019-08-14 18:50:15 -05:00
567cda4cd3 docker: use alpine:edge base image for building
This fixes currently failing Docker builds.
kemalcr/kemal in version 0.26.0 requires Crystal 0.30.0 which is not
yet available on Alpine 3.10 (previously used as the Docker base image).
2019-08-15 01:37:25 +02:00
900d8790b3 Refactor geo-bypass 2019-08-14 18:09:07 -05:00
cad284519f Merge pull request #696 from leonklingele/shard-update-dependencies-and-crystal-version
shard: update dependencies and Crystal version
2019-08-14 18:07:26 -05:00
0727acf458 Merge pull request #695 from leonklingele/crystalfmt
Format Crystal files
2019-08-14 18:06:37 -05:00
d8813179be Merge pull request #682 from leonklingele/ci-travis-test-docker-stages
travis: also test Docker build
2019-08-14 17:59:53 -05:00
10d690c8fb shard: update to crystal 0.30.1 2019-08-14 23:44:27 +02:00
52f71cdda0 shard: update dependencies
This updates will/crystal-pg to 0.18.1 and kemalcr/kemal tp 0.26.0.
2019-08-14 23:44:03 +02:00
2a9a348164 Format Crystal files
Crystal 0.30.1 apparently introduced some breaking changes to their
code formatter which made CI fail.

The code was automatically formatted by running

    crystal tool format
2019-08-14 23:31:07 +02:00
00346781bb Fix annoying typo in Preferences view 2019-08-14 20:12:37 +00:00
4c6e92eea1 travis: also test Docker build 2019-08-10 17:00:50 +02:00
b63f469110 Fix typo in ConfigPreferences 2019-08-09 14:09:24 -05:00
f6f176afc1 Merge pull request #680 from leonklingele/add-player-styles
Add support for player styles
2019-08-09 13:49:51 -05:00
3de37a61c5 Update videojs-http-source-selector 2019-08-09 10:36:41 -05:00
2d955dae48 Force redirect for videos without audio 2019-08-09 10:36:22 -05:00
46577fb128 Add support for player styles
This currently includes the following styles:

- Invidious, the default
- YouTube, using a centered play button and always visible video control bar

Implements https://github.com/omarroth/invidious/issues/670.
Supersedes https://github.com/omarroth/invidious/pull/661.
2019-08-09 02:04:36 +02:00
37dba6ebfd Add Postgres health check 2019-08-07 08:07:36 +00:00
66b949bed1 Format history.ecr 2019-08-05 18:57:32 -05:00
c9a05187fb Update icon for unlisted videos 2019-08-05 18:57:32 -05:00
cc956583fb Fix detection of unavailable videos 2019-08-05 18:57:32 -05:00
14206efb09 Merge pull request #671 from leonklingele/shard-upgrade-dependencies
shard: update dependencies
2019-08-04 22:37:36 -05:00
5e6d7f5d16 shard: update dependencies 2019-08-05 04:19:09 +02:00
7a33831d14 Fix detection of premium content 2019-08-04 20:57:34 -05:00
4f120e19fd Fix overflow for channel description 2019-08-04 09:46:26 -05:00
37d064d836 Bump Crystal version 2019-08-04 09:16:29 -05:00
824150f89b Add Travis CI and pin dependencies (#655) 2019-08-04 09:10:32 -05:00
f7dc4cca2c Merge pull request #665 from leonklingele/improve-dockerfile
docker: various improvements to Dockerfile
2019-08-04 08:07:16 -05:00
ea39bb4334 docker: various improvements to Dockerfile
This includes the following changes:

- Use multi-stage build to run application in an optimized environment, see
  https://docs.docker.com/develop/develop-images/multistage-build/
- Run application on alpine instead of archlinux to further reduce image size
- Build Crystal application with --release for improved runtime performance
- Run application as non-root user for better security, see
  https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user
- Only rebuild Docker layers when required
2019-08-04 11:21:32 +02:00
5680d5a7be Sort dash representations by framerate 2019-08-02 15:24:38 -05:00
004246124b Merge pull request #664 from leonklingele/css-fix-jumpy-page-on-search-field-focus
Fix jumpy page on search field focus
2019-08-01 12:50:08 -05:00
c41beae99a Add fix for channels with empty descriptions 2019-08-01 07:49:33 -05:00
fe2cffb25b Fix jumpy page on search field focus 2019-08-01 09:35:57 +02:00
f71d5c429d Add description to channel pages 2019-07-31 19:29:16 -05:00
dce5816b18 Fix image url extractor 2019-07-31 19:16:09 -05:00
f99a7b2a8c Fix engagement for zero-view videos (#654)
Division by zero resulted in 'NaN'.

Fixes https://github.com/omarroth/invidious/issues/653.
2019-07-31 09:48:45 -05:00
ec36c69984 Update German translation 2019-07-31 09:37:43 -05:00
2458db03de Update Icelandic translation 2019-07-31 09:36:55 -05:00
7528b7bc1a Update german translation (#650) 2019-07-31 09:32:16 -05:00
8af33084ed French translation updated - New words, consistency (#643)
* New words translated, more consistency
2019-07-31 08:52:41 -05:00
f643175156 Fix typo in video extractor 2019-07-30 10:12:41 -05:00
0321dda1d7 Fix handling for video content warnings 2019-07-29 20:39:12 -05:00
ff5d79e3ee Update video extractor 2019-07-29 19:41:45 -05:00
4ee3ec09df Autofill search for playlists and communities page 2019-07-27 08:51:10 -05:00
cfe9d47fa0 Add support for '/embed/?list' 2019-07-25 10:36:35 -05:00
607d6125fc Add support for '/embed/live_stream' 2019-07-24 19:18:26 -05:00
6215259565 Add support for Google login verification 2019-07-22 13:28:36 -05:00
d034fecc89 Remove default arguments from function definitions 2019-07-20 20:33:44 -05:00
f18d8229c0 Refactor continuation protocol buffers 2019-07-20 20:18:08 -05:00
e736626953 Fix continuation for last page of playlists 2019-07-20 11:38:20 -05:00
c2c438637a Merge remote-tracking branch 'weblate/master' 2019-07-18 21:58:51 -05:00
94638fe42c Update translations 2019-07-18 21:52:25 -05:00
55ecfda39a Update Icelandic translation 2019-07-18 21:52:25 -05:00
d97a272aa5 Fix check for 2-step verification 2019-07-18 21:52:24 -05:00
80a1944b9d Update Icelandic translation 2019-07-19 01:52:11 +02:00
138cf943a9 Update Icelandic translation 2019-07-19 01:52:11 +02:00
c7e672e533 Update Icelandic translation 2019-07-19 01:52:11 +02:00
1b74a04efd Add 'force_resolve' to fix issues with rate limiting 2019-07-18 18:51:10 -05:00
290c7e6009 Disable autoplay in community tabs 2019-07-14 10:13:40 -05:00
e8a56e0fea Add '1.75' playback speed 2019-07-14 10:13:40 -05:00
1ae7b646b3 Merge pull request #633 from EsmailELBoBDev2/patch-4
Update ar.json
2019-07-14 10:13:04 -05:00
42e2d73ce2 Update ar.json 2019-07-14 06:07:02 +00:00
9e2a65a5ce Update CHANGELOG and bump version 2019-07-12 23:45:21 -05:00
fea20ea913 Add support for Icelandic translation 2019-07-12 21:07:40 -05:00
5b2480fff2 Merge remote-tracking branch 'weblate/master' 2019-07-12 21:04:20 -05:00
b0dca2a363 Minor refactor 2019-07-12 21:00:50 -05:00
59bbe72798 Update Esperanto translation 2019-07-12 19:05:25 +02:00
f99a30a57e Update Icelandic translation 2019-07-12 19:05:25 +02:00
aa4cb29621 Update Norwegian Bokmål translation 2019-07-12 19:05:25 +02:00
91ad4e396b Update Icelandic translation 2019-07-12 19:05:25 +02:00
351e17aacf Update Icelandic translation 2019-07-12 19:05:25 +02:00
6c8e09acdb Add Icelandic translation 2019-07-12 19:05:25 +02:00
1a7b341745 Update Google login 2019-07-12 12:04:39 -05:00
af592ea8c1 Fix extraction for ytInitialData 2019-07-11 07:27:54 -05:00
bb096a0357 Raise 400 on invalid request to '/feed/webhook' 2019-07-10 11:26:05 -05:00
3c226892c6 Add fix for empty title tag when fetching videos 2019-07-10 10:44:44 -05:00
47f6fe069a Add fix for unsupported attachment types 2019-07-09 23:09:16 -05:00
aa3c1d930b Remove empty representations from dash manifests 2019-07-09 10:08:27 -05:00
99b0b4f5b8 Fix escaping for materialized view SQL 2019-07-09 09:34:19 -05:00
bcd239ac2b Add community page 2019-07-09 09:31:04 -05:00
2cc25b1e6e Add administrator option to disable proxying 2019-07-08 12:15:18 -05:00
5fd3ed782f Add fix for #600 2019-07-08 10:00:08 -05:00
c34a24b633 Attempt to optimize query for subscription feed 2019-07-07 14:00:42 -05:00
775612ec5a Prevent embeds from appearing in watch history 2019-07-05 16:55:28 -05:00
fd43b16213 Add av01 formats to itag list 2019-07-05 13:43:44 -05:00
5a455ec4f7 Fix redirect for livestream segments 2019-07-05 12:08:39 -05:00
1277c3d156 Fix chunk size for livestreams 2019-07-05 11:35:04 -05:00
8033d1ca6d Fix chunking for livestream segments 2019-07-05 11:02:12 -05:00
28df6881a7 Try to prevent redirect for DASH streams 2019-07-04 23:29:28 -05:00
e5fa5df7be Chunk video files to bypass throttling 2019-07-04 23:29:28 -05:00
f7dbf2bdd4 Add 'pipe' for proxying assets 2019-07-04 23:29:28 -05:00
857c57daba Add support for Chinese translation 2019-07-04 23:11:04 -05:00
5515da3c2d Merge pull request #620 from outloudvi/l10n-zh-cn
Add translation of Simplified Chinese
2019-07-04 23:06:26 -05:00
cfc111f855 Add zh-CN translation 2019-07-04 13:08:01 +08:00
3dd4043827 Fix 404 for video thumbnails 2019-07-03 13:54:15 -05:00
351ecfae0f Fix body when proxying assets with status code > 300 2019-07-03 13:13:40 -05:00
b22393092b Fix protocol for video author thumbnails 2019-07-03 13:10:18 -05:00
1485ee8027 Fix channel thumbnail size in FireFox 2019-07-03 10:53:33 -05:00
60826c2d0c Fix author thumbnail for community replies 2019-07-03 10:12:03 -05:00
fb383458d7 Add /api/v1/search/suggestions 2019-07-03 10:11:47 -05:00
196ee1aa8b Add '/api/v1/channels/comments' 2019-07-02 18:53:19 -05:00
2df97cd2f5 Fix provided author for '/videos' endpoint 2019-07-02 07:29:01 -05:00
501b523680 Fit channel link to content 2019-07-01 14:26:27 -05:00
6efa6691b1 Clean up comment templating 2019-07-01 13:38:30 -05:00
c47f1ae236 Add Reddit comment permalink 2019-07-01 12:37:28 -05:00
aac240fe41 Resize comment thumbnails 2019-07-01 12:08:29 -05:00
041debcd93 Revert "Chunk videoplayback response to avoid throttling"
This reverts commit 818cd2454d.
2019-07-01 10:45:09 -05:00
0632a2d3c8 Fix logging for /watch URLs 2019-07-01 10:07:19 -05:00
9f40b3a873 Add missing table to check_tables 2019-07-01 09:29:52 -05:00
8fad0af935 Add caption styling 2019-06-30 22:46:08 -05:00
48ad744ebf Add support for default channel banners 2019-06-30 12:59:38 -05:00
556d5b0ca5 Resize channel thumbnails 2019-06-30 12:39:51 -05:00
e30d70b6d4 Refactor proxy_list into global 2019-06-28 21:17:56 -05:00
a58f5a925a Add banner to "/playlists" page 2019-06-28 21:00:28 -05:00
a3cc3c57fd Add cursor: none to player 2019-06-28 20:55:23 -05:00
0d0d3edeae Add thumbnail and banners to channel page 2019-06-28 20:48:24 -05:00
dd0be7c522 Revert "Push potential fix for #578"
This reverts commit ebfd7d2153.
2019-06-28 11:05:08 -05:00
9d2982fcd7 Fix typo in '/videoplayback' 2019-06-26 15:03:09 -05:00
ebfd7d2153 Push potential fix for #578 2019-06-26 14:44:06 -05:00
818cd2454d Chunk videoplayback response to avoid throttling 2019-06-26 14:43:33 -05:00
b31d1c06f5 Fix typo in StaticFileHandler 2019-06-23 15:41:44 -05:00
6cd884555c Patch StaticFileHandler to serve files from memory 2019-06-23 12:54:46 -05:00
47ef74a1bb Refactor commonly used request and response headers 2019-06-23 08:39:25 -05:00
cc6d6ddd66 Prevent firing _onStreamProgress after aborting 2019-06-22 20:08:37 -05:00
6a6cf015a6 Merge pull request #598 from tleydxdy/patch-1
let docker listen to 127.0.0.1 by default
2019-06-22 19:47:35 -05:00
ca79e81b39 Fix simpleText in comments extractor 2019-06-21 21:53:28 -05:00
a9e86cecf5 Fix comment extractor 2019-06-21 20:25:31 -05:00
5773b1c3e5 Update Ukrainian translation 2019-06-19 02:10:52 +02:00
b562b3410b Update Russian translation 2019-06-19 02:10:52 +02:00
f6440e9830 Update Esperanto translation 2019-06-19 02:10:52 +02:00
e43636e1e9 Update German translation 2019-06-19 02:10:52 +02:00
6783bf9903 Update README 2019-06-17 18:10:04 -05:00
807723c5b2 Fix status codes on error 2019-06-17 14:06:02 -05:00
d3c4936116 let docker listen to 127.0.0.1 by default 2019-06-17 10:46:37 -04:00
bbb40aef51 Fix event listener for notifications.js 2019-06-16 18:11:34 -05:00
485a3e29e7 Optimize get_subscriptions AJAX 2019-06-16 17:33:24 -05:00
1477f99c2c Add target="_blank" to embed titles 2019-06-16 14:49:00 -05:00
2e1f9d5fa9 Fix title URL for embedded videos 2019-06-16 13:14:56 -05:00
9dea251862 Fix typo in notifications.js 2019-06-16 12:57:56 -05:00
17edfd6573 Shorten timeout for AJAX 2019-06-16 12:55:17 -05:00
458e9d6cc7 Update license for sse.js 2019-06-16 09:46:09 -05:00
485459b8b2 Add clickable title for embedded videos 2019-06-16 09:41:33 -05:00
fcf377d26b Fix escaping for login page 2019-06-15 20:42:42 -05:00
3be1c9261f Fix sleep in pull_top_videos 2019-06-15 19:18:36 -05:00
38600b3347 Update list of domains for pulling Reddit comments 2019-06-15 18:58:21 -05:00
62f7f7a689 Update shard.yml 2019-06-15 10:34:31 -05:00
552f616305 Fix retry on timeout for AJAX requests 2019-06-15 10:09:32 -05:00
a3164177f8 Fix SMS for Google login 2019-06-15 10:09:25 -05:00
fa6bf21cd1 Update Google login 2019-06-09 13:48:31 -05:00
eecf76c1fb Fix typo in short_description 2019-06-08 16:34:55 -05:00
d1635cf24e Set max preference size 2019-06-08 16:04:55 -05:00
b43e9ed7e7 Refactor 'description_html' 2019-06-08 15:08:27 -05:00
12b2ab5da8 Add 'to_json' into respective structs 2019-06-08 13:31:41 -05:00
1c9085556c Add support for 'attribution_link' 2019-06-08 11:13:00 -05:00
9122f8acee Add title overlay to embedded videos 2019-06-08 10:52:47 -05:00
ef8c9f093c Add premiere date to watch page 2019-06-08 10:18:45 -05:00
801dffd571 Fix RSS content-type 2019-06-07 21:39:32 -05:00
0b1c57b39f Add notifications to private feed 2019-06-07 21:27:37 -05:00
2febc268f7 Fix warnings in Crystal 0.29 2019-06-07 21:13:50 -05:00
58995bb3a2 Add support for log levels 2019-06-07 21:13:50 -05:00
8c944815bc Minor refactor 2019-06-07 21:13:50 -05:00
f065a21542 Fix 404 handling for endpoints matching short URLs 2019-06-07 21:13:50 -05:00
27e032d10d Add '/api/v1/auth/feeds' 2019-06-07 21:13:50 -05:00
ab3980cd38 Enforce maximum email length 2019-06-07 21:13:50 -05:00
1db648a525 Merge pull request #577 from EsmailELBoBDev2/patch-3
Update ar.json
2019-06-07 10:26:36 -05:00
ce3b5b683d Merge pull request #580 from Vistaus/master
Updated Dutch translation
2019-06-07 10:25:57 -05:00
9d23f1298d Updated Dutch translation 2019-06-07 12:29:03 +02:00
3f791b65b5 Update ar.json 2019-06-07 04:46:46 +00:00
317d8703ca Optimize query for pulling popular videos 2019-06-06 21:33:30 -05:00
fda619f704 Fix 'unique_res' to keep resolutions unique within a representation 2019-06-06 21:32:39 -05:00
e4a0669da8 Fix typo in video param 2019-06-06 21:31:10 -05:00
89725df3dc Update CHANGELOG and bump version 2019-06-05 23:08:16 -05:00
51799844c9 Update Norwegian Bokmål translation 2019-06-05 18:11:25 +02:00
48de136e9d Update Esperanto translation 2019-06-05 18:11:25 +02:00
cb6f97a831 Update Esperanto translation 2019-06-05 18:11:25 +02:00
7e0cd0ab60 Update German translation 2019-06-05 18:11:25 +02:00
8521f04087 Use short URL for sharing videos 2019-06-05 11:10:23 -05:00
8ba45808be Fix typo in '/api/manifest/dash/id' 2019-06-04 21:14:57 -05:00
d876fd7f5b Add 'unique_res' option to '/api/manifest/dash/id' 2019-06-04 20:54:38 -05:00
352e409a6e Fix toggle_theme when visiting preferences with JS disabled 2019-06-04 20:13:58 -05:00
d6ec441c8e Add buffer for notification channels 2019-06-03 13:36:49 -05:00
d197497349 Add 'type' field to ChannelVideo and Video 2019-06-03 13:36:34 -05:00
d892ba6aa5 Refactor connection channel for delivering notifications 2019-06-03 13:12:06 -05:00
84b2583973 Fix insert for empty descriptions 2019-06-02 15:47:45 -05:00
108648b427 Optimize query for creating subscription feeds 2019-06-02 11:48:18 -05:00
71bf8b6b4d Refactor connect_listen for notifications 2019-06-02 07:41:53 -05:00
576067c1e5 Fix preference for web notifications 2019-06-01 18:06:44 -05:00
e23bab0103 Only add notification event listener after onload 2019-06-01 17:38:49 -05:00
4e111c84f3 Fix typo in '/watch' 2019-06-01 17:18:34 -05:00
8cecce7570 Fix audio mode for raw URLs 2019-06-01 16:28:08 -05:00
0338fd42e1 Add support for Web notifications 2019-06-01 16:09:17 -05:00
b3788bc143 Fix typo for feed_needs_update 2019-06-01 11:19:06 -05:00
18d66ddded Add 'needs_update' column for scheduling feed refresh 2019-06-01 10:19:18 -05:00
701b5ea561 Remove watched videos from notifications 2019-06-01 09:51:31 -05:00
86d0de4b0e Fix typo in post webhook 2019-05-31 10:29:45 -05:00
a95958f9f6 Fix videoplayback when encountering redirector URLs 2019-05-30 20:47:04 -05:00
69ab236f3f Fix typo in '/watch' 2019-05-30 19:00:38 -05:00
4cf3c6a616 HTML-escape strings to '/api/v1/auth/preferences' 2019-05-30 19:00:38 -05:00
da48bbf312 Add support for partial POST to '/api/v1/auth/preferences' 2019-05-30 19:00:38 -05:00
ac957db6d1 Provide dash qualities as reported by YouTube player 2019-05-30 19:00:30 -05:00
64464f23ae Add 'views' to channel_videos 2019-05-30 18:59:13 -05:00
52cb239194 Updated and corrected Dutch translation (#560)
* Updated and corrected Dutch translation
2019-05-29 18:08:42 -05:00
efd54b7523 Add 'comments' as URL parameter 2019-05-29 14:24:30 -05:00
2aca57cb82 Update specs 2019-05-28 10:04:11 -05:00
d68baf08cb Shrink h1 on mobile 2019-05-28 10:04:04 -05:00
a7578aa709 Update videojs-vtt-thumbnails version 2019-05-27 20:55:34 -05:00
a8261d376a Merge remote-tracking branch 'weblate/master' 2019-05-27 14:59:49 -05:00
fc346b4efd Add 'View playlist on YouTube' 2019-05-27 14:54:50 -05:00
ad09e734da Refactor refresh_feeds 2019-05-27 14:48:57 -05:00
a674fea1c2 Update French translation 2019-05-27 19:53:00 +02:00
9e22b34fac Update Spanish translation 2019-05-27 19:53:00 +02:00
fe24408620 Update English (United States) translation 2019-05-27 19:53:00 +02:00
c07ad0941c Fix typo in refresh_feeds 2019-05-27 12:51:18 -05:00
2f02b38b62 Merge pull request #557 from EsmailELBoBDev2/patch-1
Update ar.json
2019-05-27 12:25:21 -05:00
3ac766530d Add proper queuing for feed events 2019-05-27 12:23:15 -05:00
de77c71042 Add "local" to "next video" URLs 2019-05-27 12:16:22 -05:00
9c854a1757 Update ar.json 2019-05-27 17:04:11 +00:00
f66fa1150e Fix inconsistency in translation 2019-05-27 11:56:52 -05:00
f820706e4f Truncate password to 55 bytes 2019-05-27 09:06:32 -05:00
29e9e0f2cc Provide empty response on 204 2019-05-27 08:35:38 -05:00
2933093e17 updated arabic, FINALLY (#553)
* Update ar.json
2019-05-26 19:15:49 -05:00
71cd8918be Fix URI for storyboard extractor 2019-05-26 18:55:22 -05:00
c049ba59ff Add stub for '/timedtext_video' 2019-05-26 13:49:35 -05:00
51c5f28443 Add config option for updating feeds on event 2019-05-26 12:06:01 -05:00
bb1ed902a9 Trigger feed update when modifying subscriptions 2019-05-26 11:34:08 -05:00
b016a60a75 Add triggers for updating feeds 2019-05-26 11:28:54 -05:00
890d485bb5 Fix formatting 2019-05-26 10:53:56 -05:00
208bb2d72f Catch connection reset when proxying files 2019-05-26 09:41:12 -05:00
267bf289c4 Exclude /api/v1/auth/notifications from middleware 2019-05-21 10:08:49 -05:00
b3e083d866 Add POST /api/v1/auth/subscriptions 2019-05-21 09:01:17 -05:00
a675c64c2d Refactor DBConfig 2019-05-21 09:00:35 -05:00
8b50c8515f Fix content-type for captions 2019-05-20 20:22:01 -05:00
1eaa377583 Add Greek translation (thanks Iris!) 2019-05-20 13:06:54 -05:00
4345b1d930 Reset playbackRate once player has caught up to source 2019-05-20 12:15:48 -05:00
06bf0c2622 Copy proxy_file in chunks 2019-05-20 12:06:44 -05:00
3ac8de0a64 Fix proxy_file when response body is empty 2019-05-19 07:13:13 -05:00
f237fd9847 Fix CORS headers for proxied assets 2019-05-19 07:12:45 -05:00
5730280325 Only modify cues for auto-generated captions 2019-05-18 20:27:19 -05:00
ab4df7e078 Fix response for proxied assets 2019-05-18 19:15:47 -05:00
b52e6c99ab Update Ukrainian translation 2019-05-18 19:15:36 -05:00
7dab548522 Update Russian translation 2019-05-18 19:15:35 -05:00
785c341822 Update CloudTube link in README 2019-05-16 20:53:38 -05:00
7d2e1f63b5 Refactor watched_widget.js 2019-05-16 20:51:17 -05:00
e119459411 Add GET '/authorize_token' 2019-05-15 12:26:29 -05:00
97ef2191fd Add 'hsts' as config option 2019-05-14 08:21:01 -05:00
e833ccf309 Fix comments for age-restricted videos 2019-05-14 08:18:57 -05:00
a4134d30fa Fix comedy genre URL 2019-05-14 08:02:55 -05:00
6069fd02d3 Merge remote-tracking branch 'weblate/master' 2019-05-11 11:19:18 -05:00
bb15dc57a4 Fix font color for captions button 2019-05-11 11:09:45 -05:00
bdfe170c3b Fix length seconds for videos with longer duration 2019-05-11 10:59:47 -05:00
0fa2ba53ab Update Italian translation 2019-05-11 17:42:15 +02:00
4bb657debf Update Dutch translation 2019-05-11 17:42:15 +02:00
dd12840e34 Update French translation 2019-05-11 17:42:15 +02:00
b027dcfec9 Update Russian translation 2019-05-11 17:42:15 +02:00
9e9b6f1542 Update German translation 2019-05-11 17:42:15 +02:00
7cd66e20d0 Fix typo in X-XSS-Protection 2019-05-10 16:48:38 -05:00
d93df15eff Update licenses 2019-05-10 15:33:23 -05:00
ddfd20d997 Fix CSP for subdomains 2019-05-10 15:29:10 -05:00
fd8af88493 Use separate asset version for cache busting 2019-05-09 22:58:34 -05:00
bfa488f77d Add option to toggle theme without reload 2019-05-09 11:50:44 -05:00
03be793930 Fix typo in player.js 2019-05-09 08:36:36 -05:00
37d88d5ff7 Remove referer from XHR 2019-05-08 09:16:11 -05:00
4616f889fd Add simple form of cache busting 2019-05-08 08:58:10 -05:00
59cbf95c4f Update licenses 2019-05-06 11:27:11 -05:00
058711d3a8 Refactor player.js 2019-05-06 11:23:14 -05:00
2ddc61fa5c Refactor embed.js 2019-05-06 10:37:22 -05:00
e04b7d0f01 Fix video previews for embeds 2019-05-06 10:28:20 -05:00
2faa2ed1f4 Refactor watch.js 2019-05-06 09:48:33 -05:00
5e2889e776 Update CHANGELOG and bump version 2019-05-05 23:02:43 -05:00
5bda36fb28 Remove source map URL from videojs.hotkeys.min.js 2019-05-05 20:45:46 -05:00
53fbb257b9 Update fix for HTTP Client 2019-05-05 19:03:56 -05:00
65a32d6e20 Update fix for crystal-lang/crystal#7383 2019-05-05 17:47:45 -05:00
92450920d4 Fix backticks in locales 2019-05-05 17:46:58 -05:00
0099a9822e Refactor subscribe_widget 2019-05-05 08:38:55 -05:00
0cf86974dd Add redirect for videos with no audio sources 2019-05-04 10:47:54 -05:00
716705aa15 Add mouse hover for video previews 2019-05-04 08:43:41 -05:00
757993064e Fix view_count_text extractor for livestreams 2019-05-04 08:43:41 -05:00
3f738cf905 Tweak styling for thumbnail video length 2019-05-04 08:43:34 -05:00
570715100b Fix text size for premieres 2019-05-03 18:00:16 -05:00
ad8750b40d Fix referer escaping 2019-05-03 12:15:21 -05:00
757ea93393 Fix typo 2019-05-03 09:15:53 -05:00
dbd5a222d5 Add '/watch_videos' endpoint 2019-05-03 09:11:38 -05:00
bba80bc80f Fix content-type for HEAD '.jpg' 2019-05-03 08:23:11 -05:00
094143bc28 Update Norwegian Bokmål translation 2019-05-02 21:38:28 +02:00
24a335d304 Update Esperanto translation 2019-05-02 21:38:28 +02:00
c62b318b9e Update Basque translation 2019-05-02 21:38:28 +02:00
ea5c7c321a Update Esperanto translation 2019-05-02 21:38:28 +02:00
6d92775ab5 Add video previews 2019-05-02 14:36:32 -05:00
1a9360ca75 Minor formatting changes 2019-05-01 20:03:39 -05:00
22b9bbe702 Add support for anonymous playlists 2019-05-01 08:03:58 -05:00
6fb44083ec Update source and licenses 2019-05-01 07:40:18 -05:00
ba02be08bb Merge pull request #303 from glmdgrielson/annotations
Add annotation player
2019-05-01 07:14:10 -05:00
56fe3ede5b Add annotation preferences 2019-04-30 23:39:04 -05:00
e48a000784 Add annotation player
This addresses issue #110 from master. Yay for adding annotations back!
2019-04-30 21:19:13 -05:00
6d1c150ff5 Fix typo 2019-04-30 21:18:35 -05:00
21190a240f Add support for adding banner to site header 2019-04-30 21:17:34 -05:00
8a525bc131 Add '/api/v1/auth/preferences' 2019-04-30 21:01:57 -05:00
734905d1f7 Bump max-age for HSTS 2019-04-30 20:53:56 -05:00
90edf2fc60 Add 'debug' topic to /api/v1/auth/notifications 2019-04-30 20:48:48 -05:00
e3f37c14db Add glibc to Docker dependencies 2019-04-30 08:56:24 -05:00
c6c92184d9 Fix duplicate id on watch page 2019-04-29 09:34:49 -05:00
c4fbc65354 Provide bundled streams first in download widget 2019-04-28 18:51:10 -05:00
54d250bde4 Add 'since' to '/api/v1/auth/notifications' 2019-04-28 18:14:16 -05:00
ef309bd8d0 Translate value for 'familyFriendly' 2019-04-28 14:56:06 -05:00
6cdb6ec711 Add support for plurlization to locales 2019-04-28 14:50:17 -05:00
03891b66b6 Show view count for related videos 2019-04-28 14:14:44 -05:00
42dd6326d5 Remove unnecessary index 2019-04-28 14:11:23 -05:00
5c4defdb8e Add support for '/c/:user/live' 2019-04-28 14:11:23 -05:00
f08d53b0c6 Add view count to livestreams in search results 2019-04-28 14:11:23 -05:00
6859b85266 Add 'lang' to HTML tag 2019-04-28 10:05:15 -05:00
075adb4f03 Add http-source-selector 2019-04-28 10:05:15 -05:00
5ce72a3461 Updated most of ar.json (#508)
* Update ar.json
2019-04-25 13:09:38 -05:00
8c2958b86d Add 'local=true' to hlsUrl 2019-04-25 12:41:35 -05:00
f15b7cebac Try to prevent timeout in /data_control 2019-04-24 20:18:35 -05:00
f6d8df1e83 Update videojs-share 2019-04-24 08:48:34 -05:00
19ed5bf993 Add support for 'user' URLs in NewPipe import 2019-04-22 15:39:57 -05:00
5567e2843d Force refresh after receiving PubSub notification 2019-04-22 11:15:19 -05:00
0a8e20fd60 Revert "Update French translation"
This reverts commit a2533af116.
2019-04-22 11:07:41 -05:00
558c4341e4 Merge remote-tracking branch 'weblate/master' 2019-04-22 10:51:08 -05:00
250860d92c Add '/api/v1/auth/subscriptions' 2019-04-22 10:40:29 -05:00
64aecba7a0 Add option to change passwords 2019-04-22 10:18:17 -05:00
3689b08237 Update Esperanto translation 2019-04-20 20:33:58 +02:00
30e567e8b6 Fix published time for /api/v1/auth/notifications 2019-04-20 12:41:51 -05:00
ddd74549fe Fix description field for /api/v1/videos 2019-04-20 10:50:55 -05:00
14620c32aa Don't overwrite published date for channel_videos 2019-04-20 10:18:54 -05:00
fb7068d415 Add '/api/v1/notifications' 2019-04-20 09:33:45 -05:00
8614ff40df Add support for Ukranian and Esperanto 2019-04-19 11:20:18 -05:00
aa10a9d899 Language fixes (#366)
* Language fixes
2019-04-19 11:14:11 -05:00
a5b8feca93 Merge remote-tracking branch 'weblate/master' 2019-04-19 10:31:14 -05:00
486e47f985 Add missing text to locales 2019-04-19 10:28:12 -05:00
bb5a1ad513 Add 'continue_autoplay' preference 2019-04-19 09:38:27 -05:00
eac0a52f10 Fix shiftKey for player hotkeys 2019-04-19 09:20:41 -05:00
7ac00258cc Update Ukrainian translation 2019-04-19 15:49:24 +02:00
e3a0ae8a4b Update Russian translation 2019-04-19 15:49:24 +02:00
2953159f8b Update Polish translation 2019-04-19 15:49:24 +02:00
9693363c76 Update Norwegian Bokmål translation 2019-04-19 15:49:24 +02:00
a2533af116 Update French translation 2019-04-19 15:49:24 +02:00
b4aecb5b74 Update Spanish translation 2019-04-19 15:49:24 +02:00
15aa2498b5 Update Esperanto translation 2019-04-19 15:49:24 +02:00
0372ff0c2c Update shard.yml 2019-04-19 08:49:08 -05:00
7a8d5a391a Fix downcasting with usernames 2019-04-18 19:17:58 -05:00
2a6c81a89d Add authentication API 2019-04-18 16:23:50 -05:00
301871aec6 Bump version 2019-04-18 08:37:29 -05:00
25359e5320 Fix typo in 404 handler 2019-04-17 14:46:00 -05:00
b6fff53b21 Refactor HTTP::Client calls into make_client 2019-04-17 09:06:31 -05:00
ae7b5fac74 Fix handling for comments 2019-04-16 08:20:25 -05:00
26168a9520 Refactor CSRF tokens (using format in #473) 2019-04-15 23:23:40 -05:00
698dfca319 Add migrate script for annotations.sql 2019-04-15 11:17:23 -05:00
3bcb98e644 Add config option to cache annotations from IA 2019-04-15 11:13:09 -05:00
2deb436ccd Update placeholder text in new locales 2019-04-15 10:45:00 -05:00
2b3405c4a9 Merge remote-tracking branch 'weblate/master' 2019-04-14 19:48:47 -05:00
677a465630 Fix file formatting for locales 2019-04-14 19:48:21 -05:00
8ecb76fc0b Merge remote-tracking branch 'weblate/master' 2019-04-14 19:40:47 -05:00
0178013fc1 Update Ukrainian translation 2019-04-14 19:39:17 -05:00
c273a8ee69 Update Ukrainian translation 2019-04-15 02:23:36 +02:00
0ed56b706b Update Russian translation 2019-04-15 02:23:32 +02:00
4582b6cf76 Update Esperanto translation 2019-04-15 02:23:31 +02:00
05513bcd1e Fix "placeholder=" text in locales 2019-04-14 19:17:56 -05:00
f5dd135ed8 Add 'view as playlist' option to trending page 2019-04-14 19:04:10 -05:00
9c8f85741c Fix search when keyword matches operator 2019-04-14 18:37:43 -05:00
ca515f2eae Use headset icon for audio mode 2019-04-14 18:24:25 -05:00
80c1ebd768 Support 'sort_by' in reddit /api/v1/comments 2019-04-14 18:08:00 -05:00
b51fd7fc13 Add view count to video items 2019-04-14 17:43:44 -05:00
efe86c37b2 Show subscribe text when not logged in 2019-04-14 17:10:32 -05:00
d20a4a8bfc Fix grid size for smaller devices 2019-04-14 17:04:52 -05:00
9da2d11e80 Add Ukrainian translation 2019-04-14 01:58:01 +02:00
5ef554aecf Add Esperanto translation 2019-04-14 01:41:17 +02:00
9a7fea0447 Add playlist support to embedded videos 2019-04-13 14:26:32 -05:00
ae52ff93b2 Fix 404 for annotations endpoint 2019-04-13 08:28:59 -05:00
80a567bf1e Fix video count in playlist extractor 2019-04-12 16:37:35 -05:00
ce2a3361eb Fix missing author name for channel_videos 2019-04-12 16:29:23 -05:00
ca9ea109c6 Add id to AdaptationSets 2019-04-12 11:19:54 -05:00
2a33a746f0 Remove content type from videoplayback redirects 2019-04-12 11:08:33 -05:00
e8c5246645 Fix share button 2019-04-12 09:31:05 -05:00
98295b85ab Add webm to dash manifests 2019-04-12 08:04:59 -05:00
af1823db8c Fix url in storyboards 2019-04-12 07:29:47 -05:00
a2ab6b89f1 Fix width and height in manifest 2019-04-11 22:31:45 -05:00
5de300fb35 Fix default background color for player 2019-04-11 17:03:37 -05:00
62a4c82e95 Add storyboards and fix image caching 2019-04-11 17:00:00 -05:00
d522c864d4 Add dashUrl to /api/v1/videos 2019-04-11 15:28:03 -05:00
aa8ff7ace3 Always use ucid for channel search 2019-04-11 13:52:09 -05:00
4e6a931de3 Make check_tables config option 2019-04-11 12:13:25 -05:00
5e141e869d Add subtitles to download widget 2019-04-11 12:08:43 -05:00
611555514c Remove unnecessary XML declaration 2019-04-11 11:53:07 -05:00
e1c78fcbd3 Update view names to avoid collisions 2019-04-10 19:56:38 -05:00
8640d6bb1e Add 'extract_polymer_config' 2019-04-10 18:02:13 -05:00
28d5bedcc7 Speed up table creation 2019-04-10 17:16:18 -05:00
373b890e1d Log command before execution 2019-04-10 17:09:36 -05:00
aad0f90a9d Add 'sign_token' 2019-04-10 16:58:46 -05:00
5dc45c35e6 Automatically migrate database 2019-04-10 16:23:37 -05:00
b8c87632e6 Add feed link to watch history 2019-04-09 17:41:25 -05:00
c85903383a Fix to_json for storing user preferences 2019-04-08 09:46:58 -05:00
4aededf038 Add media-src blob: to CSP 2019-04-08 09:39:47 -05:00
4bc6501b8d Add 'blob' to CSP 2019-04-08 09:36:12 -05:00
a1b3b47573 Add CSP, STS, and Referrer-Policy 2019-04-07 14:04:33 -05:00
c8cf4fe09c Fix subscription_ajax for Google accounts 2019-04-07 12:59:12 -05:00
ca07d75405 Add '--version' to command line 2019-04-06 08:32:36 -05:00
c5001f3620 Add role to psql scripts 2019-04-06 07:38:33 -05:00
8d5f941829 Update CHANGELOG and bump version 2019-04-05 23:04:56 -05:00
c3bfaa1c33 Merge remote-tracking branch 'weblate/master' 2019-04-05 17:25:39 -05:00
ea0d52c0b8 Add support for Spanish translation 2019-04-05 17:24:06 -05:00
fcb37f40f6 Update Norwegian Bokmål translation 2019-04-06 00:13:29 +02:00
7f30d07f4c Update Russian translation 2019-04-06 00:13:29 +02:00
59744a96fa Add Spanish translation (#466)
* Add Spanish translation
2019-04-05 17:13:25 -05:00
b82fb58dc4 Fix typo in handling 'controls' param 2019-04-04 15:05:54 -05:00
c728214af7 Fix batch importing of channels 2019-04-04 14:49:32 -05:00
305d636217 Add multithreading to pubsub job 2019-04-04 07:49:53 -05:00
31312747e9 Fix from_yaml in ConfigPreferences 2019-04-03 19:04:33 -05:00
5ef288b840 Add 'sort_by' to /api/v1/comments 2019-04-03 18:42:12 -05:00
f6615a490d Allow disabling download widget for specific videos (in compliance with DMCA) 2019-04-03 14:54:38 -05:00
bd4f5ebcdf Add option to configure default user preferences 2019-04-03 11:38:41 -05:00
1fd7ff5655 Add scheme to author thumbnail 2019-04-02 08:51:28 -05:00
ab7e1b42bd Add '/api/v1/annotations/:id' 2019-03-31 22:07:17 -05:00
a7723e6ded Implement "fields" parameter from the YouTube Data API (#429)
* Implement fields handling
2019-03-30 20:18:34 -05:00
1b78001201 Use struct for allocations 2019-03-29 16:30:02 -05:00
36c0eae7ed Add /feeds/videos.xml 2019-03-29 15:50:18 -05:00
0ae43e242f Fix pubsub job for newly added channels 2019-03-29 10:03:13 -05:00
bafd4f1860 Update Arabic translation 2019-03-29 09:08:10 -05:00
388e58bf1e Update handling for preferences 2019-03-28 13:43:40 -05:00
eee973fe86 Fix host in redirect 2019-03-27 15:25:08 -05:00
61769c6f9c Fix local redirects in /videoplayback 2019-03-27 15:00:22 -05:00
665ef9424e French translation updated - New words translated, even more consistency (#451)
* French Translation Updated
2019-03-27 12:23:54 -05:00
7a0f0ca5ce Fix thin mode 2019-03-27 11:31:05 -05:00
63be05146d Fix expire for prefs cookie 2019-03-27 11:15:23 -05:00
9239cfb3c1 Fix redirect for shortened video urls 2019-03-27 05:28:53 -05:00
6fd24ad54f Add cancel button to search bar 2019-03-26 17:45:39 -05:00
d70933c9f2 Fix typo in allow_ratings 2019-03-26 13:47:06 -05:00
9ac2ddcb4d Fix premiere_timestamp without scheduledStartTime 2019-03-26 13:46:07 -05:00
8d9569e06b Add 'unlisted' icon to watch page 2019-03-26 13:01:23 -05:00
02f8e657f3 Update French translation 2019-03-25 20:27:35 -05:00
3dc711ab9d Merge remote-tracking branch 'weblate/master' 2019-03-25 20:12:43 -05:00
702922dd88 Update Polish translation 2019-03-25 19:38:30 -05:00
2583c809ca French translation updated - More consistency (#436)
* French translation updated
2019-03-25 19:26:18 -05:00
b6071ce6dc Update Polish translation 2019-03-25 23:11:09 +01:00
186132bb98 Update French translation 2019-03-25 23:11:09 +01:00
c15790f230 Use user preferences in embedded videos 2019-03-25 17:09:53 -05:00
13924a8353 Fix duplicate file extension 2019-03-25 17:09:20 -05:00
fd84b57ac8 Use tuples for "qualities" in API endpoints 2019-03-25 10:00:18 -05:00
591a6b330a Remove 'crawl_threads', fix sleep in fibers 2019-03-25 09:23:42 -05:00
a3b767bb13 Add live now indicator to playlists 2019-03-24 09:10:14 -05:00
847ee61bf4 Fix typo in APIHandler 2019-03-24 09:01:18 -05:00
0c6cede287 Format files and trim trailing whitespace 2019-03-23 14:05:13 -05:00
ce4b07d7d7 Fix thumbnail for deleted videos 2019-03-23 12:56:52 -05:00
a1f49b279f Rename migrate scripts 2019-03-23 11:34:16 -05:00
1c8075ca40 Add 0.25 to list of playback rates 2019-03-23 11:14:15 -05:00
56b0952cd1 Update sources 2019-03-23 11:09:31 -05:00
1c152f6cad Add padding to thumbnails 2019-03-23 10:24:52 -05:00
57c05354c2 Move 'pretty=1' into middleware 2019-03-23 10:24:30 -05:00
90b5479735 Fix error message for invalid video ID 2019-03-22 22:17:39 -05:00
1079c4516c Automatically recreate views with outdated schema 2019-03-22 16:53:16 -05:00
7381985c79 Fix typo in logger 2019-03-22 15:50:41 -05:00
fd26f9f34e Add support for premieres to search and feed 2019-03-22 14:54:35 -05:00
88b70973cc Add 'premiereTimestamp' to /api/v1/videos 2019-03-22 14:53:19 -05:00
f0658bbd09 Add 'liveNow' to subscription feed 2019-03-22 14:52:57 -05:00
661e07c8db Merge pull request #423 from Perflyst/patch-1
Update contact email in shard.yml
2019-03-20 11:40:47 -05:00
6e51189d4d Expire nonce on register 2019-03-20 11:02:04 -05:00
dfdb7c835b Update contact email in shard.yml 2019-03-20 16:33:31 +01:00
f1d7aa09e4 Add fix for Google cookies with no extension 2019-03-20 09:48:37 -05:00
88e6b865d9 Update contact email for text captcha 2019-03-20 09:20:51 -05:00
d5c6d74f14 Fix loading icon size 2019-03-20 09:20:31 -05:00
202f3d36c4 Bake in branch, commit, version 2019-03-19 20:50:34 -05:00
7a54b1d36a Fix player size with JS disabled 2019-03-19 20:13:26 -05:00
9091b36249 Don't require CAPTCHA for login 2019-03-19 20:13:16 -05:00
21285d9f6d Fix file extension for download widget 2019-03-17 18:52:01 -05:00
2ebc773863 Add mixes to genre channels 2019-03-17 18:31:11 -05:00
44f4057876 Fix issue with cookie expiration 2019-03-17 12:40:24 -05:00
d85020079f Add shortcuts for changing playbackRate 2019-03-17 12:21:55 -05:00
956dc382ea Clean up player CSS 2019-03-17 12:21:55 -05:00
99aa214859 Add 'thumbnail_id' to playlists 2019-03-17 12:21:47 -05:00
405e98f429 Add 1.25 and 0.75 playback rates 2019-03-16 09:17:57 -05:00
a8c375fc95 Update copyright notice 2019-03-15 11:44:53 -05:00
4a56a2cad6 Remove outline when clicking on player 2019-03-15 08:34:37 -05:00
438945907d Merge branch 'master' of github.com:omarroth/invidious 2019-03-14 21:12:32 -05:00
db245add0f French translation updated, some translation restored (#412)
* French translation updated
2019-03-14 20:28:27 -05:00
986699bce5 Update French translation 2019-03-14 23:03:33 +01:00
d1803320f1 Update Russian translation 2019-03-13 17:21:24 +01:00
d4609519f0 Merge pull request #411 from EsmailELBoBDev2/master
Update ar.json
2019-03-13 11:21:20 -05:00
2b4a6284e4 Update ar.json 2019-03-13 12:26:43 +00:00
3c6be7e04c Merge weblate into master 2019-03-13 00:02:21 -05:00
e738e57e26 Add 'local' option to preferences 2019-03-12 21:05:49 -05:00
21ebc398fa Add privacy policy 2019-03-12 20:58:25 -05:00
1ac611239e Update Polish translation 2019-03-12 16:14:34 +01:00
97e6047725 Update Norwegian Bokmål translation 2019-03-12 16:14:34 +01:00
cf3f0fcc39 Add max-aspect-ratio to player 2019-03-12 10:12:47 -05:00
19c32bf993 Calculate player height based on viewport 2019-03-12 10:01:36 -05:00
e86eb16d91 Add temporary fix for crystal-lang/crystal#7383 2019-03-11 16:17:40 -05:00
1fcd1ff3e8 Add better fallback for '/videoplayback' 2019-03-11 14:07:55 -05:00
58f4212aa8 Remove 'host' from query params 2019-03-11 13:32:46 -05:00
f01152eda1 Add 'host' to '/videoplayback' 2019-03-11 13:14:30 -05:00
11ff40bcd6 Fix paths for 'local=true&raw=1' 2019-03-11 12:55:09 -05:00
46e985b306 Add 'dark_mode', 'thin_mode' as query parameters 2019-03-11 12:44:25 -05:00
fdc014af67 Add '&local=true' to watch and embed pages 2019-03-11 11:43:48 -05:00
bf11a46abe Bump expire time for pubsub 2019-03-11 10:48:38 -05:00
8f41130a14 Update and add missing text to locales 2019-03-08 22:23:17 -06:00
e96c4732d6 Update Russian translation 2019-03-09 05:02:13 +01:00
a1d38a6940 Update Norwegian Bokmål translation 2019-03-09 05:02:13 +01:00
9b8703cf49 Fix tab name for auto-generated channels 2019-03-08 22:01:59 -06:00
c4d77bc18a Use host_url for generating thumbnails 2019-03-08 14:43:31 -06:00
c69fbb72d3 Fix typo in README 2019-03-08 12:01:43 -06:00
64e4791dca Update README.md 2019-03-08 12:01:31 -06:00
bc1e62ce51 Add 'external_port' 2019-03-08 11:37:52 -06:00
79c1040796 Remove sourceMap link for JS source 2019-03-08 10:36:14 -06:00
eaf55bf12c Fix styling for watch indicator 2019-03-08 10:35:18 -06:00
ce528c9783 Update sorting for subscriptions 2019-03-08 10:34:52 -06:00
b9c7501012 Fix typo in pubsub update 2019-03-07 21:49:52 -06:00
ae10052aaf Fix date parsing for RSS feeds 2019-03-07 21:13:54 -06:00
10abcd519f Add RSS alternate to channel and subscription pages 2019-03-07 13:34:33 -06:00
1d6c763e92 Merge pull request #397 from dimqua/patch-1
(preferences) fix word wrap
2019-03-07 13:29:44 -06:00
3fa0ce99f0 Merge pull request #403 from em92/patch-1
Add alternate link with rss feed to playlist page
2019-03-07 13:29:14 -06:00
7380585f00 Add alternate link with rss feed to playlist page 2019-03-07 12:26:30 +05:00
7557ffcda1 Mark deleted channels in /subscription_manager 2019-03-06 09:54:56 -06:00
bc9d70109c Fix typo in index 2019-03-06 08:45:04 -06:00
7448159d6b Update CHANGELOG and bump version 2019-03-05 23:55:24 -06:00
a65998274f Defer loading videojs-share until last 2019-03-05 15:22:04 -06:00
b2f4a0276a Remove "lease_seconds" from pubsub response 2019-03-05 14:43:09 -06:00
99d9c3a900 Fix rows for subscribe job 2019-03-05 14:41:38 -06:00
e4dc430c74 Update hub topic URL 2019-03-05 13:46:08 -06:00
1435516a9c Add port number to host URL 2019-03-05 12:56:59 -06:00
2a1befb41a Fix sorting for latest_only 2019-03-05 07:17:29 -06:00
2840d98fd4 Fix tagging for current version 2019-03-04 15:17:09 -06:00
32b9c0c840 Fix tagging for current branch 2019-03-04 14:43:17 -06:00
f16273772e (preferences) fix word wrap 2019-03-04 23:14:24 +03:00
6375a62465 Clean up handling for callback endpoint 2019-03-04 11:07:27 -06:00
aa63c3f70e Update formatting and default feed menu 2019-03-04 10:46:58 -06:00
004fb96b2f Add nonce to pubsub token 2019-03-04 07:53:31 -06:00
5895604282 Merge pull request #394 from tmiland/contrib
Add current branch to footer
2019-03-03 21:41:03 -06:00
a1af75a87f Update template.ecr
Add current branch to footer.
Add icons to footer.
2019-03-04 04:05:09 +01:00
732bd28c92 Update invidious.cr
Add current branch.
2019-03-04 04:04:26 +01:00
90715467a2 Set default value for 'subscribed' date 2019-03-03 20:44:29 -06:00
7425700009 Update pubsub to support lease_seconds 2019-03-03 20:40:24 -06:00
8e884fe115 Fix webhook endpoints 2019-03-03 19:50:23 -06:00
96c09450b8 Fix column name ucid in jobs 2019-03-03 19:45:05 -06:00
64cfd2296c Add support for subscribing to channels via PubSubHubbub 2019-03-03 19:18:23 -06:00
17cf0772fb Set domain to be nil by default 2019-03-03 12:02:15 -06:00
66605196ad Remove "detect_language" from dependencies 2019-03-03 11:51:28 -06:00
2c9b148627 Add 'playlists' tab to channel page 2019-03-03 10:56:04 -06:00
07ef48a07a Add length_seconds to playlist on watch page 2019-03-03 10:55:49 -06:00
03f94db5e2 Fix watch filtering from subscription feed when watch history is empty 2019-03-02 20:13:41 -06:00
9b202adebd Remove <hr> from footer 2019-03-02 20:12:36 -06:00
daf8e5b8b6 Remove array from usage statistics 2019-03-01 21:03:57 -06:00
25bd27ef95 Merge weblate into master 2019-03-01 19:59:30 -06:00
dd41e4906c Update Norwegian Bokmål translation 2019-03-02 02:57:53 +01:00
20660b92f8 Add missing text to locales 2019-03-01 19:57:28 -06:00
f0cc7a925c Add 'lastChannelRefreshedAt' to /api/v1/stats 2019-03-01 19:55:07 -06:00
057e69fe70 Update User-Agent and statistics schema 2019-03-01 19:39:10 -06:00
4be82c5ca6 Add /api/v1/stats 2019-03-01 19:25:16 -06:00
0eaf8f38a1 Add support for Basque translation 2019-03-01 19:24:53 -06:00
f31af18aa9 Merge weblate into master 2019-03-01 17:18:03 -06:00
5859cd290c Clean up footer and add version 2019-03-01 16:52:37 -06:00
a39b1583da Add administrator preferences 2019-03-01 16:06:45 -06:00
ac0eb9acaf Update Russian translation 2019-03-01 17:45:23 +01:00
a0d9e46c33 Update Polish translation 2019-03-01 17:45:23 +01:00
573404d3ac Update Basque translation 2019-03-01 17:45:23 +01:00
2fe545e19a Add content element to RSS feeds 2019-03-01 10:44:41 -06:00
ea52c05f05 Fix escaping for video filenames 2019-02-28 21:29:01 -06:00
2a643e86bc Update dockerfile 2019-02-28 13:49:29 -06:00
cc76428cd2 Update README 2019-02-28 13:28:02 -06:00
7ffc3a0652 Set updated for deleted channels 2019-02-27 17:31:17 -06:00
51df0860cc Update dependencies 2019-02-27 16:52:37 -06:00
e4f397d049 Fix RSS thumbnails 2019-02-27 16:18:47 -06:00
0c8dff162d Fix embed extractor for age-gated videos 2019-02-27 15:15:24 -06:00
4865529fed Create views if they don't exist 2019-02-27 09:10:28 -06:00
0a404cc9a6 Add fix for missing param in "/videoplayback" 2019-02-27 08:16:58 -06:00
17b84f32df Fix duration in /api/v1/search 2019-02-26 14:31:37 -06:00
a03958d937 Add -webkit-appearance to default.css 2019-02-26 12:21:19 -06:00
27cd1e73f3 Fix feed menu on mobile 2019-02-26 09:23:16 -06:00
d6bd893573 Add fix for missing hash keys 2019-02-26 08:12:56 -06:00
7a7049b25b Escape video titles in download widget 2019-02-25 17:54:55 -06:00
62ff9605ce Extract format streams from player response 2019-02-25 17:28:35 -06:00
2847c34f58 Bump version 2019-02-25 12:16:13 -06:00
b5a00f3c47 Remove duplicate information from autogenerated channel page 2019-02-25 09:52:44 -06:00
09d0972ab4 Pull dash URL from player response 2019-02-25 09:11:41 -06:00
6b12449be4 Show playlists for auto-generated channels 2019-02-24 16:39:44 -06:00
955b36913f Add fix for spaces in content-disposition 2019-02-24 16:19:31 -06:00
7e6cf7b979 Add title text for icons 2019-02-24 16:19:31 -06:00
b82ae5e84a Merge pull request #380 from GauthierPLM/french-translation-update
Update translation & correct typos
2019-02-24 12:29:24 -06:00
c5a17cd043 Add subscriptions to feed menu 2019-02-24 11:53:10 -06:00
1692f7640c Remove JS from download widget 2019-02-24 11:04:46 -06:00
ebcb21dbfe Allow user to save preferences without creating an account 2019-02-24 09:49:48 -06:00
b6d12cfb11 Update translation & correct typos 2019-02-24 15:24:53 +01:00
7f75a7ca0b Add support for changing signature param 2019-02-22 20:36:16 -06:00
bdc9196b4a Escape email when creating feed for Google account 2019-02-22 20:35:37 -06:00
a283c3143d Adjust size of player 2019-02-21 18:17:02 -06:00
57635c0d24 Add scroll to control bar when it's possible to overflow 2019-02-21 18:13:40 -06:00
7ed4485717 Format CSS 2019-02-21 17:43:49 -06:00
394952a86a Revert "Fix control bar overflow on mobile"
This reverts commit e25249ce4d.
2019-02-21 16:20:58 -06:00
85854cac77 Add support for custom channel URLs 2019-02-21 15:07:22 -06:00
5bf3c28436 Add better indicator for livestreams 2019-02-21 14:19:05 -06:00
e25249ce4d Fix control bar overflow on mobile 2019-02-21 14:01:12 -06:00
40073e7089 Fix sorting options for /feed/private 2019-02-21 14:01:12 -06:00
0e141f21e8 Applied suggestions from WebLate (#375)
* Applied suggestions from WebLate
2019-02-21 13:34:40 -06:00
9a1f4de323 Convert intervals to integers 2019-02-20 09:37:33 -06:00
83493237a5 Add support for translating time intervals 2019-02-20 08:49:54 -06:00
fb14d9c134 Merge pull request #372 from eutampieri/it-locale
Fixed some localisation
2019-02-20 08:32:58 -06:00
63fca853d0 Fixed some localisation
Yesterday I was tired so I missed a few strings
2019-02-20 15:01:43 +01:00
f647f7bdea Clear session ids when deleting an account 2019-02-19 18:26:33 -06:00
06076c683f Update Norwegian Bokmål translation 2019-02-20 00:46:42 +01:00
6b61eefca7 Add support for Italian locale 2019-02-19 17:46:31 -06:00
985dd65b83 Merge pull request #368 from eutampieri/it-locale
Create it.json
2019-02-19 17:44:44 -06:00
f26ad00155 Add /api/v1/channels/playlists/:ucid 2019-02-19 17:05:27 -06:00
a210327318 Add /api/v1/channels/latest/:ucid 2019-02-19 17:00:06 -06:00
5ae76bfe6c Create it.json 2019-02-19 22:15:22 +01:00
58fb74179b Add fix for videos that don't have videoDetails 2019-02-19 13:54:14 -06:00
92223dbee5 Fix channel RSS feed 2019-02-18 16:06:00 -06:00
1ceb827a82 Check deleted channels 2019-02-18 15:44:15 -06:00
f85472c0ce Fix extracting for mixes provided by YouTube Music 2019-02-18 11:43:57 -06:00
4933cd46d7 Fix sorting of subscriptions with 'latest_only' 2019-02-18 11:29:57 -06:00
421ad21b40 Speed up filtering watched videos from feed 2019-02-17 19:53:42 -06:00
6cea83991c Format and update locales 2019-02-16 17:56:49 -06:00
b04a2d4f61 Just a couple of adjustments (#350)
* Added icons tooltips in local/en-US.json, corrected link tooltip to switch to video mode and changed heart symbol by icon in comments
2019-02-16 17:46:04 -06:00
f8467fcda6 Fix locale text for "Show replies" 2019-02-16 14:26:08 -06:00
9f00dba0cb Merge pull request #353 from Perflyst/347-screenshots
Add screenshots
2019-02-16 13:50:55 -06:00
6a8a49d8ef Merge branch 'master' into 347-screenshots 2019-02-16 09:57:09 -06:00
7e2954c325 Format README and optimize screenshots 2019-02-16 09:55:45 -06:00
da21d33d96 Merge pull request #1 from dimqua/347-screenshots
Add new screenshots
2019-02-16 12:21:12 +01:00
27663b10a2 Add minor API fixes 2019-02-15 17:28:54 -06:00
c099a5ad2e Speed up manage_subscriptions 2019-02-15 17:13:52 -06:00
a4c05deb21 Add new screenshots 2019-02-15 00:22:28 +03:00
9df77707d3 Update Russian translation 2019-02-12 22:06:51 +01:00
ceea6e4597 Escape subscribe text 2019-02-12 14:59:26 -06:00
b5b0599222 French Translation - By a French (#363)
* French Translation
2019-02-12 14:46:47 -06:00
94152c4d17 Merge pull request #355 from dimqua/patch-3
Add MusicPiped
2019-02-12 00:33:02 -06:00
f02b5e8c4d Run 'crystal tool format' 2019-02-11 20:52:47 -06:00
f1820ffaf7 Add fix for user array 2019-02-11 20:47:26 -06:00
52cad8d6da Update change index for channel_videos and add index for nonces 2019-02-11 10:59:17 -06:00
1590393fcc Don't try to update channels in subscription manager 2019-02-11 10:52:28 -06:00
64f13df99b Update README 2019-02-11 10:20:55 -06:00
45cdb81861 fix issues page url (#352)
* fix issues page url
2019-02-11 09:18:40 -06:00
ff563a70a5 Fix typo in session_ids 2019-02-10 15:08:53 -06:00
84a5edf0eb Add MusicPiped 2019-02-11 00:06:44 +03:00
5528a130b6 Mark migrate-db-3646395.sh as executable 2019-02-10 13:50:17 -06:00
a384f6e5fd Add migrate script and update README 2019-02-10 12:46:58 -06:00
3646395f1d Store session_ids in separate table 2019-02-10 12:33:29 -06:00
8bbf351d04 Fix challenge switching for Google login 2019-02-10 12:27:33 -06:00
dde0292e1c Add screenshots to README.md 2019-02-10 14:44:40 +01:00
ff1212a188 Add screenshots 2019-02-10 14:23:28 +01:00
27934dad37 Add region to latest_version 2019-02-09 12:28:43 -06:00
0d509c82ee Rename migrate-db-e1aa1ce.sh to migrate-db-30e6d29.sh 2019-02-09 12:10:20 -06:00
30e6d29106 Add 'deleted' to channel info 2019-02-09 10:49:48 -06:00
7a9ef0d664 Add produce_channel_playlists_url 2019-02-09 10:15:14 -06:00
3cce74d364 Add feed menu to popular, top, and trending 2019-02-08 10:34:32 -06:00
9698988be3 Filter video streams to avoid duplicates in DASH player 2019-02-08 09:49:40 -06:00
29af5fc4a6 Prune proxy list 2019-02-06 21:29:31 -06:00
a7b79824de Add support for 'region' in search 2019-02-06 18:21:40 -06:00
d625d0ffbd Use get_video for pulling comment token 2019-02-06 17:55:22 -06:00
1dcfa90c8e Update version and bump changelog 2019-02-06 17:50:04 -06:00
8170dad9bd Simplify video extractor 2019-02-06 16:12:11 -06:00
699f85e773 Fix Google login 2019-02-05 08:49:24 -06:00
f225d38680 Revert updated dependencies 2019-02-04 15:34:53 -06:00
2630dc8dcd Add 'related_videos' to video params 2019-02-04 15:28:51 -06:00
276662a147 Use IO::Memory for creating continuation tokens 2019-02-04 15:17:10 -06:00
ed8a9af355 Add helpers_spec 2019-02-04 12:05:51 -06:00
e6e3d826b9 Update shard.yml 2019-02-04 12:05:31 -06:00
5b3606ad1d Merge pull request #339 from tmiland/contrib
Update README.md
2019-02-04 09:54:01 -06:00
072cc13f14 Merge remote-tracking branch 'upstream/master' into contrib 2019-02-03 16:20:02 +01:00
c1ed660ca0 Proxy creator thumbnail for heart container 2019-02-03 08:45:34 -06:00
2c44051318 Update README.md
Add manual commands to Debian and Ubuntu install instructions.
2019-02-03 12:57:01 +01:00
d0a690c303 Add CORS to API endpoints 2019-02-02 22:48:47 -06:00
87e1fa0a28 Add new text to locales 2019-02-02 19:07:09 -06:00
a1af27b125 Merge pull request #334 from aaferrari/master
Color change in the links and several improvements in the comments
2019-02-02 18:19:33 -06:00
ceaddbc821 Minor fixes in CSS colors 2019-02-02 20:13:40 -03:00
9989c8100a Properly escape email when creating view 2019-02-02 15:27:19 -06:00
c0e73e71c5 Merge branch 'master' of https://github.com/omarroth/invidious 2019-02-01 20:15:34 -03:00
b0ba670c91 Comments now show if they were edited and if they received a heart from the uploader (plus additional classes in default.css). The isEdited attribute was also added in the comments API and new strings in en-US.json 2019-02-01 09:09:10 -03:00
d5c9b7dfe8 Only play after error if already playing 2019-01-31 20:26:11 -06:00
095b5fcea0 Update Russian translation 2019-01-31 22:07:16 +01:00
aeee40c894 Update Basque translation 2019-01-31 22:07:16 +01:00
a7fbcd0aa8 Add Basque translation 2019-01-31 22:07:16 +01:00
c9bc081f8c Respect DEFAULT_USER_PREFERENCES in video params 2019-01-31 15:06:53 -06:00
fbb5df0849 Default to showing recommendations for logged out users 2019-01-31 14:54:02 -06:00
cef061d6fb Fix incorrect default in user preferences 2019-01-31 14:40:26 -06:00
def58ff11f Add interval and timeout for errors in player 2019-01-31 09:09:00 -06:00
9e73e3b153 Add errorcode for invalid video IDs 2019-01-31 08:48:44 -06:00
e9ea365f2f Add additional parameters in the API comments, highlight the user name in the uploader comments and I finished permalink of the comments. 2019-01-31 08:21:26 -03:00
55118a6768 Change color to the links and add a couple of improvements in the comments 2019-01-30 09:28:28 -03:00
1e214aae7c Reload player instead of removing invalid source 2019-01-29 19:55:27 -06:00
ff09a7255a Add handling to remove invalid sources 2019-01-28 22:36:27 -06:00
26b7200360 Respect playback rate when reloading player 2019-01-28 20:47:38 -06:00
b38a2bbd12 Reload player on error 2019-01-28 20:45:08 -06:00
097cbcdae3 Update subscribe button immediately 2019-01-27 22:12:07 -06:00
c0fdc28a84 Fix colors and data-url in download widget 2019-01-27 21:20:52 -06:00
6218078c51 Pull subscribe widget into separate file 2019-01-27 21:06:28 -06:00
a9aae6b36c Add internal redirect for video URLs 2019-01-27 20:36:40 -06:00
96fb2118d5 Merge pull request #324 from dimqua/patch-2
fix broken link
2019-01-27 12:02:19 -06:00
48fc0949cc fix broken link 2019-01-27 20:41:43 +03:00
7d270211ae Merge pull request #322 from Perflyst/readme-remove-extensions
Remove Extensions from README.md
2019-01-27 10:57:01 -06:00
a9f5b84c7f Remove Extensions from README.md 2019-01-27 17:01:03 +01:00
2d20f12335 Merge pull request #319 from dimqua/patch-1
fix file path
2019-01-26 15:40:26 -06:00
45b53b8902 fix file path 2019-01-26 19:12:13 +03:00
898b768b30 Fallback on ucid for channel search when author contains hyphen 2019-01-25 12:26:23 -06:00
06aa1bb90f Merge pull request #315 from EsmailELBoBDev2/master
Fix "Download as: " in ar.json
2019-01-25 11:44:44 -06:00
1f6078cf25 Fix links to invalid genre channels 2019-01-25 11:35:25 -06:00
ba36ab9559 Add 'pretty=1' option to API endpoints 2019-01-25 10:50:18 -06:00
586c0a0579 Add error message for unavailable endpoint /api/v1/insights/:id 2019-01-25 10:38:28 -06:00
209d7117fb Merge branch 'master' into master 2019-01-25 12:48:10 +02:00
3751d11a0b Update ar.json 2019-01-25 12:46:53 +02:00
1af86f6afb Add sleep to popular_videos and top_videos 2019-01-24 20:21:35 -06:00
4c77908bb4 Update postgres entrypoint for docker image 2019-01-24 19:02:09 -06:00
952b208a01 Add retry for /videoplaybacl 2019-01-24 13:53:14 -06:00
40fb29ea2b Merge pull request #313 from Perflyst/fix-install
Fix installation guide, Add Upgrade information, Create and mention documentation
2019-01-24 12:39:42 -06:00
c1081e3df0 Add links to documentation 2019-01-24 19:34:05 +01:00
4b60f7ddff Add logger to method calls 2019-01-24 12:19:02 -06:00
75d8c4f5c0 Use logger instead of STDOUT 2019-01-24 12:16:29 -06:00
16a7fcb79b Update ar.json (#314) 2019-01-24 12:03:19 -06:00
8cd0137aed Merge branch 'master' into master 2019-01-24 11:05:33 +02:00
f455b12085 Update ar.json 2019-01-24 11:03:33 +02:00
1a9057a175 Add fix to download widget for titles with unescaped characters 2019-01-24 00:01:56 -06:00
0fcfb7b82b Add redirect for legacy '/profile' endpoint 2019-01-23 23:12:48 -06:00
30f08ae48c Add missing text to locales 2019-01-23 22:54:04 -06:00
8f1b65de59 Add missing text to en-US.json 2019-01-23 22:45:31 -06:00
d88f9f3b3e Use params for importing dash sources 2019-01-23 19:46:17 -06:00
08e8d0f56f Fix typo in default.css 2019-01-23 19:25:09 -06:00
fb535ad6bb Add download widget 2019-01-23 19:05:24 -06:00
15efac520e Stop trying to pull comments after 10 timeouts 2019-01-23 18:23:31 -06:00
dd5623ffbf Update invidious usage
Thanks @omarroth
2019-01-23 21:40:17 +01:00
7a6a0f364c Run 'crystal tool format' 2019-01-23 14:37:04 -06:00
93297b63b1 Add logfile to systemd service and fix path 2019-01-23 21:31:52 +01:00
e1540390a8 Fix typo in config documentation 2019-01-23 14:30:45 -06:00
71ba071160 Add documentation to config 2019-01-23 14:28:31 -06:00
af449161ff Add -o option for redirecting output 2019-01-23 14:15:19 -06:00
03aa11b412 Rewrite installation guide 2019-01-23 21:12:02 +01:00
5e272db8f5 Delete setup.sh 2019-01-23 20:06:43 +01:00
827e68acf5 Resize player to better fit larger screens 2019-01-23 12:54:19 -06:00
987ea1cb98 Add IRC to README 2019-01-21 15:33:25 -06:00
633ecb524e Add 'fr' to list of supported locales 2019-01-21 15:04:09 -06:00
f19d8f7095 Merge pull request #311 from Perflyst/locale-fr
Add French translation
2019-01-21 14:55:32 -06:00
a20e3cd77e Add French translation 2019-01-21 20:21:42 +01:00
a7b6a67615 Use locale for "Only show latest" text 2019-01-21 11:54:44 -06:00
e7f05d76fa Add Contact and License sections to README 2019-01-21 11:35:10 -06:00
5cb57fb176 Move 'domain' into config.yml 2019-01-20 22:19:14 -06:00
95bde7bb8a Add handling for empty continuation 2019-01-20 10:03:36 -06:00
daa2329f8b Add fix for pulling comments from age-gated videos 2019-01-20 10:03:36 -06:00
b23710f89f Fix comments without startTimeSeconds 2019-01-20 10:03:36 -06:00
277dda0dcb Merge pull request #297 from Perflyst/systemd-service
Add systemd service
2019-01-19 11:30:53 -06:00
cf9134416c Remove unnecessary comment 2019-01-19 10:42:03 -06:00
2425368c3a Bump version 2019-01-19 10:03:23 -06:00
20c4d213d9 Use config.domain in place of hardcoded value 2019-01-19 09:10:52 -06:00
af9134ffb4 Add systemd service information to README.md 2019-01-19 15:08:26 +01:00
f65ddaa0f1 Add invidious.service 2019-01-19 15:04:28 +01:00
9580a21786 added support for vid types in "trending" page (#289)
* Added AR Support For trending Page
2019-01-17 10:17:16 -06:00
dfd17bdd88 Improve error message for 500 and add redirect for 404 2019-01-12 13:18:08 -06:00
0f48d221b4 Fix hlsvp extractor 2019-01-12 12:00:44 -06:00
8f57388cd3 Fix average rating where likes and dislikes are null 2019-01-12 11:56:07 -06:00
0992587da5 Updated wrong word :-) [UPDATE] (#284)
* updated & added new words
2019-01-11 10:18:10 -06:00
138a6b1136 Add missing "avg_rating" 2019-01-10 08:06:54 -06:00
c6ec8317ac Use location.assign instead of window.location.replace 2019-01-05 23:02:03 -06:00
81c2ecc788 Bump version and update CHANGELOG 2019-01-05 21:54:23 -06:00
7abe5dc845 Add onion links to README 2019-01-05 21:51:08 -06:00
a16f967085 Add popular, top, trending bar 2019-01-05 15:25:31 -06:00
7f8349d4b1 Escape function names in signature extractor 2019-01-05 15:23:22 -06:00
4ae57cb475 Improve playlist description extractor 2019-01-04 22:48:00 -06:00
cc00beb1db Update German translation 2019-01-04 11:18:05 -06:00
a1d442d1e3 Update Russian translation 2019-01-04 11:17:48 -06:00
2fdf3d24e3 Redirect to home page on empty search 2019-01-02 20:14:31 -06:00
0832fa9bdb Filter paid videos from RSS and channel list 2019-01-02 20:09:00 -06:00
c2c224b16f Use fibers to try to speed up importing of channels 2019-01-02 19:28:59 -06:00
7951d4c8aa Add length_seconds to subscription search 2019-01-02 19:28:59 -06:00
a02b539362 Merge pull request #272 from cheeseandcereal/master
update readme for required ubuntu dependencies
2018-12-31 23:26:25 -06:00
fc4a2b812e update readme for required ubuntu dependencies 2018-12-29 04:25:07 -08:00
6b4ea53a32 Add sleep time for update_decrypt_function 2018-12-28 09:55:02 -06:00
db7457f135 Add nb_NO to supported locales 2018-12-26 09:29:12 -06:00
29db4c2301 Translated using Weblate (Russian)
Currently translated at 60.5% (164 of 271 strings)

Translation: Invidious/Translations
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/ru/
2018-12-25 00:47:42 +01:00
99f024d222 Translated using Weblate (Norwegian Bokmål)
Currently translated at 69.4% (184 of 265 strings)

Translation: Invidious/Translations
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/nb_NO/
2018-12-25 00:47:42 +01:00
f3c9566687 Fix param ordering for fetch_playlist_videos 2018-12-24 17:47:23 -06:00
382a6b556d Update RSS schema 2018-12-23 12:07:04 -06:00
17a9b0cd15 Merge pull request #271 from tor255/atomfeedfix
Fixed subscription's xml feed
2018-12-23 12:04:06 -06:00
tor
5ca74a8dca Fixed subscription's xml feed 2018-12-24 04:55:39 +11:00
162f7d9d3d updated & added new words 2018-12-21 12:46:21 -06:00
388b3cff8b Fix typo in data_control 2018-12-21 09:50:01 -06:00
a5af6f4956 Add missing translations to locales 2018-12-21 09:39:52 -06:00
7f3bdc4bea Update en-US.json 2018-12-21 09:29:02 -06:00
d06c5306be Update i18n 2018-12-20 17:41:42 -06:00
2e39299071 Update en-US.json translations 2018-12-20 17:41:31 -06:00
7596baf03b Fix translation with non-existent locales 2018-12-20 16:59:46 -06:00
0feb414a1d Add menu for selecting trending page 2018-12-20 16:48:45 -06:00
1360d67c11 Show more informative error to users signing in with Google 2018-12-20 15:39:41 -06:00
a160c645c9 Add support for translations 2018-12-20 15:32:09 -06:00
5b2b026468 Fix typo in RU translation 2018-12-20 15:03:27 -06:00
78b34af305 Update Arabic locale and fix formatting 2018-12-20 11:23:32 -06:00
a9a0280b1a Add link to watch history in feed and manager 2018-12-20 11:05:54 -06:00
4c936eab29 Add Dutch translation
Currently translated at 100.0% (153 of 153 strings)

Translation: Invidious/Translations
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/nl/
2018-12-20 10:46:51 -06:00
9463717b90 Add Norwegian Bokmål translation 2018-12-20 10:46:33 -06:00
e605371154 Add Arabic translation
Currently translated at 98.7% (151 of 153 strings)

Translation: Invidious/Translations
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/ar/
2018-12-20 10:46:30 -06:00
467b000757 Add Polish translation
Currently translated at 96.7% (148 of 153 strings)

Translation: Invidious/Translations
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/pl/
2018-12-20 10:46:26 -06:00
45a53e2616 Add German translation
Currently translated at 95.5% (253 of 265 strings)

Translation: Invidious/Translations
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/de/
2018-12-20 10:46:23 -06:00
51f4f60d46 Add Russian translation
Currently translated at 51.3% (136 of 265 strings)

Translation: Invidious/Translations
Translate-URL: https://hosted.weblate.org/projects/invidious/translations/ru/
2018-12-20 10:46:14 -06:00
7d47b5d4bd Use named params for SearchChannel 2018-12-15 13:02:53 -06:00
d0b30ad977 Don't pass HTTP client in args 2018-12-15 12:05:52 -06:00
843606db65 Support changing author names 2018-12-15 12:02:57 -06:00
b030149d76 Revert "Use <audio> tag for audio only"
This reverts commit e6bc5bb35d.
2018-12-08 20:12:22 -06:00
b686d76d8c Update script for Invidious embed 2018-12-07 10:25:41 -06:00
2ef3db334f Update CHANGELOG and bump version 2018-12-05 22:17:43 -06:00
89439e1775 Add link to '/clear_watch_history' in '/feed/history' 2018-12-05 17:07:51 -06:00
65cc51766f Add other projects that use Invidious 2018-12-04 21:28:49 -06:00
b9aff18d43 Merge pull request #258 from asddsaz/patch-1
Add Made with Invidious Section
2018-12-04 20:58:06 -06:00
d2f51ab71c Add Made with Invidious Section 2018-12-05 01:22:54 +00:00
21dd204a13 Update README 2018-11-30 15:10:56 -06:00
7fd4c76a59 Try to pull UCID instead of brand name in search results 2018-11-28 10:20:52 -06:00
4480e9c1ba Don't downcase UCID when searching channels 2018-11-27 22:26:17 -06:00
6033e8aed1 Add related_channels to /api/v1/channels 2018-11-27 22:07:45 -06:00
32bd593a8a Remove log statement 2018-11-27 21:20:29 -06:00
1c49fa3b63 Add timeout for autoplay 2018-11-27 21:18:20 -06:00
7ab9d741bf Fix autoplay 2018-11-27 16:52:27 -06:00
6540742c76 Remove unnecessary text from locale 2018-11-27 16:16:50 -06:00
dcf45d217f Don't cache results when using proxy 2018-11-26 20:46:08 -06:00
d211d8fc05 Add locales/en-US.json 2018-11-26 14:42:59 -06:00
2dfb3e7814 Minor text changes 2018-11-26 14:28:15 -06:00
19bf0ccbf0 Add /feed/top and /feed/popular 2018-11-26 10:50:34 -06:00
2ea580e18e Format default.css 2018-11-25 19:01:19 -06:00
0152967d3e Fix title when downloading video 2018-11-25 19:01:04 -06:00
934c81b02f Add second hand to image CAPTCHA 2018-11-25 18:26:21 -06:00
9ce02e579d Update '/api/v1/popular' 2018-11-25 18:16:56 -06:00
32e4ad0784 Update default config 2018-11-25 18:13:56 -06:00
18bb397c7d Add '/api/v1/popular' 2018-11-25 18:13:11 -06:00
3c98601f35 Add job for pulling popular videos 2018-11-25 18:08:51 -06:00
26eb59e00d Add text CAPTCHA 2018-11-22 13:26:08 -06:00
ca4e8b800c Use absolute paths in /opensearch.xml 2018-11-21 20:49:14 -06:00
568e55dfa6 Add description for home page 2018-11-21 20:00:33 -06:00
941a773b7d Add opensearch.xml 2018-11-21 20:00:17 -06:00
95ebfd34c5 Don't wait on server for subscription count 2018-11-21 19:26:55 -06:00
fd7aa59e0f Properly parse NewPipe imports 2018-11-21 17:12:13 -06:00
cdd916f51d Add async for manage_subscriptions 2018-11-21 13:35:37 -06:00
e80884cfce Remove unnecessary request header 2018-11-21 13:18:33 -06:00
c656a7cb9e Add link to watch history in preferences 2018-11-21 13:10:56 -06:00
a15463cf37 Clarify options in preferences 2018-11-21 13:10:09 -06:00
2ce038fb7a Only show toggle watched button when relevant 2018-11-21 13:06:29 -06:00
588f9b9bd6 Fix 'order' expression 2018-11-21 08:25:21 -06:00
d6d73bd336 Fix clickable titles in subscription feed 2018-11-20 22:58:30 -06:00
f01cfd0226 Use material style for trash icon 2018-11-20 22:58:04 -06:00
60c6778344 Make 'watched' icon smaller 2018-11-20 22:57:51 -06:00
a242390fc1 Fix typo in nonces.sql 2018-11-20 13:14:13 -06:00
e5730f4cbc Use 'ion-ios-trash' for /feed/history 2018-11-20 11:19:04 -06:00
2be43c17ab Sample proxies to avoid overloading single proxy 2018-11-20 11:18:48 -06:00
2e99642173 Add /feed/trending 2018-11-20 11:18:12 -06:00
aeaeacbf8d Refactor geo-bypass 2018-11-20 10:07:50 -06:00
6b12f11e10 Add ability to mark videos as watched in subscription feed 2018-11-19 22:06:59 -06:00
c7e8d623c0 Support overflow grid 2018-11-19 18:43:06 -06:00
ad20d6359b Add 'expire' to filter invalid tokens 2018-11-19 18:41:11 -06:00
b535de690e Move video count into playlist thumbnail 2018-11-19 17:34:33 -06:00
c1a60392ae Expand description when related videos are disabled 2018-11-19 17:23:01 -06:00
fff817b654 Remove timestamp fallback for nojs 2018-11-19 16:47:18 -06:00
8706364d90 Add support for watchEndpoints in comment templating 2018-11-19 16:24:21 -06:00
ed6d321bc6 Fix identifier for AGPLv3 in licenses.ecr 2018-11-19 16:02:35 -06:00
b10794bc64 Clarify feature in README 2018-11-19 14:44:24 -06:00
94c92b68a2 Add flat list of proxies for geo-bypass 2018-11-19 10:51:30 -06:00
27488a2295 Fix invalid passing of arguments to get_video 2018-11-18 17:57:31 -06:00
3418b82dc5 Fix typo in autoplay 2018-11-18 17:47:40 -06:00
04d9b16a6b Add fix for optional 'rvs' 2018-11-18 17:28:22 -06:00
43961ef035 Add 'region' parameter to captions and manifest endpoints 2018-11-17 17:37:57 -06:00
16964ca6ce Add 'region' parameter for bypassing region locks 2018-11-17 17:33:30 -06:00
879586d7f5 Fix subscription feed for latest unseen videos 2018-11-17 13:37:27 -06:00
cd482cfd89 Add more informative error response on incorrect CAPTCHA 2018-11-17 13:26:24 -06:00
d185ba84bf Remember nonce to prevent replay attacks 2018-11-17 13:18:12 -06:00
c7f0a6f2e1 Create proper JSON request for Google login 2018-11-17 12:17:40 -06:00
48526435ad Add CSRF token for Google accounts 2018-11-15 20:23:17 -06:00
b92542ea35 Show autoplay when playlist is invalid 2018-11-15 18:05:10 -06:00
e6bc5bb35d Use <audio> tag for audio only 2018-11-15 17:52:53 -06:00
6ca7a71db9 Fix channel sort on mobile 2018-11-15 17:05:29 -06:00
bf867c3fcf Add cookie sharing with subdomains 2018-11-15 16:41:43 -06:00
6db235becf Remove nil assertions from video extractor 2018-11-15 09:38:29 -06:00
71303452d8 Update README 2018-11-13 20:38:56 -06:00
adcefa4ffa Add 'published - reverse' option to feed 2018-11-13 20:29:36 -06:00
c8b321920d Add channel video count to search results 2018-11-13 19:18:08 -06:00
47ed8bd13f Add channel sort to '/api/v1/channels/videos' 2018-11-13 19:11:16 -06:00
44e9b4ac2a Add channel sort options 2018-11-13 19:04:25 -06:00
9aeb9ec00f Merge branch 'pr/229' 2018-11-12 22:59:56 -06:00
0f58f872ac image size losslessly reduced with FileOptimizer 2018-11-12 22:59:39 -06:00
0e26e4d407 Remove video title tooltip 2018-11-12 18:37:58 -06:00
9113846d10 Fix typo in genre urls 2018-11-12 10:01:31 -06:00
df7480bcb6 Fix comment templating when JavaScript is disabled 2018-11-11 23:31:27 -06:00
4b76b93610 Add continuous playback 2018-11-11 11:45:05 -06:00
1465cefa17 Move HMAC tokens into users.cr 2018-11-11 09:44:16 -06:00
dcddb6fb83 Update license information 2018-11-11 08:47:42 -06:00
7f868ecdf9 Add unminimized sources and license information 2018-11-10 11:08:03 -06:00
e8c9641548 Update info extractor 2018-11-10 10:50:09 -06:00
b9e2fee2c9 Fix templating for videos with 0 comments 2018-11-10 09:05:44 -06:00
0c8a1d46bd Fix whitespace in dnt-policy.txt 2018-11-10 07:54:13 -06:00
8766475e55 Update shards.yml 2018-11-09 21:30:02 -06:00
aaf8bdb28c Disable unimplemented route 2018-11-09 20:37:46 -06:00
b77c73df0d Clean up data import/export 2018-11-09 17:25:24 -06:00
6066615553 Update formatting 2018-11-09 08:48:02 -06:00
30d040b02a Fix extractor for author thumbnails 2018-11-08 18:32:47 -06:00
8e6bee75e7 Add CSRF prevention for /signout 2018-11-08 17:42:25 -06:00
28f564ee4c Fix XSS in title and input bar 2018-11-08 17:27:21 -06:00
1ea563f4f1 Add error message for fetching channel videos 2018-11-08 17:10:14 -06:00
c5d2a57206 Speed up importing watch history 2018-11-08 16:43:28 -06:00
6ae5d489ec Add 'liveNow' to /api/v1/channels 2018-11-08 16:35:57 -06:00
0a1c84ada1 Add support for partial data restore 2018-11-08 16:35:26 -06:00
fee3b93339 Add 'liveNow' to /api/v1/channels/videos 2018-11-08 16:17:47 -06:00
31a9abc03a Add favicon 2018-11-08 15:58:10 -06:00
3748c0083f Update Twitter thumbnail 2018-11-08 08:45:08 -06:00
7a6d4e6ef9 Add extra handling for autoplay 2018-11-08 08:37:48 -06:00
6c19f0f242 Revert "Update robots.txt"
This reverts commit b26b6b9bdf.
2018-11-08 00:41:03 -06:00
1ff8579575 Check user_id as part of validating CSRF tokens 2018-11-08 00:29:20 -06:00
b9c29bf537 Add option for user to delete their account 2018-11-08 00:12:14 -06:00
f988123820 Revert "Add Origin header checks"
This reverts commit 2be240767c.
2018-11-07 23:13:51 -06:00
2be240767c Add Origin header checks 2018-11-07 23:05:50 -06:00
103949c61e Update twitter thumbnail 2018-11-07 22:26:50 -06:00
316a73f07e Remove duration for playlists in search results 2018-11-07 10:07:47 -06:00
b26b6b9bdf Update robots.txt 2018-11-06 23:13:31 -06:00
3a44cfd3de Add Invidious Downloader to list of extensions 2018-11-06 22:02:23 -06:00
570e09333a Add error message for empty 'v' param 2018-11-06 09:55:52 -06:00
4e33d3a0b9 Fix index out of bounds for playlist ucid 2018-11-05 09:00:39 -06:00
9e022f3b04 Add redirect for empty 'v' param 2018-11-05 07:31:48 -06:00
1dcca85819 Fix typo in template.ecr 2018-11-05 07:31:18 -06:00
ad57247a5f Fix location of dnt-policy.txt 2018-11-04 23:15:01 -06:00
9194f47ee4 Add DNT policy 2018-11-04 23:10:46 -06:00
4f856dd898 Add support for Crystal 0.27.0 2018-11-04 09:37:12 -06:00
c912e63fb5 Only check invalid size passwords on register 2018-11-04 08:30:16 -06:00
7e558c5b1d Add error messages for invalid password sizes 2018-11-03 11:52:33 -05:00
19632511d5 Update SQL 2018-11-02 09:46:45 -05:00
d739ef8fd3 Add fix for videos without keywords 2018-11-02 08:26:35 -05:00
c92f6e44e7 Update keywords and view_count 2018-11-02 08:09:28 -05:00
19516eaa25 Add option to view comments with JS disabled 2018-10-31 16:47:53 -05:00
294c168193 Update README 2018-10-31 09:42:29 -05:00
468e6b1c27 Fix mix continuation 2018-10-31 09:24:24 -05:00
c55c553725 Fix channel_videos schema 2018-10-30 10:50:27 -05:00
596960f35a Remove migration points 2018-10-30 10:03:03 -05:00
e39dec9778 Add option to listen by default 2018-10-30 09:41:23 -05:00
8794e26e67 Add length_seconds to channel_videos 2018-10-30 09:20:51 -05:00
eb44a60f8d Remove migration point 2018-10-30 09:04:01 -05:00
791f216a45 Don't remove unsupported sources 2018-10-30 08:34:55 -05:00
be601a7584 Fix handling for non-existent channels 2018-10-23 21:04:15 -05:00
ceff2763a5 Update error messages for /api/v1/channels 2018-10-23 20:58:07 -05:00
8fd54027de Bump version 2018-10-23 20:55:20 -05:00
a97c72f63b Update CHANGELOG and bump version 2018-10-22 23:11:18 -05:00
81ea2bf799 Don't nest YouTube replies 2018-10-22 17:15:36 -05:00
ed3d9ce540 Make channel extractor more robust 2018-10-21 21:44:20 -05:00
ef95dc2380 Add fix for show playlists 2018-10-21 19:54:41 -05:00
4875aa1d7e Add partial support for video duration in thumbnails 2018-10-20 20:37:55 -05:00
3ee7201f5d Comma seperate comment scores 2018-10-20 13:52:06 -05:00
3c634d9f66 Update styling for subscribe buttons 2018-10-20 13:51:52 -05:00
94d116974b Add break between text and sub count 2018-10-19 16:20:35 -05:00
5c87cf1547 Update subscribe buttons 2018-10-19 11:14:26 -05:00
1cfa1f6559 Add 'paid' and 'premium' flags to API 2018-10-16 11:15:14 -05:00
8b69e23471 Update CHANGELOG and bump version 2018-10-15 21:22:22 -05:00
57d88ffcc8 Fix fallback for comments 2018-10-15 11:15:23 -05:00
e46e6183ae Fix proxying for videos 2018-10-14 11:29:20 -05:00
b49623f90f Revert "Attempt to bypass channel region locks"
This reverts commit 95c6747a3e.
2018-10-14 11:14:27 -05:00
95c6747a3e Attempt to bypass channel region locks 2018-10-14 09:53:40 -05:00
245d0b571f Add next page for channels with geo-blocked videos 2018-10-14 09:06:04 -05:00
6e0df50a03 Remove migration points 2018-10-13 20:03:48 -05:00
f88697541c Add author_thumbnail to '/api/v1/videos' 2018-10-13 20:01:58 -05:00
5eefab62fd Add "show replies" and "hide replies" 2018-10-13 19:40:42 -05:00
13b0526c7a Fix subscribe button when logged out 2018-10-13 19:40:24 -05:00
1568a35cfb Add column to video update 2018-10-12 22:37:12 -05:00
93082c0a45 Remove migration points 2018-10-12 21:28:15 -05:00
1a39faee75 Add subCountText and add XHR alternative for subscribing to channels 2018-10-12 21:17:37 -05:00
81b447782a Fix speed param for playlist preferences 2018-10-10 19:55:28 -05:00
c87aa8671c Add fix for continuation on playlists smaller than 100 videos 2018-10-10 19:47:51 -05:00
921c34aa65 Create materialized views for Google accounts 2018-10-10 16:10:58 -05:00
ccc423f682 Fix 'latest only' feed 2018-10-09 18:39:19 -05:00
02335f3390 Fix typo 2018-10-09 18:10:27 -05:00
bcc8ba73bf Fix update_feeds job 2018-10-09 17:24:29 -05:00
35e63fa3f5 Use materialized views for subscription feeds 2018-10-09 08:40:29 -05:00
3fe4547f8e Update CHANGELOG and bump version 2018-10-09 08:09:04 -05:00
2dbe151ceb Add speed param to playlist redirect 2018-10-09 08:08:52 -05:00
e2c15468e0 Make usernames case-insensitive 2018-10-08 20:09:06 -05:00
022427e20e Fix typo 2018-10-08 17:52:55 -05:00
88430a6fc0 Add playlist playback support 2018-10-07 21:11:33 -05:00
c72b9bea64 Add '&list' to videos shown on mix page 2018-10-06 22:22:50 -05:00
80bc29f3cd Add basic handling for (almost) valid video URLs 2018-10-06 22:22:22 -05:00
f7125c1204 Move watch page JS into seperate file 2018-10-06 22:20:40 -05:00
6f9056fd84 Add extra handling for shortened video URLs 2018-10-06 22:19:36 -05:00
3733fe8272 Redirect mixes 2018-10-06 22:18:50 -05:00
98bb20abcd Add option to switch between YouTube and Reddit comments 2018-10-06 18:54:05 -05:00
a4d44d3286 Fix position of [ + ] button for YouTube comments 2018-10-06 18:53:27 -05:00
dc358fc7e5 Don't add channels if they've been deleted 2018-10-06 18:36:06 -05:00
e14f2f2750 Prevent duplicate subscriptions when importing user data 2018-10-06 18:19:47 -05:00
650b44ade2 Improve comment templating 2018-10-05 10:08:24 -05:00
3830604e42 Try to speed up find_working_proxies 2018-10-03 10:38:07 -05:00
f83e9e6eb9 Add config option for geo-bypass 2018-10-03 10:36:30 -05:00
236358d3ad Escape search query in "next page" and "previous page" links 2018-10-02 09:08:18 -05:00
43d6b65b4f Update CHANGELOG and bump version 2018-10-01 22:53:27 -05:00
f8eb5ab416 Break after successful response 2018-10-01 20:02:14 -05:00
ae2850215f Fix method for detecting valid info resposne 2018-10-01 19:55:47 -05:00
d418f50576 Make geo-bypass more robust 2018-10-01 19:01:44 -05:00
8c04768ef8 Add support for geo-bypass in '/videoplayback' 2018-09-30 20:26:28 -05:00
a718d5543d Add 'lang' and 'tlang' to '/api/v1/captions' 2018-09-30 10:13:07 -05:00
20130db556 Add mixes 2018-09-29 10:59:11 -05:00
66f3ab0663 Update README 2018-09-29 10:11:21 -05:00
1de7c0caf9 Merge pull request #186 from flourgaz/feature/docker-compose
Add basic docker-compose cluster
2018-09-29 10:04:31 -05:00
7d35b6e44f Add rel="noopener" to target="_blank" links 2018-09-29 09:56:37 -05:00
71a99542fe basic docker-compose cluster 2018-09-29 13:30:56 +02:00
8530c1f4ec Fix typo 2018-09-28 19:44:16 -05:00
29a6291957 Show info instead of empty playlist when possible 2018-09-28 09:54:45 -05:00
25ba5bda62 Fix encoding of playlist index 2018-09-28 09:54:01 -05:00
477c84deb1 Don't deliver new notifications for YouTube Red videos 2018-09-28 09:23:28 -05:00
c2f7d3d41c Add handling for specific genre channels 2018-09-27 17:11:19 -05:00
b0b5e3e982 Escape search queries 2018-09-27 17:02:59 -05:00
4fb275ec6e Get more video information when possible 2018-09-26 19:47:06 -05:00
f99b2cdf01 Add support for proxying comments 2018-09-26 18:44:37 -05:00
5d7bd9af0f Add host language for comments 2018-09-26 10:33:08 -05:00
aa819a189e Use alternate source for proxies 2018-09-25 21:07:18 -05:00
2e65997447 Fix geo-bypass threads 2018-09-25 18:16:07 -05:00
3e3de1890a Overhaul geo-bypass 2018-09-25 17:56:59 -05:00
5b5d69a33b Add host language to YouTube requests 2018-09-25 17:55:32 -05:00
1289065151 Add host language to fetch_video 2018-09-25 17:42:17 -05:00
21a8df42dd Add fix for short playlist descriptions 2018-09-25 10:28:57 -05:00
74b285d0f7 Add author thumbnails to playlist endpoint 2018-09-25 10:28:40 -05:00
c2e72439f5 Don't add anchor for empty genre URL 2018-09-25 10:10:25 -05:00
87498ae777 Update CHANGELOG 2018-09-25 09:55:14 -05:00
e122d68acc 0.7.0 2018-09-24 19:48:06 -05:00
b3ca3922a9 Add experimental dash support 2018-09-24 19:28:36 -05:00
9a7852341d Use custom ranking for regions 2018-09-24 14:24:33 -05:00
1922f6c69a Add more regions to geo-bypass 2018-09-23 19:29:47 -05:00
a5e8f87a26 Add error for non-existent playlists 2018-09-23 12:32:32 -05:00
1d9c6f63e1 Add better error for invalid playlists 2018-09-23 12:26:12 -05:00
5bdd8327d4 Add better support for movies in search and watch page 2018-09-23 12:13:08 -05:00
35ac887133 Add fix for playlists with less than 100 videos 2018-09-22 14:13:10 -05:00
d886f8d1e3 Add fix for playlists with no videos 2018-09-22 14:11:01 -05:00
d8b7c0750a Fix name of playlist resource 2018-09-22 11:34:29 -05:00
1ab04638e3 Add 'videoCount' to playlists in search 2018-09-22 11:14:57 -05:00
f80f4f2521 Add '/api/v1/channels/search' 2018-09-22 10:49:42 -05:00
60038b29f1 Fix typo in user defaults 2018-09-21 11:06:35 -05:00
099b711400 Add 'host' to API thumbnails 2018-09-21 10:11:04 -05:00
b56d07556e Remove break point 2018-09-21 09:49:08 -05:00
a68924f0ce Refactor name to ucid conversion 2018-09-21 09:40:04 -05:00
51d00b16c3 Use hash instead of btree for channel_videos_ucid_idx 2018-09-21 08:52:27 -05:00
bead12d6d0 Add styling for commits to CHANGELOG 2018-09-20 17:50:47 -05:00
1703788f4b Revert "Replace ytimg with local thumbnails"
This reverts commit 95e2d8f1b7.
2018-09-20 11:05:25 -05:00
6e092026d2 Fix for Reddit timezone 2018-09-20 11:04:36 -05:00
95e2d8f1b7 Replace ytimg with local thumbnails 2018-09-20 10:35:49 -05:00
abb15b82e6 Don't discard search results with no metadata 2018-09-20 10:24:27 -05:00
687013c1b9 Add minor convenience features to search 2018-09-20 10:16:10 -05:00
cefb5d679f Add label to HLS 2018-09-20 09:45:49 -05:00
62380933b2 Add support for playlists and channels in search 2018-09-20 09:36:09 -05:00
1627cfc2fa Update changelog 2018-09-19 19:27:08 -05:00
82cc407629 Add CHANGELOG.md 2018-09-19 19:25:31 -05:00
bac66c798f Remove debug info 2018-09-19 15:58:00 -05:00
2c6f8022e6 Fix comments where link has no host 2018-09-19 15:25:49 -05:00
fe5286a210 Add 'maxres' to video thumbnails 2018-09-19 15:24:41 -05:00
bb604c8925 Add movies to search results 2018-09-19 15:24:19 -05:00
c166f46b7c Add caption URL to video info 2018-09-19 14:08:59 -05:00
4c8bb3b293 Fix typo 2018-09-19 10:39:07 -05:00
0f5b93e394 Add 'authorId' to /api/v1/trending and /api/v1/top 2018-09-19 10:37:00 -05:00
54f9941c7b Add alias '/api/v1/channels/videos/:ucid' 2018-09-18 10:47:22 -05:00
8500a62462 Add /api/v1/insights 2018-09-17 20:08:26 -05:00
53c8b5ff2e Minor refactor 2018-09-17 20:07:32 -05:00
64cc0362fb Add fix for playlists with no views 2018-09-17 19:21:13 -05:00
35bee987f6 Proxy profile pictures 2018-09-17 18:39:28 -05:00
bd5ec2f2f3 Add playlist RSS 2018-09-17 18:13:24 -05:00
296771809a Refactor protocol buffers 2018-09-17 16:56:28 -05:00
83ba4e2a4c Fix truncated thumbnails 2018-09-17 14:48:02 -05:00
6cb834a18d Add support for 304 in thumbnails 2018-09-17 09:38:52 -05:00
0a4e9e6252 Properly filter user's subscriptions in search 2018-09-16 22:14:51 -05:00
9619d3f1bc Fix channel refresh 2018-09-16 21:44:24 -05:00
f39ed3d145 Add subscriptions search filter 2018-09-16 21:28:00 -05:00
f38aac851e Fix full channel refresh 2018-09-16 20:32:39 -05:00
b6adeb80e6 Fix player margin 2018-09-15 13:04:13 -05:00
c74cc1123f Maintain aspect ratio even when JS is disabled 2018-09-15 12:15:39 -05:00
0e1b5d7cdd Add fix for dash sequences 2018-09-15 10:25:43 -05:00
d2bbf9d33c Fix dash parsing for video info 2018-09-15 08:56:47 -05:00
3ccee120d3 Proxy thumbnails for related videos 2018-09-15 08:20:43 -05:00
6753294ee1 Fix poster resize 2018-09-14 22:38:53 -05:00
f9881ebaab Update videojs-share.css 2018-09-14 21:49:05 -05:00
429a4b2dec Proxy thumbnails 2018-09-14 21:24:28 -05:00
4287c0d96a Fix related video bar for users that aren't logged in 2018-09-14 20:10:13 -05:00
5cd137d808 Refactor signature extractor 2018-09-14 19:50:11 -05:00
62ae836565 Remove 'less' button in playlist descriptions 2018-09-13 21:00:39 -05:00
b7acdfad24 Fix typo 2018-09-13 20:27:50 -05:00
d3eadccd51 Add 'publishedText' to API endpoints 2018-09-13 20:26:05 -05:00
2232bc0495 Use escaped newlines instead of graves 2018-09-13 18:12:19 -05:00
f7ca81c384 Add support for channel search 2018-09-13 17:47:31 -05:00
d4ee786cab Add support for comments under controversial videos 2018-09-13 16:09:14 -05:00
a54668688b Add support for dashmpd within video info 2018-09-12 22:31:47 -05:00
89bda1d3db Remove migration points 2018-09-09 21:58:22 -05:00
e0ee1c3d79 Shrink size of template gutters 2018-09-09 14:50:24 -05:00
5b2c228bb6 Add 'license' 2018-09-09 14:47:26 -05:00
ffab3ee79f Shrink size between video requests 2018-09-09 14:41:29 -05:00
dc6cc028c5 Remove migration point 2018-09-09 14:34:16 -05:00
c1f17f2f82 Show quality selector even if only one source 2018-09-09 14:23:37 -05:00
1c8bd671d8 Fix link redirect for YouTube comments 2018-09-09 09:18:31 -05:00
133b72f9cf Add support for genre channels that don't end with " - Topic" 2018-09-09 08:53:04 -05:00
8c45694ce5 Escape comment text 2018-09-09 07:40:12 -05:00
bd820b9b48 Update videojs-share.js 2018-09-07 15:55:11 -05:00
47e94fedc6 Fix signature extraction 2018-09-07 15:52:46 -05:00
aff2083529 Fix missing 'end' 2018-09-06 18:18:36 -05:00
1eae76fc15 Add fix for empty descriptions 2018-09-06 16:50:12 -05:00
cf63c825d4 Add fix for shortened youtu.be links in comments 2018-09-06 16:45:15 -05:00
446d8569a4 Bump version to match tag 2018-09-06 10:54:12 -05:00
454b1662b7 Add format=json for reddit comments 2018-09-06 10:19:28 -05:00
3ec684ae71 Host assets locally 2018-09-06 09:59:17 -05:00
b17d3d1e51 Bump number of videos in channel resources to 60 2018-09-06 08:43:22 -05:00
d81a803618 Add /user/:user/videos 2018-09-05 23:12:11 -05:00
e6d2166bac Add X-XSS-Protection and X-Content-Type-Options 2018-09-05 21:51:40 -05:00
e590d39aa9 Revert "Add header check for CSRF"
This reverts commit a749ac73ac.
2018-09-05 21:45:14 -05:00
4f91854bd3 Fix typo 2018-09-05 21:10:32 -05:00
29a21860ae Strip leading slashes from referers 2018-09-05 21:07:19 -05:00
96234e509f Add X-Frame-Options, X-XSS-Protection, and X-Content-Type-Options 2018-09-05 21:06:30 -05:00
a749ac73ac Add header check for CSRF 2018-09-05 20:32:01 -05:00
62f023c50f Add 'https_only' default 2018-09-05 20:31:08 -05:00
29dc114f7a Bump supported Crystal version 2018-09-05 20:30:44 -05:00
023066b452 Revert "Remove 'codecs' from source types"
This reverts commit 93e12d94fc.
2018-09-05 10:49:40 -05:00
93e12d94fc Remove 'codecs' from source types 2018-09-05 10:38:01 -05:00
044a57ef34 Fix video count for channels 2018-09-04 23:01:46 -05:00
bc49c7d181 Add author info to API endpoints 2018-09-04 21:35:25 -05:00
5632e58636 Add support for genre channels 2018-09-04 21:04:40 -05:00
e1bf7fa6cc Add descriptionHtml to playlists 2018-09-04 19:27:10 -05:00
40028e1462 Update SQL and remove migration points 2018-09-04 09:57:40 -05:00
53732cdcab Add genre URLs 2018-09-04 09:50:19 -05:00
2ac89d5e00 Update project synopsis 2018-09-04 09:22:10 -05:00
98d71ca8e7 Add support for /c/ URLs 2018-09-04 09:13:58 -05:00
0f2f273335 Don't leak referers 2018-09-04 09:01:43 -05:00
000cfd4834 Don't show comments when commentCount is 0 2018-09-04 08:52:39 -05:00
25c3ee034e Minor refactor 2018-09-04 08:52:30 -05:00
89d3587861 Fix typo 2018-09-03 22:20:20 -05:00
0d8f036bf1 Replace YouTube links 2018-09-03 22:15:47 -05:00
81c520e0dd Add info to README 2018-09-03 21:42:49 -05:00
c0bda13965 Fix view_count_text 2018-08-31 22:53:41 -05:00
3b1df75061 Merge pull request #143 from dimqua/patch-1
Change the color of progressBar marker
2018-08-31 18:20:30 -05:00
eda5beaed5 Change the color of progressBar marker 2018-08-31 16:49:02 +03:00
4022670cb1 Fix typo in video params 2018-08-30 21:04:41 -05:00
7b135a6d0c Add commentCount for videos with no comments 2018-08-30 21:03:22 -05:00
bdaa8a06fd Fix typo 2018-08-30 20:25:43 -05:00
b3f9059452 Add comment formatting 2018-08-30 20:06:08 -05:00
917d220623 Fix search filters 2018-08-30 17:42:30 -05:00
ed8ddbc07d Add seperator when notifications > 0 2018-08-30 16:52:29 -05:00
cb01b50fbb Add option to hide related videos 2018-08-30 16:49:38 -05:00
6b3c9d23d0 Fix referer on 404 2018-08-30 08:14:59 -05:00
3839013a37 Use '/video' page for channel endpoint 2018-08-28 20:29:08 -05:00
9d5dddab29 Fix signature extraction 2018-08-28 09:51:59 -05:00
359 changed files with 55609 additions and 6177 deletions

69
.ameba.yml Normal file
View File

@ -0,0 +1,69 @@
#
# Lint
#
# Exclude assigns for ECR files
Lint/UselessAssign:
Excluded:
- src/invidious.cr
- src/invidious/helpers/errors.cr
- src/invidious/routes/**/*.cr
# Ignore false negative (if !db.query_one?...)
Lint/UnreachableCode:
Excluded:
- src/invidious/database/base.cr
# Ignore shadowed variable `key` (it works for now, and that's
# a sensitive part of the code)
Lint/ShadowingOuterLocalVar:
Excluded:
- src/invidious/helpers/tokens.cr
Lint/NotNil:
Enabled: false
Lint/SpecFilename:
Excluded:
- spec/parsers_helper.cr
#
# Style
#
Style/RedundantBegin:
Enabled: false
Style/RedundantReturn:
Enabled: false
Style/ParenthesesAroundCondition:
Enabled: false
# This requires a rewrite of most data structs (and their usage) in Invidious.
Naming/QueryBoolMethods:
Enabled: false
Naming/AccessorMethodName:
Enabled: false
Naming/BlockParameterName:
Enabled: false
# Hides TODO comment warnings.
#
# Call `bin/ameba --only Documentation/DocumentationAdmonition` to
# list them
Documentation/DocumentationAdmonition:
Enabled: false
#
# Metrics
#
# Ignore function complexity (number of if/else & case/when branches)
# For some functions that can hardly be simplified for now
Metrics/CyclomaticComplexity:
Enabled: false

3
.gitattributes vendored Normal file
View File

@ -0,0 +1,3 @@
# https://github.community/t/how-to-change-the-category/2261/3
videojs-*.js linguist-detectable=false
video.min.js linguist-detectable=false

18
.github/CODEOWNERS vendored Normal file
View File

@ -0,0 +1,18 @@
# Default and lowest precedence. If none of the below matches, @iv-org/developers would be requested for review.
* @iv-org/developers
docker-compose.yml @unixfox
docker/ @unixfox
kubernetes/ @unixfox
README.md @thefrenchghosty
config/config.example.yml @thefrenchghosty @SamantazFox @unixfox
scripts/ @syeopite
shards.lock @syeopite
shards.yml @syeopite
locales/ @SamantazFox
src/invidious/helpers/i18n.cr @SamantazFox
src/invidious/helpers/youtube_api.cr @SamantazFox

1
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1 @@
custom: https://invidious.io/donate/

42
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,42 @@
---
name: Bug report
about: Create a bug report to help us improve Invidious
title: '[Bug] '
labels: bug
assignees: ''
---
<!--
BEFORE TRYING TO REPORT A BUG:
* Read the FAQ!
* Use the search function to check if there is already an issue open for your problem!
If you want to suggest a new feature please use "Feature request" instead
If you want to suggest an enhancement to an existing feature please use "Enhancement" instead
-->
**Describe the bug**
<!-- A clear and concise description of what the bug is. -->
**Steps to Reproduce**
<!-- Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
-->
**Logs**
<!-- If applicable, copy the log that appear in the browser page where the error is reported. -->
**Screenshots**
<!-- If applicable, add screenshots to help explain your problem. -->
**Additional context**
<!-- Add any other context about the problem here.
- Browser (if applicable):
- OS (if applicable):
-->

24
.github/ISSUE_TEMPLATE/enhancement.md vendored Normal file
View File

@ -0,0 +1,24 @@
---
name: Enhancement
about: Suggest an enhancement for an existing feature
title: '[Enhancement] '
labels: enhancement
assignees: ''
---
<!-- Please use the search function to check if the desired function has already been requested by someone else -->
<!-- If you want to suggest a new feature please use "Feature request" instead -->
<!-- If you want to report a bug, please use "Bug report" instead -->
**Is your enhancement request related to a problem? Please describe.**
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
**Describe the solution you'd like**
<!-- A clear and concise description of what you want to happen. -->
**Describe alternatives you've considered**
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
**Additional context**
<!-- Add any other context or screenshots about the enhancement here. -->

View File

@ -0,0 +1,24 @@
---
name: Feature request
about: Suggest an idea for this project
title: '[Feature request] '
labels: feature-request
assignees: ''
---
<!-- Please use the search function to check if the desired function has already been requested by someone else -->
<!-- If you want to suggest an enhancement to an existing feature please use "Enhancement" instead -->
<!-- If you want to report a bug, please use "Bug report" instead -->
**Is your feature request related to a problem? Please describe.**
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
**Describe the solution you'd like**
<!-- A clear and concise description of what you want to happen. -->
**Describe alternatives you've considered**
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
**Additional context**
<!-- Add any other context or screenshots about the feature request here. -->

View File

@ -0,0 +1,37 @@
name: Close duplicates
on:
issues:
types: [opened]
jobs:
run:
runs-on: ubuntu-latest
permissions: write-all
steps:
- uses: iv-org/close-potential-duplicates@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Issue title filter work with anymatch https://www.npmjs.com/package/anymatch.
# Any matched issue will stop detection immediately.
# You can specify multi filters in each line.
filter: ''
# Exclude keywords in title before detecting.
exclude: ''
# Label to set, when potential duplicates are detected.
label: duplicate
# Get issues with state to compare. Supported state: 'all', 'closed', 'open'.
state: open
# If similarity is higher than this threshold([0,1]), issue will be marked as duplicate.
threshold: 0.9
# Reactions to be add to comment when potential duplicates are detected.
# Available reactions: "-1", "+1", "confused", "laugh", "heart", "hooray", "rocket", "eyes"
reactions: ''
close: true
# Comment to post when potential duplicates are detected.
comment: |
Hello, your issue is a duplicate of this/these issue(s): {{#issues}}
- #{{ number }} [accuracy: {{ accuracy }}%]
{{/issues}}
If this is a mistake please explain why and ping @\unixfox, @\SamantazFox and @\TheFrenchGhosty.
Please refrain from opening new issues, it won't help in solving your problem.

View File

@ -0,0 +1,100 @@
name: Build and release container directly from master
on:
push:
branches:
- "master"
paths-ignore:
- "*.md"
- LICENCE
- TRANSLATION
- invidious.service
- .git*
- .editorconfig
- screenshots/*
- .github/ISSUE_TEMPLATE/*
- kubernetes/**
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Crystal
uses: crystal-lang/install-crystal@v1.8.2
with:
crystal: 1.12.2
- name: Run lint
run: |
if ! crystal tool format --check; then
crystal tool format
git diff
exit 1
fi
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
platforms: arm64
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to registry
uses: docker/login-action@v3
with:
registry: quay.io
username: ${{ secrets.QUAY_USERNAME }}
password: ${{ secrets.QUAY_PASSWORD }}
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: quay.io/invidious/invidious
tags: |
type=sha,format=short,prefix={{date 'YYYY.MM.DD'}}-,enable=${{ github.ref == format('refs/heads/{0}', 'master') }}
type=raw,value=master,enable=${{ github.ref == format('refs/heads/{0}', 'master') }}
labels: |
quay.expires-after=12w
- name: Build and push Docker AMD64 image for Push Event
uses: docker/build-push-action@v5
with:
context: .
file: docker/Dockerfile
platforms: linux/amd64
labels: ${{ steps.meta.outputs.labels }}
push: true
tags: ${{ steps.meta.outputs.tags }}
build-args: |
"release=1"
- name: Docker meta
id: meta-arm64
uses: docker/metadata-action@v5
with:
images: quay.io/invidious/invidious
flavor: |
suffix=-arm64
tags: |
type=sha,format=short,prefix={{date 'YYYY.MM.DD'}}-,enable=${{ github.ref == format('refs/heads/{0}', 'master') }}
type=raw,value=master,enable=${{ github.ref == format('refs/heads/{0}', 'master') }}
labels: |
quay.expires-after=12w
- name: Build and push Docker ARM64 image for Push Event
uses: docker/build-push-action@v5
with:
context: .
file: docker/Dockerfile.arm64
platforms: linux/arm64/v8
labels: ${{ steps.meta-arm64.outputs.labels }}
push: true
tags: ${{ steps.meta-arm64.outputs.tags }}
build-args: |
"release=1"

View File

@ -0,0 +1,90 @@
name: Build and release container
on:
push:
tags:
- "v*"
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Crystal
uses: crystal-lang/install-crystal@v1.8.2
with:
crystal: 1.12.2
- name: Run lint
run: |
if ! crystal tool format --check; then
crystal tool format
git diff
exit 1
fi
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
platforms: arm64
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to registry
uses: docker/login-action@v3
with:
registry: quay.io
username: ${{ secrets.QUAY_USERNAME }}
password: ${{ secrets.QUAY_PASSWORD }}
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: quay.io/invidious/invidious
tags: |
type=semver,pattern={{version}}
type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'master') }}
labels: |
quay.expires-after=12w
- name: Build and push Docker AMD64 image for Push Event
uses: docker/build-push-action@v5
with:
context: .
file: docker/Dockerfile
platforms: linux/amd64
labels: ${{ steps.meta.outputs.labels }}
push: true
tags: ${{ steps.meta.outputs.tags }}
build-args: |
"release=1"
- name: Docker meta
id: meta-arm64
uses: docker/metadata-action@v5
with:
images: quay.io/invidious/invidious
flavor: |
suffix=-arm64
tags: |
type=semver,pattern={{version}}
type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'master') }}
labels: |
quay.expires-after=12w
- name: Build and push Docker ARM64 image for Push Event
uses: docker/build-push-action@v5
with:
context: .
file: docker/Dockerfile.arm64
platforms: linux/arm64/v8
labels: ${{ steps.meta-arm64.outputs.labels }}
push: true
tags: ${{ steps.meta-arm64.outputs.tags }}
build-args: |
"release=1"

151
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,151 @@
name: Invidious CI
on:
schedule:
- cron: "0 0 * * *" # Every day at 00:00
push:
branches:
- "master"
- "api-only"
pull_request:
branches: "*"
paths-ignore:
- "*.md"
- LICENCE
- TRANSLATION
- invidious.service
- .git*
- .editorconfig
- screenshots/*
- assets/**
- locales/*
- config/**
- .github/ISSUE_TEMPLATE/*
- kubernetes/**
jobs:
build:
runs-on: ubuntu-latest
name: "build - crystal: ${{ matrix.crystal }}, stable: ${{ matrix.stable }}"
continue-on-error: ${{ !matrix.stable }}
strategy:
fail-fast: false
matrix:
stable: [true]
crystal:
- 1.9.2
- 1.10.1
- 1.11.2
- 1.12.1
include:
- crystal: nightly
stable: false
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install Crystal
uses: crystal-lang/install-crystal@v1.8.0
with:
crystal: ${{ matrix.crystal }}
- name: Cache Shards
uses: actions/cache@v3
with:
path: ./lib
key: shards-${{ hashFiles('shard.lock') }}
- name: Install Shards
run: |
if ! shards check; then
shards install
fi
- name: Run tests
run: crystal spec
- name: Run lint
run: |
if ! crystal tool format --check; then
crystal tool format
git diff
exit 1
fi
- name: Build
run: crystal build --warnings all --error-on-warnings --error-trace src/invidious.cr
build-docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build Docker
run: docker compose build --build-arg release=0
- name: Run Docker
run: docker compose up -d
- name: Test Docker
run: while curl -Isf http://localhost:3000; do sleep 1; done
build-docker-arm64:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
platforms: arm64
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build Docker ARM64 image
uses: docker/build-push-action@v5
with:
context: .
file: docker/Dockerfile.arm64
platforms: linux/arm64/v8
build-args: release=0
- name: Test Docker
run: while curl -Isf http://localhost:3000; do sleep 1; done
ameba_lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install Crystal
uses: crystal-lang/install-crystal@v1.8.0
with:
crystal: latest
- name: Cache Shards
uses: actions/cache@v3
with:
path: |
./lib
./bin
key: shards-${{ hashFiles('shard.lock') }}
- name: Install Shards
run: shards install
- name: Run Ameba linter
run: bin/ameba

26
.github/workflows/stale.yml vendored Normal file
View File

@ -0,0 +1,26 @@
# Documentation: https://github.com/marketplace/actions/close-stale-issues
name: "Stale issue handler"
on:
workflow_dispatch:
schedule:
- cron: "0 */12 * * *"
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v8
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 365
days-before-pr-stale: 90
days-before-close: 30
exempt-pr-labels: blocked,exempt-stale
stale-issue-message: 'This issue has been automatically marked as stale and will be closed in 30 days because it has not had recent activity and is much likely outdated. If you think this issue is still relevant and applicable, you just have to post a comment and it will be unmarked.'
stale-pr-message: 'This pull request has been automatically marked as stale and will be closed in 30 days because it has not had recent activity and is much likely abandoned or outdated. If you think this pull request is still relevant and applicable, you just have to post a comment and it will be unmarked.'
stale-issue-label: "stale"
stale-pr-label: "stale"
ascending: true
# Never mark feature requests/enhancements as stale
exempt-issue-labels: "feature-request,enhancement,exempt-stale"

4
.gitignore vendored
View File

@ -1,4 +1,4 @@
/doc/
/docs/
/dev/
/lib/
/bin/
@ -6,4 +6,4 @@
/.vscode/
/invidious
/sentry
shard.lock
/config/config.yml

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "mocks"]
path = mocks
url = ../mocks

20
CHANGELOG.md Normal file
View File

@ -0,0 +1,20 @@
# CHANGELOG
## 2024-04-26
Major bug fixes:
* Videos: Use android test suite client (#4650, thanks @SamantazFox)
* Trending: Un-nest category if this is the only one (#4600, thanks @ChunkyProgrammer)
* Comments: Add support for new format (#4576, thanks @ChunkyProgrammer)
Minor bug fixes:
* API: Add bitrate to formatStreams too (#4590, thanks @absidue)
* API: Add 'authorVerified' field on recommended videos (#4562, thanks @ChunkyProgrammer)
* Videos: Add support for new likes format (#4462, thanks @ChunkyProgrammer)
* Proxy: Handle non-200 HTTP codes on DASH manifests (#4429, thanks @absidue)
Other improvements:
* Remove legacy proxy code (#4570, thanks @syeopite)
* API: convey info "is post live" from Youtube response (#4569, thanks @ChunkyProgrammer)
* API: Parse channel's tags (#4294, thanks @ChunkyProgrammer)
* Translations update from Hosted Weblate (#4164, thanks to our many translators)

844
CHANGELOG_legacy.md Normal file
View File

@ -0,0 +1,844 @@
# Note: This is no longer updated and links to omarroths repo, which doesn't exist anymore.
# 0.20.0 (2019-011-06)
# Version 0.20.0: Custom Playlists
It's been quite a while since the last release! There've been [198 commits](https://github.com/omarroth/invidious/compare/0.19.0..0.20.0) from 27 contributors.
A couple smaller features have since been added. Channel pages and playlists in particular have received a bit of a face-lift, with both now displaying their descriptions as expected, and playlists providing video count and published information. Channels will also now provide video descriptions in their RSS feed.
Turkish (tr), Chinese (zh-TW, in addition to zh-CN), and Japanese (jp) are all now supported languages. Thank you as always to the hard work done by translators that makes this possible.
The feed menu and default home page are both now configurable for registered and unregistered users, and is quite a bit of an improvement for users looking to reduce distractions for their daily use.
## For Administrators
`feed_menu` and `default_home` are now configurable by the user, and have therefore been moved into `default_user_preferences`:
```yaml
feed_menu: ["Popular", "Top"]
default_home: Top
# becomes:
default_user_preferences:
feed_menu: ["Popular", "Top"]
default_home: Top
```
Several new options have also been added, including the ability to set a support email for the instance using `admin_email: EMAIL`, and forcing the use of a specific connection in the case of rate-limiting using `force_resolve` (see below).
## For Developers
Authenticated endpoints are now [properly documented](https://github.com/omarroth/invidious/wiki/Authenticated-Endpoints), as well how to generate and use API tokens. My hope is that this makes some of the more [interesting](https://github.com/omarroth/invidious/wiki/Authenticated-Endpoints#get-apiv1authnotifications) endpoints more accessible for developers to use in their own applications.
API endpoints for interacting with custom playlists have also been added with documentation available [here](https://github.com/omarroth/invidious/wiki/Authenticated-Endpoints#get-apiv1authplaylists).
## Custom playlists
This is probably the feature that has been the longest in the pipe and that I'm quite pleased is now implemented. It is now possible to create custom playlists, which can be played and edited through Invidious. API endpoints have also been added (documentation [here](https://github.com/omarroth/invidious/wiki/Authenticated-Endpoints#get-apiv1authplaylists)).
Overall I'm quite pleased with how smoothly it has been rolled out and with the experience so far, and I'm exctited for how it can be extended and improved in future.
## [instances.invidio.us](https://instances.invidio.us)
It is now possible to view a list of public instances (as provided in the [wiki](https://github.com/omarroth/invidious/wiki/Invidious-Instances)) through an API or a pretty new interface [here](https://instances.invidio.us). It combines uptime information, statistics from each instance and basic information already provided in the wiki. I expect it should be much more user-friendly than compiling the information yourself, and is already used by [Invidition](https://codeberg.org/Booteille/Invidition) to provide a list of instances for users to choose from.
The site itself is licensed under the AGPLv3 and the source is available [here](https://github.com/omarroth/instances.invidio.us).
## Video unavailable [#811](https://github.com/omarroth/invidious/issues/811)
Many users have likely noticed this error message if using Invidious directly or through another service, such as FreeTube. This issue is caused by rate-limiting by Google, and is not a new issuee for projects like Invidious (notably [youtube-dl](https://github.com/ytdl-org/youtube-dl#http-error-429-too-many-requests-or-402-payment-required)) and appears to be affecting smaller, private instances as well.
There is not a permanent fix for administrators currently, however there is some information available [here](https://github.com/omarroth/invidious/issues/811#issuecomment-540017772) that may provide a temporary solution. Unfortanately, in most cases the best option is to wait for the instance to be unbanned or to move the instance to a different IP. A more informative error message is also now provided, which should help an administrator more quickly diagnose the problem.
For those interested, I would recommend following [#811](https://github.com/omarroth/invidious/issues/811) for any future progress on the issue.
## BAT verified publisher
I'm quite late to this announcement, however I'm pleased to mention that Invidious is now a BAT verified publisher! I would recommend looking [here](https://basicattentiontoken.org/about/) or [here](https://www.reddit.com/r/BATProject/comments/7cr7yc/new_to_bat_read_this_introduction_to_basic/) for learning more about what it is and how it works. Overall I think it makes an interesting substitute for services like Liberapay, and a (hopefully) much less-intrusive alternative to direct advertising.
BAT is combined under other cryptocurrencies below. Currently there's a fairly significant delay in payout, which is the reason for the large fluctuation in crypto donations between September and October (and also the reason for the late announcement).
## Release schedule
Currently I'm quite pleased with the current state of the project. There's plenty of things I'd still like to add, however at this point I expect the rate of most new additions will slow down a bit, with more focus on stabililty and any long-standing bugs.
Because of this, I'm planning on releasing a new version quarterly, with any necessary hotfixes being pushed as a new patch release as necessary. As always it will be possible to run Invidious directly from [master](https://github.com/omarroth/invidious/wiki/Updating) if you'd still like to have the lastest version.
I'll plan on providing finances each release, with a similar monthly breakdown as below.
## Finances for September 2019
### Donations
- [Patreon](https://www.patreon.com/omarroth) : \$64.37
- [Liberapay](https://liberapay.com/omarroth) : \$76.04
- Crypto : ~\$99.89 (converted from BAT, BCH, BTC)
- Total : \$240.30
### Expenses
- invidious-lb1 (nyc1) : \$10.00 (load balancer)
- invidious-update1 (s-1vcpu-1gb) : \$5.00 (updates feeds)
- invidious-node1 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node2 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node3 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node4 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node5 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node6 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node7 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node8 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node9 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node10 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node11 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node12 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node13 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node14 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node15 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node16 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-db1 (s-4vcpu-8gb) : \$40.00 (database)
- Total : \$135.00
## Finances for October 2019
- [Liberapay](https://liberapay.com/omarroth) : \$134.40
- Crypto : ~\$8.29 (converted from BAT, BCH, BTC)
- Total : \$142.69
### Expenses
- invidious-lb1 (nyc1) : \$5.00 (load balancer)
- invidious-lb2 (nyc1) : \$5.00 (load balancer)
- invidious-lb3 (nyc1) : \$5.00 (load balancer)
- invidious-lb4 (nyc1) : \$5.00 (load balancer)
- invidious-update1 (s-1vcpu-1gb) : \$5.00 (updates feeds)
- invidious-node1 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node2 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node3 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node4 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node5 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node6 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node7 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node8 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node9 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node10 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node11 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node12 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node13 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node14 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node15 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node16 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node17 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node18 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-db1 (s-4vcpu-8gb) : \$40.00 (database)
- Total : \$155.00
# 0.19.0 (2019-07-13)
# Version 0.19.0: Communities
Hello again everyone! Focus this month has mainly been on improving playback performance, along with a couple new features I'd like to announce. There have been [109 commits](https://github.com/omarroth/invidious/compare/0.18.0...0.19.0) this past month from 10 contributors.
This past month has seen the addition of Chinese (`zh-CN`) and Icelandic (`is`) translations. I would like to give a huge thanks to their respective translators, and again an enormous thanks to everyone who helps translate the site.
I'm delighted to mention that [FreeTube 0.6.0](https://github.com/FreeTubeApp/FreeTube) now supports 1080p thanks to the Invidious API. I would very much recommend reading the [relevant post](https://freetube.writeas.com/freetube-release-0-6-0-beta-1080p-and-a-lot-of-qol) for some more information on how it works, along with several other major improvements. Folks that are interested in adding similar functionality for their own projects should feel free to get in touch.
This past month there has been quite a bit of work on improving memory usage and improving download and playback speeds. As mentioned in the previous release, some extra hardware has been allocated which should also help with this. I'm still looking for ways to improve performance and feedback is always appreciated.
Along with performance, a couple quality of life improvements have been added, including author thumbnails and banners, clickable titles for embedded videos, and better styling for captions, among some other enhancements.
## Communities
Support for YouTube's [communities tab](https://creatoracademy.youtube.com/page/lesson/community-tab) has been added. It's a very interesting but surprisingly unknown feature. Essentially, providing comments for a channel, rather than a video, where an author can post updates for their subscribers.
It's commonly used to promote interesting links and foster discussion. I hope this feature helps people find more interesting content that otherwise would have been overlooked.
## For Developers
For accessing channel communities, an `/api/v1/channels/comments/:ucid` endpoint has been added, with similar behavior and schema to `/api/v1/comments/:id`, with an extra `attachment` field for top-level comments. More info on usage and available data can be found in the [wiki](https://github.com/omarroth/invidious/wiki/API#get-apiv1channelscommentsucid-apiv1channelsucidcomments).
An `/api/v1/auth/feeds` endpoint has been added for programmatically accessing a user's subscription feed, with options for displaying notifications and filtering an existing feed.
An `/api/v1/search/suggestions` endpoint has been added for retrieving suggestions for a given query.
## For Administrators
It is now possible to disable more resource intensive features, such as downloads and DASH functionality by adding `disable_proxy` to your config. See [#453](https://github.com/omarroth/invidious/issues/453) and the [Wiki](https://github.com/omarroth/invidious/wiki/Configuration) for more information and example usage. I expect this to be a big help for folks with limited bandwidth when hosting their own instances.
## Finances
### Donations
- [Patreon](https://www.patreon.com/omarroth) : \$38.39
- [Liberapay](https://liberapay.com/omarroth) : \$84.85
- Crypto : ~\$0.00 (converted from BCH, BTC)
- Total : \$123.24
### Expenses
- invidious-load1 (nyc1) : \$10.00 (load balancer)
- invidious-update1 (s-1vcpu-1gb) : \$5.00 (updates feeds)
- invidious-node1 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node2 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node3 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node4 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node5 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node6 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node7 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node8 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node9 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node10 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-db1 (s-4vcpu-8gb) : \$40.00 (database)
- Total : \$105.00
The goal on Patreon has been updated to reflect the above expenses. As mentioned above, the main reason for more hardware is to improve playback and download speeds, although I'm still looking into improving performance without allocating more hardware.
As always I'm grateful for everyone's support and feedback. I'll see you all next month.
# 0.18.0 (2019-06-06)
# Version 0.18.0: Native Notifications and Optimizations
Hope everyone has been doing well. This past month there have been [97 commits](https://github.com/omarroth/invidious/compare/0.17.0...0.18.0) from 10 contributors. For the most part changes this month have been on optimizing various parts of the site, mainly subscription feeds and support for serving images and other assets.
I'm quite happy to mention that support for Greek (`el`) has been added, which I hope will continue to make the site accessible for more users.
Subscription feeds will now only update when necessary, rather than periodically. This greatly lightens the load on DB as well as making the feeds generally more responsive when changing subscriptions, importing data, and when receiving new uploads.
Caching for images and other assets should be greatly improved with [#456](https://github.com/omarroth/invidious/issues/456). JavaScript has been pulled out into separate files where possible to take advantage of this, which should result in lighter pages and faster load times.
This past month several people have encountered issues with downloads and watching high quality video through the site, see [#532](https://github.com/omarroth/invidious/issues/532) and [#562](https://github.com/omarroth/invidious/issues/562). For this coming month I've allocated some more hardware which should help with this, and I'm also looking into optimizing how videos are currently served.
## For Developers
`viewCount` is now available for `/api/v1/popular` and all videos returned from `/api/v1/auth/notifications`. Both also now provide `"type"` for indicating available information for each object.
An `/authorize_token` page is now available for more easily creating new tokens for use in applications, see [this comment](https://github.com/omarroth/invidious/issues/473#issuecomment-496230812) in [#473](https://github.com/omarroth/invidious/issues/473) for more details.
A POST `/api/v1/auth/notifications` endpoint is also now available for correctly returning notifications for 150+ channels.
## For Administrators
There are two new schema changes for administrators: `views` for adding view count to the popular page, and `feed_needs_update` for tracking feed changes.
As always the relevant migration scripts are provided which should run when following instructions for [updating](https://github.com/omarroth/invidious/wiki/Updating). Otherwise, adding `check_tables: true` to your config will automatically make the required changes.
## Native Notifications
[<img src="https://omar.yt/81c3ae1839831bd9300d75e273b6552a86dc2352/native_notification.png" height="160" width="472">](https://omar.yt/81c3ae1839831bd9300d75e273b6552a86dc2352/native_notification.png "Example of native notification, available in repository under screnshots/native_notification.png")
It is now possible to receive [Web notifications](https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API) from subscribed channels.
You can enable notifications by clicking "Enable web notifications" in your preferences. Generally they appear within 20-60 seconds of a new video being uploaded, and I've found them to be an enormous quality of life improvement.
Although it has been fairly stable, please feel free to report any issues you find [here](https://github.com/omarroth/invidious/issues) or emailing me directly at omarroth@protonmail.com.
Important to note for administrators is that instances require [`use_pubsub_feeds`](https://github.com/omarroth/invidious/wiki/Configuration) and must be served over HTTPS in order to correctly send web notifications.
## Finances
### Donations
- [Patreon](https://www.patreon.com/omarroth) : \$49.73
- [Liberapay](https://liberapay.com/omarroth) : \$100.57
- Crypto : ~\$11.12 (converted from BCH, BTC)
- Total : \$161.42
### Expenses
- invidious-load1 (nyc1) : \$10.00 (load balancer)
- invidious-update1 (s-1vcpu-1gb) : \$5.00 (updates feeds)
- invidious-node1 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node2 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node3 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node4 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node5 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node6 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-db1 (s-4vcpu-8gb) : \$40.00 (database)
- Total : \$85.00
See you all next month!
# 0.17.0 (2019-05-06)
# Version 0.17.0: Player and Authentication API
Hello everyone! This past month there have been [130 commits](https://github.com/omarroth/invidious/compare/0.16.0..0.17.0) from 11 contributors. Large focus has been on improving the player as well as adding API access for other projects to make use of Invidious.
There have also been significant changes in preparation of native notifications (see [#195](https://github.com/omarroth/invidious/issues/195), [#469](https://github.com/omarroth/invidious/issues/469), [#473](https://github.com/omarroth/invidious/issues/473), and [#502](https://github.com/omarroth/invidious/issues/502)), and playlists. I expect to see both of these to be added in the next release.
I'm quite happy to mention that new translations have been added for Esperanto (`eo`) and Ukranian (`uk`). Support for pluralization has also been added, so it should now be possible to make a more native experience for speakers in other languages. The system currently in place is a bit cumbersome, so for any help using this feature please get in touch!
## For Administrators
A `check_tables` option has been added to automatically migrate without the use of custom scripts. This method will likely prove to be much more robust, and is currently enabled for the official instance. To prevent any unintended changes to the DB, `check_tables` is disabled by default and will print commands before executing. Having this makes features that require schema changes much easier to implement, and also makes it easier to upgrade from older instances.
As part of [#303](https://github.com/omarroth/invidious/issues/303), a `cache_annotations` option has been added to speed up access from `/api/v1/annotations/:id`. This vastly improves the experience for videos with annotations. Currently, only videos that contain legacy annotations will be cached, which should help keep down the size of the cache. `cache_annotations` is disabled by default.
## For Developers
An authorization API has been added which allows other applications to read and modify user subscriptions and preferences (see [#473](https://github.com/omarroth/invidious/issues/473)). Support for accessing user feeds and notifications is also planned. I believe this feature is a large step forward in supporting syncing subscriptions and preferences with other services, and I'm excited to see what other developers do with this functionality.
Support for server-to-client push notifications is currently underway. This allows Invidious users, as well as applications using the Invidious API, to receive notifications about uploads in near real-time (see #469). An `/api/v1/auth/notifications` endpoint is currently available. I'm very excited for this to be integrated into the site, and to see how other developers use it in their own projects.
An `/api/v1/storyboards/:id` endpoint has been added for accessing storyboard URLs, which allows developers to add video previews to their players (see below).
## Player
Support for annotations has been merged into master with [#303](https://github.com/omarroth/invidious/issues/303), thanks @glmdgrielson! Annotations can be enabled by default or only for subscribed channels, and can also be toggled per video. I'm extremely proud of the progress made here, and I'm so thankful to everyone that has made this possible. I expect this to be the last update with regards to supporting annotations, but I do plan on continuing to improve the experience as much as possible.
The Invidious player now supports video previews and a corresponding API endpoint `/api/v1/storyboards/:id` has been added for developers looking to add similar functionality to their own players. Not much else to say here. Overall it's a very nice quality of life improvement and an attractive addition to the site.
It is now possible to select specific sources for videos provided using DASH (see [#34](https://github.com/omarroth/invidious/issues/34)). I would consider support largely feature complete, although there are still several issues to be fixed before I would consider it ready for larger rollout. You can watch videos in 1080p by setting `Default quality` to `dash` in your preferences, or by adding `&quality=dash` to the end of video URLs.
## Finances
### Donations
- [Patreon](https://www.patreon.com/omarroth) : \$49.73
- [Liberapay](https://liberapay.com/omarroth) : \$63.03
- Crypto : ~\$0.00 (converted from BCH, BTC)
- Total : \$112.76
### Expenses
- invidious-load1 (nyc1) : \$10.00 (load balancer)
- invidious-update1 (s-1vcpu-1gb) : \$5.00 (updates feeds)
- invidious-node1 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node2 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node3 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node4 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node5 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-db1 (s-4vcpu-8gb) : \$40.00 (database)
- Total : \$80.00
That's all for now. Thanks!
# 0.16.0 (2019-04-06)
# Version 0.16.0: API Improvements and Annotations
Hello again! This past month has seen [116 commits](https://github.com/omarroth/invidious/compare/0.15.0..0.16.0) from 13 contributors and a couple important changes I'd like to announce.
A privacy policy is now available [here](https://invidio.us/privacy). I've done my best to explain things as clearly as possible without oversimplifying, and would very much recommend reading it if you're concerned about your privacy and want to learn more about how Invidious uses your data. Please let me know if there is anything that needs clarification.
I'm also very happy to announce that a Spanish translation has been added to the site. You can use it with `?hl=es` or by setting `es` as your default locale. As always I'm extremely grateful to translators for making the site accessible to more people.
## For Administrators
Invidious now supports server-to-server [push notifications](https://developers.google.com/youtube/v3/guides/push_notifications). This uses [PubSubHubbub](https://pubsubhubbub.github.io/PubSubHubbub/pubsubhubbub-core-0.4.html) to automatically handle new videos sent to an instance, which is less resource intensive and generally faster. Note that it will not pull all videos from a subscribed channel, so recommended usage is in addition to `channel_threads`. Using PubSub requires a valid `domain` that updates can be sent to, and a random string that can be used to sign updates sent to the instance. You can enable it by adding `use_pubsub_feeds: true` to your `config.yml`. See [Configuration](https://github.com/omarroth/invidious/wiki/Configuration) for more info.
Unfortunately there are a couple necessary changes to the DB to support `liveNow` and `premiereTimestamp` in subscription feeds. Migration scripts have been provided that should be used automatically if following the instructions [here](https://github.com/omarroth/invidious/wiki/Updating).
You can now configure default user preferences for your instance. This allows you to set default locale, player preferences, and more. See [#415](https://github.com/omarroth/invidious/issues/415) for more details and example usage.
## For Developers
The [fields](https://developers.google.com/youtube/v3/getting-started#fields) API has been added with [#429](https://github.com/omarroth/invidious/pull/429) and is now supported on all JSON endpoints, thanks [**@afrmtbl**](https://github.com/afrmtbl)! Synax is straight-forward and can be used to reduce data transfer and create a simpler response for debugging. You can see an example [here](https://invidio.us/api/v1/videos/CvFH_6DNRCY?pretty=1&fields=title,recommendedVideos/title). I've been quite happy using it and hope it is similarly useful for others.
An `/api/v1/annotations/:id` endpoint has been added for pulling legacy annotation data from [this](https://archive.org/details/youtubeannotations) archive, see below for more details. You can also access annotation data available on YouTube using `?source=youtube`, although this will only return card data as legacy annotations were deleted on January 15th.
A couple minor changes to existing endpoints:
- A `premiereTimestamp` field has been added to `/api/v1/videos/:id`
- A `sort_by` param has been added to `/api/v1/comments/:id`, supports `new`, `top`.
More info is available in the [documentation](https://github.com/omarroth/invidious/wiki/API).
## Annotations
I'm pleased to announce that annotation data is finally available from the roughly 1.4 billion videos archived as part of [this](https://www.reddit.com/r/DataHoarder/comments/aa6czg/youtube_annotation_archive/) project. They are accessible from the Internet Archive [here](https://archive.org/details/youtubeannotations) or as a 355GB torrent, see [here](https://www.reddit.com/r/DataHoarder/comments/b7imx9/youtube_annotation_archive_annotation_data_from/) for more details. A corresponding `/api/v1/annotations/:id` endpoint has been added to Invidious which uses the collection from IA to provide legacy annotations.
Support for them in the player is possible thanks to [this](https://github.com/afrmtbl/videojs-youtube-annotations) plugin developed by [**@afrmtbl**](https://github.com/afrmtbl). A PR for adding support to the site is available as [#303](https://github.com/omarroth/invidious/pull/303). There's also an [extension](https://github.com/afrmtbl/AnnotationsRestored) for overlaying them on top of the YouTube player (again thanks to [**@afrmtbl**](https://github.com/afrmtbl)), and an [extension](https://tech234a.bitbucket.io/AnnotationsReloaded?src=invidious) for hooking into code still present in the YouTube player itself, developed by [**@tech234a**](https://github.com/tech234a).
I would recommend reading the [official announcement](https://www.reddit.com/r/DataHoarder/comments/b7imx9/youtube_annotation_archive_annotation_data_from/) for more details. I would like to again thank everyone that helped contribute to this project.
## Finances
### Donations
- [Patreon](https://www.patreon.com/omarroth) : \$42.42
- [Liberapay](https://liberapay.com/omarroth) : \$70.11
- Crypto : ~\$1.76 (converted from BCH, BTC, BSV)
- Total : \$114.29
### Expenses
- invidious-load1 (nyc1) : \$10.00 (load balancer)
- invidious-update1 (s-1vcpu-1gb) : \$5.00 (updates feeds)
- invidious-node1 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node2 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node3 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node4 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node5 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-db1 (s-4vcpu-8gb) : \$40.00 (database)
- Total : \$80.00
This past month the site saw a couple abnormal peaks in traffic, so an additional webserver has been added to match the increased load. The goal on Patreon has been updated to match the above expenses.
Thanks everyone!
# 0.15.0 (2019-03-06)
## Version 0.15.0: Preferences and Channel Playlists
The project has seen quite a bit of activity this past month. Large focus has been on fixing bugs, but there's still quite a few new features I'm happy to announce. There have been [133 commits](https://github.com/omarroth/invidious/compare/0.14.0...0.15.0) from 15 contributors this past month.
As a couple miscellaneous changes, a couple [nice screenshots](https://github.com/omarroth/invidious#screenshots) have been added to the README, so folks can see more of what the site has to offer without creating an account.
The footer has also been cleaned up quite a bit, and now displays the current version, so it's easier to know what features are available from the current instance.
## For Administrators
This past month there has been a minor release - `0.14.1` - which fixes a breaking change made by YouTube for their polymer redesign.
There have been several new features that unfortunately require a database migration. There are migration scripts provided in `config/migrate-scripts`, and the [wiki](https://github.com/omarroth/invidious/wiki/Updating) has instructions for automatically applying them. I'll do my best to keep those changes to a minimum, and expect to see a corresponding script to automatically apply any new changes.
Administrator preferences have been added with [#312](https://github.com/omarroth/invidious/issues/312), which allows administrators to customize their instance. Administrators can change the order of feed menus, change the default homepage, disable open registration, and several other options. There's a short 'how-to' [here](https://github.com/omarroth/invidious/issues/312#issuecomment-468831842), and the new options are documented [here](https://github.com/omarroth/invidious/wiki/Configuration).
An `/api/v1/stats` endpoint has been added with [#356](https://github.com/omarroth/invidious/issues/356), which reports the instance version and number of active users. Statistics are disabled by default, and can be enabled in administator preferences. Statistics for the official instance are available [here](https://invidio.us/api/v1/stats?pretty=1).
## For Developers
`/api/v1/channels/:ucid` now provides an `autoGenerated` tag, which returns true for topic channels, and larger genre channels generated by YouTube. These channels don't have any videos of their own, so `latestVideos` will be empty. It is recommended instead to display a list of playlists generated by YouTube.
You can now pull a list of playlists from a channel with `/api/v1/channels/playlists/:ucid`. Supported options are documented in the [wiki](https://github.com/omarroth/invidious/wiki/API#get-apiv1channelsplaylistsucid-apiv1channelsucidplaylists). Pagination is handled with a `continuation` token, which is generated on each call. Of note is that auto-generated channels currently have one page of results, and subsequent calls will be empty.
For quickly pulling the latest 30 videos from a channel, there is now `/api/v1/channels/latest/:ucid`. It is much faster than a call to `/api/v1/channels/:ucid`. It will not convert an author name to a valid ucid automatically, and will not return any extra data about a channel.
## Preferences
In addition to administrator preferences mentioned above, you can now change your preferences without an account (see [#42](https://github.com/omarroth/invidious/pull/42)). I think this is quite an improvement to the usability of the site, and is much friendlier to privacy-conscious folks that don't want to make an account. Preferences will be automatically imported to a newly created account.
Several issues with sorting subscriptions have been fixed, and `/manage_subscriptions` has been sped up significantly. The subscription feed has also seen a bump in performance. Delayed notifications have unfortunately started becoming a problem now that there are more users on the site. Some new changes are currently being tested which should mostly resolve the issue, so expect to see more in the next release.
## Channel Playlists
You can now view available playlists from a channel, and [auto-generated channels](https://invidio.us/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ) are no longer empty. You can sort as you would on YouTube, and all the same functionality should be available. I'm quite pleased to finally have it implemented, since it's currently the only data available from the above mentioned auto-generated channels, and makes it much easier to consume music on the site.
There's also more discussion on improving Invidious for streaming music in [#304](https://github.com/omarroth/invidious/issues/304), and adding support for music.youtube.com. I would appreciate any thoughts on how to improve that experience, since it's a very large and useful part of YouTube.
## Finances
### Donations
- [Patreon](https://www.patreon.com/omarroth) : \$42.42
- [Liberapay](https://liberapay.com/omarroth) : \$30.97
- Crypto : ~\$0.00 (converted from BCH, BTC)
- Total : \$73.39
### Expenses
- invidious-load1 (nyc1) : \$10.00 (load balancer)
- invidious-update1 (s-1vcpu-1gb) : \$5.00 (updates feeds)
- invidious-node1 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node2 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node3 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node4 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-db1 (s-4vcpu-8gb) : \$40.00 (database)
- Total : \$75.00
It's been very humbling to see how fast the project has grown, and I look forward to making the site even better. Thank you everyone.
# 0.14.0 (2019-02-06)
## Version 0.14.0: Community
This last month several contributors have made improvements specifically for the people using this project. New pages have been added to the wiki, and there is now a [Matrix Server](https://riot.im/app/#/room/#invidious:matrix.org) and IRC channel so it's easier and faster for people to ask questions or chat. There have been [101 commits](https://github.com/omarroth/invidious/compare/0.13.0...0.14.0) since the last major release from 8 contributors.
It has come to my attention in the past month how many people are self-hosting, and I would like to make it easier for them to do so.
With that in mind, expect future releases to have a section for For Administrators (if any relevant changes) and For Developers (if any relevant changes).
## For Administrators
This month the most notable change for administrators is releases. As always, there will be a major release each month. However, a new minor release will be made whenever there are any critical bugs that need to be fixed.
This past month is the first time there has been a minor release - `0.13.1` - which fixes a breaking change made by YouTube. Administrators using versioning for their instances will be able to rely on the latest version, and should have a system in place to upgrade their instance as soon as a new release is available.
Several new pages have been added to the [wiki](https://github.com/omarroth/invidious/wiki#for-administrators) (as mentioned below) that will help administrators better setup their own instances. Configuration, maintenance, and instructions for updating are of note, as well as several common issues that are encountered when first setting up.
## For Developers
There's now a `pretty=1` parameter for most endpoints so you can view data easily from the browser, which is convenient for debugging and casual use. You can see an example [here](https://invidio.us/api/v1/videos/CvFH_6DNRCY?pretty=1).
Unfortunately the `/api/v1/insights/:id` endpoint is no longer functional, as YouTube removed all publicly available analytics around a month ago. The YouTube endpoint now returns a 404, so it's unlikely it will be functional again.
## Wiki
There have been a sizable number of changes to the Wiki, including a [list of public Invidious instances](https://github.com/omarroth/invidious/wiki/Invidious-Instances), the [list of extensions](https://github.com/omarroth/invidious/wiki/Extensions), and documentation for administrators (as mentioned above) and developers.
The wiki is editable by anyone so feel free to add anything you think is useful.
## Matrix & IRC
Thee is now a [Matrix Server](https://riot.im/app/#/room/#invidious:matrix.org) for Invidious, so please feel free to hop on if you have any questions or want to chat. There is also a registered IRC channel: #invidious on Freenode which is bridged to Matrix.
## Features
Several new features have been added, including a download button, creator hearts and comment colors, and a French translation.
There have been fixes for Google logins, missing text in locales, invalid links to genre channels, and better error handling in the player, among others.
Several fixes and features are omitted for space, so I'd recommend taking a look at the [compare tab](https://github.com/omarroth/invidious/compare/0.13.0...0.14.0) for more information.
## Annotations Update
Annotations were removed January 15th, 2019 around15:00 UTC. Before they were deleted we were able to archive annotations from around 1.4 billion videos. I'd very much recommend taking a look [here](https://www.reddit.com/r/DataHoarder/comments/al7exa/youtube_annotation_archive_update_and_preview/) for more information and a list of acknowledgements. I'm extremely thankful to everyone who was able to contribute and I'm glad we were able to save such a large part of internet history.
There's been large strides in supporting them in the player as well, which you can follow in [#303](https://github.com/omarroth/invidious/pull/303). You can preview the functionality at https://dev.invidio.us . Before they are added to the main site expect to see an option to disable them, both site-wide and per video.
Organizing this project has unfortunately taken up quite a bit of my time, and I've been very grateful for everyone's patience.
## Finances
### Donations
- [Patreon](https://www.patreon.com/omarroth) : \$49.42
- [Liberapay](https://liberapay.com/omarroth) : \$27.89
- Crypto : ~\$0.00 (converted from BCH, BTC)
- Total : \$77.31
### Expenses
- invidious-load1 (nyc1) : \$10.00 (load balancer)
- invidious-update1 (s-1vcpu-1gb) : \$5.00 (updates feeds)
- invidious-node1 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node2 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node3 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node4 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-db1 (s-4vcpu-8gb) : \$40.00 (database)
- Total : \$75.00
As always I'm grateful for everyone's contributions and support. I'll see you all in March.
# 0.13.1 (2019-01-19)
##
# 0.13.0 (2019-01-06)
## Version 0.13.0: Translations, Annotations, and Tor
I hope everyone had a happy New Year! There's been a couple new additions since last release, with [44 commits](https://github.com/omarroth/invidious/compare/0.12.0...0.13.0) from 9 contributors. It's been quite a year for the project, and I hope to continue improving the project into 2019! Starting off the new year:
## Translations
I'm happy to announce support for translations has been added with [`a160c64`](https://github.com/omarroth/invidious/a160c64). Currently, there is support for:
- Arabic (`ar`)
- Dutch (`nl`)
- English (`en-US`)
- German (`de`)
- Norwegian Bokmål (`nb_NO`)
- Polish (`pl`)
- Russian (`ru`)
Which you can change in your preferences under `Language`. You can also add `&hl=LANGUAGE` to the end of any request to translate it to your preferred language, for example https://invidio.us/?hl=ru. I'd like to say thank you again to everyone who has helped translate the site! I've mentioned this before, but I'm delighted that so many people find the project useful.
## Annotations
Recently, [YouTube announced that all annotations will be deleted on January 15th, 2019](https://support.google.com/youtube/answer/7342737). I believe that annotations have a very important place in YouTube's history, and [announced a project to archive them](https://www.reddit.com/r/DataHoarder/comments/aa6czg/youtube_annotation_archive/).
I expect annotations to be supported in the Invidious player once archiving is complete (see [#110](https://github.com/omarroth/invidious/issues/110) for details), and would also like to host them for other developers to use in their projects.
The code is available [here](https://github.com/omarroth/archive), and contains instructions for running a worker if you would like to contribute. There's much more information available in the announcement as well for anyone who is interested.
## Tor
I unfortunately missed the chance to mention this in the previous release, but I'm now happy to announce that you can now view Invidious through Tor at the following links:
kgg2m7yk5aybusll.onion
axqzx4s6s54s32yentfqojs3x5i7faxza6xo3ehd4bzzsg2ii4fv2iid.onion
Invidious is well suited to use through Tor, as it does not require any JS and is fairly lightweight. I'd recommend looking [here](https://diasp.org/posts/10965196) and [here](https://www.reddit.com/r/TOR/comments/a3c1ak/you_can_now_watch_youtube_videos_anonymously_with/) for more details on how to use the onion links, and would like to say thank you to [/u/whonix-os](https://www.reddit.com/user/whonix-os) for suggesting it and providing support setting setting them up.
## Popular and Trending
You can now easily view videos trending on YouTube with [`a16f967`](https://github.com/omarroth/invidious/a16f967). It also provides support for viewing YouTube's various categories categories, such as `News`, `Gaming`, and `Music`. You can also change the `region` parameter to view trending in different countries, which should be made easier to use in the coming weeks.
A link to `/feed/popular` has also been added, which provides a list of videos sorted using the algorithm described [here](https://github.com/omarroth/invidious/issues/217#issuecomment-436503761). I think it better reflects what users watch on the site, but I'd like to hear peoples' thoughts on this and on how it could be improved.
## Finances
### Donations
- [Patreon](https://www.patreon.com/omarroth): \$64.63
- [Liberapay](https://liberapay.com/omarroth) : \$30.05
- Crypto : ~\$28.74 (converted from BCH, BTC)
- Total : \$123.42
### Expenses
- invidious-load1 (nyc1) : \$10.00 (load balancer)
- invidious-update1 (s-1vcpu-1gb) : \$5.00 (updates feeds)
- invidious-node1 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node2 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node3 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node4 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-db1 (s-4vcpu-8gb) : \$40.00 (database)
- Total : \$75.00
### What will happen with what's left over?
I believe this is the first month that all expenses have been fully paid for by donations. Thank you! I expect to allocate the current amount for hardware to improve performance and for hosting annotation data, as mentioned above.
Anything that is left over is kept to continue hosting the project for as long as possible. Thank you again everyone!
I think that's everything for 2018. There's lots still planned, and I'm very excited for the future of this project!
# 0.12.0 (2018-12-06)
## Version 0.12.0: Accessibility, Privacy, Transparency
Hello again, it's been a while! A lot has happened since the last release. Invidious has seen [134 commits](https://github.com/omarroth/invidious/compare/0.11.0...0.12.0) from 3 contributors, and I'm quite happy with the progress that has been made. I enjoyed this past month, and I believe having a monthly release schedule allows me to focus on more long-term improvements, and I hope people enjoy these more substantial updates as well.
## Accessability and Privacy
There have been quite a few improvements for user privacy, and improvements that improve accessibility for both people and software.
You can now view comments without JS with [`19516ea`](https://github.com/omarroth/invidious/19516ea). Currently, this functionality is limited to the first 20 comments, but expect this functionality to be improved to come as close to the JS version as possible. Folks can track progress in [#204](https://github.com/omarroth/invidious/issues/204).
Invidious is now compatible with [LibreJS](https://www.gnu.org/software/librejs/), and provides license information [here](https://invidio.us/licenses) with [`7f868ec`](https://github.com/omarroth/invidious/7f868ec). As expected, all libraries are compatible under the AGPLv3, and I'm happy to mention that no other changes were required to make Invidious compatible with LibreJS.
A DNT policy has also been added with [`9194f47`](https://github.com/omarroth/invidious/9194f47) for compatibility with [Privacy Badger](https://www.eff.org/privacybadger). I'm pleased to mention that here too no other changes had to be made in order for Invidious to be compatible with this extension. I expect a privacy policy to be added soon as well, so users can better understand how Invidious uses their data.
For users that are visually impaired, there is now a text CAPTCHA available so it's easier to register and login. Because of the simple front-end of the project, I expect screen readers and other software to be able to easily understand the site's interface. In combination with the ability to listen-only, I believe Invidious is much more accessible than YouTube. Folks can read [#244](https://github.com/omarroth/invidious/issues/244) for more details, and I would very much appreciate any feedback on how this can be improved.
## User Preferences
There have been a lot of improvements to preferences. Options for enabling audio-only by default and continuous playback (autoplay) have been added with [`e39dec9`](https://github.com/omarroth/invidious/e39dec9), with [`4b76b93`](https://github.com/omarroth/invidious/4b76b93), respectively. Users can also now mark videos as watched from their subscription feed and view watch history by going to https://invidio.us/feed/history. I expect to add more information to history so that it's easier to use. Folks can track progress with [#182](https://github.com/omarroth/invidious/issues/182). As with all data Invidious keeps, watch history can be exported [here](https://invidio.us/data_control).
Users can now delete their account with [`b9c29bf`](https://github.com/omarroth/invidious/b9c29bf). This will remove _all_ user data from Invidious, including session IDs, watch history, and subscriptions. As mentioned above, it's easy to export that data and import it to a local instance, or export subscriptions for use with other applications such as [FreeTube](https://github.com/FreeTubeApp/FreeTube) or [NewPipe](https://github.com/TeamNewPipe/NewPipe).
## Translation and Internationalis(z)ation
Invidious has been approved for hosting by Weblate, available [here](https://hosted.weblate.org/projects/invidious/translations/). At the time of writing, translations for Arabic, Dutch, German, Polish, and Russian are currently underway. I would like to say a very big thank you to everyone working on them, and I hope to fully support them within around 2 weeks. Folks can track progress with [#251](https://github.com/omarroth/invidious/issues/251).
## Transperency and Finances
For the sake of transparency, I plan on publishing each month's finances. This is currently already done on Liberapay and Patreon, but there is not a total amount currently provided anywhere, and I would also like to include expenses to provide a better explanation of how patrons' money is being spent.
### Donations
- [Patreon](https://www.patreon.com/omarroth): \$43.60 (Patreon takes roughly 9%)
- [Liberapay](https://liberapay.com/omarroth) : \$22.10
- Crypto : ~\$1.25 (converted from BCH, BTC)
- Total : \$66.95
### Expenses
- invidious-load1 (nyc1) : \$10.00 (load balancer)
- invidious-update1 (s-1vcpu-1gb) : \$5.00 (updates feeds)
- invidious-node1 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node2 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node3 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-node4 (s-1vcpu-1gb) : \$5.00 (web server)
- invidious-db1 (s-4vcpu-8gb) : \$40.00 (database)
- Total : \$75.00
I'd be happy to provide any explanation where needed. I would also like to thank everyone who donates, it really helps and I can't say how happy I am to see that so many people find it valuable.
That's all for this month. I wish everyone the best for the holidays, and I'll see you all again in January!
# 0.11.0 (2018-10-23)
## Week 11: FreeTube and Styling
This past Friday I'm been very excited to see that FreeTube version [0.4.0](https://github.com/FreeTubeApp/FreeTube/tree/0.4.0) has been released! I'd recommend taking a look at the official patch notes, but to spoil a little bit here: FreeTube now uses the Invidious API for _all_ requests previously sent to YouTube, and has also seen support for playlists, keyboard shortcuts, and more default settings (speed, autoplay, and subtitles). I'm happy to see that FreeTube has reached 500 stars on Github, and I think it's very much deserved. I'd recommend keeping an eye on the newly-launched [FreeTube blog](https://freetube.writeas.com/) for updates on the project.
Quite a few styling changes have been added this past week, including channel subscriber count to the subscribe and unsubscribe buttons. The changes sound small, but they've been a very big improvement and I'm quite satisfied with how they look. Also to note is that partial support for duration in thumbnails have been added with [#202](https://github.com/omarroth/invidious/issues/202). Overall, I think the site is becoming much more pleasing visually, and I hope to continue to improve it.
I've been very pleased to see Invidious in its current state, and I believe it's many times more mature compared to even a month ago. Changes have also started slowing down a bit as it's become more mature, and therefore I'd like to transition to a monthly update schedule in order to provide more comprehensive updates for everyone. I want to thank you all for helping me reach this point. I can't say how happy I am for Invidious to be where it is now.
Enjoy the rest of your week everyone, I'll see you in November!
# 0.10.0 (2018-10-16)
## Week 10: Subscriptions
This week I'm happy to announce that subscriptions have been drastically sped up with
35e63fa. As I mentioned last week, this essentially "caches" a user's feed, meaning that operations that previously took 20 seconds or timed out, now can load in under a second. I'd take a look at [#173](https://github.com/omarroth/invidious/issues/173) for a sample benchmark. Previously features that made Invidious's feed so useful, such as filtering by unseen and by author would take too long to load, and so instead would timeout. I'm very happy that this has been fixed, and folks can get back to using these features.
Among some smaller features that have been added this week include [#118](https://github.com/omarroth/invidious/issues/118), which adds, in my opinion, some very attractive subscribe and unsubscribe buttons. I think it's also a bit of a functional improvement as well, since it doesn't require a user to reload the page in order to subscribe or unsubscribe to a channel, and also gives the opportunity to put the channel's sub count on display.
An option to swap between Reddit and YouTube comments without a page reload has been added with
5eefab6, bringing it somewhat closer in functionality to the popular [AlienTube](https://github.com/xlexi/alientube) extension, on which it is based (although the extension unfortunately appears now to be fragmented).
As always, there are a couple smaller improvements this week, including some minor fixes for geo-bypass with
e46e618 and [`245d0b5`](https://github.com/omarroth/invidious/245d0b5), playlist preferences with [`81b4477`](https://github.com/omarroth/invidious/81b4477), and YouTube comments with [`02335f3`](https://github.com/omarroth/invidious/02335f3).
This coming week I'd also recommend keeping an eye on the excellent [FreeTube](https://github.com/FreeTubeApp/FreeTube), which is looking forward to a new release. I've been very lucky to work with [**@PrestonN**](https://github.com/PrestonN) for the past few weeks to improve the Invidious API, and I'm quite looking forward to the new release.
That's all for this week folks, thank you all again for your continued interest and support.
# 0.9.0 (2018-10-08)
## Week 9: Playlists
Not as much to announce this week, but I'm still quite happy to announce a couple things, namely:
Playback support for playlists has finally been added with [`88430a6`](https://github.com/omarroth/invidious/88430a6). You can now view playlists with the `&list=` query param, as you would on YouTube. You can also view mixes with the mentioned `&list=`, although they require some extra handling that I would like to add in the coming week, as well as adding playlist looping and shuffle. I think playback support has been a roadblock for more exciting features such as [#114](https://github.com/omarroth/invidious/issues/114), and I look forward to improving the experience.
Comments have had a bit of a cosmetic upgrade with [#132](https://github.com/omarroth/invidious/issues/132), which I think helps better distinguish between Reddit and YouTube comments, as it makes them appear similarly to their respective sites. You can also now switch between YouTube and Reddit comments with a push of a button, which I think is quite an improvement, especially for newer or less popular videos with fewer comments.
I've had a small breakthrough in speeding up users' subscription feeds with PostgreSQL's [materialized views](https://www.postgresql.org/docs/current/static/rules-materializedviews.html). Without going into too much detail, materialized views essentially cache the result of a query, making it possible to run resource-intensive queries once, rather than every time a user visits their feed. In the coming week I hope to push this out to users, and hopefully close [#173](https://github.com/omarroth/invidious/issues/173).
I haven't had as much time to work on the project this week, but I'm quite happy to have added some new features. Have a great week everyone.
# 0.8.0 (2018-10-02)
## Week 8: Mixes
Hello again!
Mixes have been added with [`20130db`](https://github.com/omarroth/invidious/20130db), which makes it easy to create a playlist of related content. See [#188](https://github.com/omarroth/invidious/issues/188) for more info on how they work. Currently, they return the first 50 videos rather than a continuous feed to avoid tracking by Google/YouTube, which I think is a good trade-off between usability and privacy, and I hope other folks agree. You can create mixes by adding `RD` to the beginning of a video ID, an example is provided [here](https://www.invidio.us/mix?list=RDYE7VzlLtp-4) based on Big Buck Bunny. I've been quite happy with the results returned for the mixes I've tried, and it is not limited to music, which I think is a big plus. To emulate a continuous feed provided many are used to, using the last video of each mix as a new 'seed' has worked well for me. In the coming week I'd like to to add playback support in the player to listen to these easily.
A very big thanks to [**@flourgaz**](https://github.com/flourgaz) for Docker support with [#186](https://github.com/omarroth/invidious/pull/186). This is an enormous improvement in portability for the project, and opens the door for Heroku support (see [#162](https://github.com/omarroth/invidious/issues/162)), and seamless support on Windows. For most users, it should be as easy as running `docker-compose up`.
I've spent quite a bit of time this past week improving support for geo-bypass (see [#92](https://github.com/omarroth/invidious/issues/92)), and am happy to note that Invidious has been able to proxy ~50% of the geo-restricted videos I've tried. In addition, you can now watch geo-restricted videos if you have `dash` enabled as your `preferred quality`, for more details see [#34](https://github.com/omarroth/invidious/issues/34) and [#185](https://github.com/omarroth/invidious/issues/185), or last week's update. For folks interested in replicating these results for themselves, I'd take a look [here](https://gist.github.com/omarroth/3ce0f276c43e0c4b13e7d9cd35524688) for the script used, and [here](https://gist.github.com/omarroth/beffc4a76a7b82a422e1b36a571878ef) for a list of videos restricted in the US.
1080p has seen a fairly smooth roll-out, although there have been a couple issues reported, mainly [#193](https://github.com/omarroth/invidious/issues/193), which is likely an issue in the player. I've also encountered a couple other issues myself that I would like to investigate. Although none are major, I'd like to keep 1080p opt-in for registered users another week to better address these issues.
Have an excellent week everyone.
# 0.7.0 (2018-09-25)
## Week 7: 1080p and Search Types
Hello again everyone! I've got quite a couple announcements this week:
Experimental 1080p support has been added with [`b3ca392`](https://github.com/omarroth/invidious/b3ca392), and can be enabled by going to preferences and changing `preferred video quality` to `dash`. You can find more details [here](https://github.com/omarroth/invidious/issues/34#issuecomment-424171888). Currently quality and speed controls have not yet been integrated into the player, but I'd still appreciate feedback, mainly on any issues with buffering or DASH playback. I hope to integrate 1080p support into the player and push support site-wide in the coming weeks.
You can now filter content types in search with the `type:TYPE` filter. Supported content types are `playlist`, `channel`, and `video`. More info is available [here](https://github.com/omarroth/invidious/issues/126#issuecomment-423823148). I think this is quite an improvement in usability and I hope others find the same.
A [CHANGELOG](https://github.com/omarroth/invidious/blob/master/CHANGELOG.md) has been added to the repository, so folks will now receive a copy of all these updates when cloning. I think this is an improvement in hosting the project, as it is no longer tied to the `/releases` tab on Github or the posts on Patreon.
Recently, users have been reporting 504s when attempting to access their subscriptions, which is tracked in [#173](https://github.com/omarroth/invidious/issues/173). This is most likely caused by an uptick in usage, which I am absolutely grateful for, but unfortunately has resulted in an increase in costs for hosting the site, which is why I will be bumping my goal on Patreon from $60 to $80. I would appreciate any feedback on how subscriptions could be improved.
Other minor improvements include:
- Additional regions added to bypass geo-block with [`9a78523`](https://github.com/omarroth/invidious/9a78523)
- Fix for playlists containing less than 100 videos (previously shown as empty) with [`35ac887`](https://github.com/omarroth/invidious/35ac887)
- Fix for `published` date for Reddit comments (previously showing negative seconds) with [`6e09202`](https://github.com/omarroth/invidious/6e09202)
Thank you everyone for your support!
# 0.6.0 (2018-09-18)
## Week 6: Filters and Thumbnails
Hello again! This week I'm happy to mention a couple new features to search as well as some miscellaneous usability improvements.
You can now constrain your search query to a specific channel with the `channel:CHANNEL` filter (see [#165](https://github.com/omarroth/invidious/issues/165) for more details). Unfortunately, other search filters combined with channel search are not yet supported. I hope to add support for them in the coming weeks.
You can also now search only your subscriptions by adding `subscriptions:true` to your query (see [#30](https://github.com/omarroth/invidious/issues/30) for more details). It's not quite ready for widespread use but I would appreciate feedback as the site updates to fully support it. Other search filters are not yet supported with `subscriptions:true`, but I hope to add more functionality to this as well.
With [#153](https://github.com/omarroth/invidious/issues/153) and [#168](https://github.com/omarroth/invidious/issues/168) all images on the site are now proxied through Invidious. In addition to offering the user more protection from Google's eyes, it also allows the site to automatically pick out the highest resolution thumbnail for videos. I think this is quite a large aesthetic improvement and I hope others will find the same.
As a smaller improvement to the site, you can also now view RSS feeds for playlists with [#113](https://github.com/omarroth/invidious/issues/113).
These updates are also now listed under Github's [releases](https://github.com/omarroth/invidious/releases). I'm also planning on adding them as a `CHANGELOG.md` in the repository itself so people can receive a copy with the project's source.
That's all for this week. Thank you everyone for your support!
# 0.5.0 (2018-09-11)
## Week 5: Privacy and Security
I hope everyone had a good weekend! This past week I've been fixing some issues that have been brought to my attention to help better protect users and help them keep their anonymity.
An issue with open referers has been fixed with [`29a2186`](https://github.com/omarroth/invidious/29a2186), which prevents potential redirects to external sites on actions such as login or modifying preferences.
Additionally, X-XSS-Protection, X-Content-Type-Options, and X-Frame-Options headers have been added with [`96234e5`](https://github.com/omarroth/invidious/96234e5), which should keep users safer while using the site.
A potential XSS vector has also been fixed in YouTube comments with [`8c45694`](https://github.com/omarroth/invidious/8c45694).
All the above vulnerabilities were brought to my attention by someone who wishes to remain anonymous, but I would like to say again here how thankful I am. If anyone else would like to get in touch please feel free to email me at omarroth@hotmail.com or omarroth@protonmail.com.
This week a couple changes have been made to better protect user's privacy as well.
All CSS and JS assets are now served locally with [`3ec684a`](https://github.com/omarroth/invidious/3ec684a), which means users no longer need to whitelist unpkg.com. Although I personally have encountered few issues, I understand that many folks would like to keep their browsing activity contained to as few parties as possible. In the coming week I also hope to proxy YouTube images, so that no user data is sent to Google.
YouTube links in comments now should redirect properly to the Invidious alternate with [`1c8bd67`](https://github.com/omarroth/invidious/1c8bd67) and [`cf63c82`](https://github.com/omarroth/invidious/cf63c82), so users can more easily evade Google tracking.
I'm also happy to mention a couple quality of life features this week:
Invidious now shows a video's "license" if provided, see [#159](https://github.com/omarroth/invidious/issues/159) for more details. You can also search for videos licensed under the creative commons with "QUERY features:creative_commons".
Videos with only one source will always display the cog for changing quality, so that users can see what quality is currently playing. See [#158](https://github.com/omarroth/invidious/issues/158) for more details.
Folks have also probably noticed that the gutters on either side of the screen have been shrunk down quite significantly, so that more of the screen is filled with content. Hopefully this can be improved even more in the coming weeks.
"Music", "Sports", and "Popular on YouTube" channels now properly display their videos. You can subscribe to these channels just as you would normally.
This coming week I'm planning on spending time with my family, so I unfortunately may not be as responsive. I do still hope to add some smaller features for next week however, and I hope to continue development soon.
Thank you everyone again for your support.
# 0.4.0 (2018-09-06)
## Week 4: Genre Channels
Hello! I hope everyone enjoyed their weekend. Without further ado:
Just today genre channels have been added with [#119](https://github.com/omarroth/invidious/issues/119). More information on genre channels is available [here](https://support.google.com/youtube/answer/2579942). You can subscribe to them as normally, and view them as RSS. I think they offer an interesting alternative way to find new content and I hope people find them useful.
This past week folks have started reporting 504s on their subscription page (see [#144](https://github.com/omarroth/invidious/issues/144) for more details). Upgrading the database server appeared to fix the issue, as well as providing a smoother experience across the site. Unfortunately, that means I will be increasing the goal from $50 to $60 in order to meet the increased hosting costs.
With [#134](https://github.com/omarroth/invidious/issues/134), comments are now formatted correctly, providing support for bold, italics, and links in comments. I think this improvement makes them much easier to read, and I hope others find the same. Also to note is that links in both comments and the video description now no longer contain any of Google's tracking with [#115](https://github.com/omarroth/invidious/issues/115).
One of the major use cases for Invidious is as a stripped-down version of YouTube. In line with that, I'm happy to announce that you can now hide related videos if you're logged in, for users that prefer an even more lightweight experience.
Finally, I'm pleased to announce that Invidious has hit 100 stars on GitHub. I am very happy that Invidious has proven to be useful to so many people, and I can't say how grateful I am to everyone for their continued support.
Enjoy the rest of your week everyone!
# 0.3.0 (2018-09-06)
## Week 3: Quality of Life
Hello everyone! This week I've been working on some smaller features that will hopefully make the site more functional.
Search filters have been added with [#126](https://github.com/omarroth/invidious/issues/126). You can now specify 'sort', 'date', 'duration', and 'features' within your query using the 'operator:value' syntax. I'd recommend taking a look [here](https://github.com/omarroth/invidious/blob/master/src/invidious/search.cr#L33-L114) for a list of supported options and at [#126](https://github.com/omarroth/invidious/issues/126) for some examples. This also opens the door for features such as [#30](https://github.com/omarroth/invidious/issues/30) which can be implemented as filters. I think advanced search is a major point in which Invidious can improve on YouTube and hope to add more features soon!
This week a more advanced system for viewing fallback comments has been added (see [#84](https://github.com/omarroth/invidious/issues/84) for more details). You can now specify a comment fallback in your preferences, which Invidious will use. If, for example, no Reddit comments are available for a given video, it can choose to fallback on YouTube comments. This also makes it possible to turn comments off completely for users that prefer a more streamlined experience.
With [#98](https://github.com/omarroth/invidious/issues/98), it is now possible for users to specify preferences without creating an account. You can now change speed, volume, subtitles, autoplay, loop, and quality using query parameters. See the issue above for more details and several examples.
I'd also like to announce that I've set up an account on [Liberapay](https://liberapay.com/omarroth), for patrons that prefer a privacy-friendly alternative to Patreon. Liberapay also does not take any percentage of donations, so I'd recommend donating some to the Liberapay for their hard work. Go check it out!
[Two weeks ago](https://github.com/omarroth/invidious/releases/tag/0.1.0) I mentioned adding 1080p support into the player. Currently, the only thing blocking is [#207](https://github.com/videojs/http-streaming/pull/207) in the excellent [http-streaming](https://github.com/videojs/http-streaming) library. I hope to work with the videojs team to merge it soon and finally implement 1080p support!
That's all for this week, thank you again everyone for your support!
# 0.2.0 (2018-09-06)
## Week 2: Toward Playlists
Sorry for the late update! Not as much to announce this week, but still a couple things of note:
I'm happy to announce that a playlists page and API endpoint has been added so you can now view playlists. Currently, you cannot watch playlists through the player, but I hope to add that in the coming week as well as adding functionality to add and modify playlists. There is a good conversation on [#114](https://github.com/omarroth/invidious/issues/114) about giving playlists even more functionality, which I think is interesting and would appreciate feedback on.
As an update to the Invidious API announcement last week, I've been working with [**@PrestonN**](https://github.com/PrestonN), the developer of [FreeTube](https://github.com/FreeTubeApp/FreeTube), to help migrate his project to the Invidious API. Because of it's increasing popularity, he has had trouble keeping under the quota set by YouTube's API. I hope to improve the API to meet his and others needs and I'd recommend folks to keep an eye on his excellent project! There is a good discussion with his thoughts [here](https://github.com/FreeTubeApp/FreeTube/issues/100).
A couple of miscellaneous features and bugfixes:
- You can now login to Invidious simultaneously from multiple devices - [#109](https://github.com/omarroth/invidious/issues/109)
- Added a note for scheduled livestreams - [#124](https://github.com/omarroth/invidious/issues/124)
- Changed YouTube comment header to "View x comments" - [#120](https://github.com/omarroth/invidious/issues/120)
Enjoy your week everyone!
# 0.1.0 (2018-09-06)
## Week 1: Invidious API and Geo-Bypass
Hello everyone! This past week there have been quite a few things worthy of mention:
I'm happy to announce the [Invidious Developer API](https://github.com/omarroth/invidious/wiki/API). The Invidious API does not use any of the official YouTube APIs, and instead crawls the site to provide a JSON interface for other developers to use. It's still under development but is already powering [CloudTube](https://github.com/cloudrac3r/cadencegq). The API currently does not have a quota (compared to YouTube) which I hope to continue thanks to continued support from my Patrons. Hopefully other developers find it useful, and I hope to continue to improve it so it can better serve the community.
Just today partial support for bypassing geo-restrictions has been added with [fada57a](https://github.com/omarroth/invidious/commit/fada57a307d66d696d9286fc943c579a3fd22de6). If a video is unblocked in one of: United States, Canada, Germany, France, Japan, Russia, or United Kingdom, then Invidious will be able to serve video info. Currently you will not yet be able to access the video files themselves, but in the coming week I hope to proxy videos so that users can enjoy content across borders.
Support for generating DASH manifests has been fixed, in the coming week I hope to integrate this functionality into the watch page, so users can view videos in 1080p and above.
Thank you everyone for your continued interest and support!

119
Makefile Normal file
View File

@ -0,0 +1,119 @@
# -----------------------
# Compilation options
# -----------------------
RELEASE := 1
STATIC := 0
NO_DBG_SYMBOLS := 0
FLAGS ?=
ifeq ($(RELEASE), 1)
FLAGS += --release
endif
ifeq ($(STATIC), 1)
FLAGS += --static
endif
ifeq ($(NO_DBG_SYMBOLS), 1)
FLAGS += --no-debug
else
FLAGS += --debug
endif
ifeq ($(API_ONLY), 1)
FLAGS += -Dapi_only
endif
# -----------------------
# Main
# -----------------------
all: invidious
get-libs:
shards install --production
# TODO: add support for ARM64 via cross-compilation
invidious: get-libs
crystal build src/invidious.cr $(FLAGS) --progress --stats --error-trace
run: invidious
./invidious
# -----------------------
# Development
# -----------------------
format:
crystal tool format
test:
crystal spec
verify:
crystal build src/invidious.cr -Dskip_videojs_download \
--no-codegen --progress --stats --error-trace
# -----------------------
# (Un)Install
# -----------------------
# TODO
# -----------------------
# Cleaning
# -----------------------
clean:
rm invidious
distclean: clean
rm -rf libs
rm -rf ~/.cache/{crystal,shards}
# -----------------------
# Help page
# -----------------------
help:
@echo "Targets available in this Makefile:"
@echo ""
@echo " get-libs Fetch Crystal libraries"
@echo " invidious Build Invidious"
@echo " run Launch Invidious"
@echo ""
@echo " format Run the Crystal formatter"
@echo " test Run tests"
@echo " verify Just make sure that the code compiles, but without"
@echo " generating any binaries. Useful to search for errors"
@echo ""
@echo " clean Remove build artifacts"
@echo " distclean Remove build artifacts and libraries"
@echo ""
@echo ""
@echo "Build options available for this Makefile:"
@echo ""
@echo " RELEASE Make a release build (Default: 1)"
@echo " STATIC Link libraries statically (Default: 0)"
@echo ""
@echo " API_ONLY Build invidious without a GUI (Default: 0)"
@echo " NO_DBG_SYMBOLS Strip debug symbols (Default: 0)"
# No targets generates an output named after themselves
.PHONY: all get-libs build amd64 run
.PHONY: format test verify clean distclean help

199
README.md
View File

@ -1,85 +1,170 @@
# Invidious
<div align="center">
<img src="assets/invidious-colored-vector.svg" width="192" height="192" alt="Invidious logo">
<h1>Invidious</h1>
## Invidious is what YouTube should be
<a href="https://www.gnu.org/licenses/agpl-3.0.en.html">
<img alt="License: AGPLv3" src="https://shields.io/badge/License-AGPL%20v3-blue.svg">
</a>
<a href="https://github.com/iv-org/invidious/actions">
<img alt="Build Status" src="https://github.com/iv-org/invidious/workflows/Invidious%20CI/badge.svg">
</a>
<a href="https://github.com/iv-org/invidious/commits/master">
<img alt="GitHub commits" src="https://img.shields.io/github/commit-activity/y/iv-org/invidious?color=red&label=commits">
</a>
<a href="https://github.com/iv-org/invidious/issues">
<img alt="GitHub issues" src="https://img.shields.io/github/issues/iv-org/invidious?color=important">
</a>
<a href="https://github.com/iv-org/invidious/pulls">
<img alt="GitHub pull requests" src="https://img.shields.io/github/issues-pr/iv-org/invidious?color=blueviolet">
</a>
<a href="https://hosted.weblate.org/engage/invidious/">
<img alt="Translation Status" src="https://hosted.weblate.org/widgets/invidious/-/translations/svg-badge.svg">
</a>
Liberapay: https://liberapay.com/omarroth
Patreon: https://patreon.com/omarroth
BTC: 356DpZyMXu6rYd55Yqzjs29n79kGKWcYrY
BCH: qq4ptclkzej5eza6a50et5ggc58hxsq5aylqut2npk
<a href="https://github.com/humanetech-community/awesome-humane-tech">
<img alt="Awesome Humane Tech" src="https://raw.githubusercontent.com/humanetech-community/awesome-humane-tech/main/humane-tech-badge.svg?sanitize=true">
</a>
## Installation
<h3>An open source alternative front-end to YouTube</h3>
### Installing [Crystal](https://github.com/crystal-lang/crystal):
<a href="https://invidious.io/">Website</a>
&nbsp;&nbsp;
<a href="https://instances.invidious.io/">Instances list</a>
&nbsp;&nbsp;
<a href="https://docs.invidious.io/faq/">FAQ</a>
&nbsp;&nbsp;
<a href="https://docs.invidious.io/">Documentation</a>
&nbsp;&nbsp;
<a href="#contribute">Contribute</a>
&nbsp;&nbsp;
<a href="https://invidious.io/donate/">Donate</a>
#### On Arch:
<h5>Chat with us:</h5>
<a href="https://matrix.to/#/#invidious:matrix.org">
<img alt="Matrix" src="https://img.shields.io/matrix/invidious:matrix.org?label=Matrix&color=darkgreen">
</a>
<a href="https://web.libera.chat/?channel=#invidious">
<img alt="Libera.chat (IRC)" src="https://img.shields.io/badge/IRC%20%28Libera.chat%29-%23invidious-darkgreen">
</a>
<br>
<a rel="me" href="https://social.tchncs.de/@invidious">
<img alt="Fediverse: @invidious@social.tchncs.de" src="https://img.shields.io/badge/Fediverse-%40invidious%40social.tchncs.de-darkgreen">
</a>
<br>
<a href="https://invidious.io/contact/">
<img alt="E-mail" src="https://img.shields.io/badge/E%2d%2dmail-darkgreen">
</a>
</div>
```bash
$ sudo pacman -S shards crystal
$ shards
```
#### On OSX:
## Screenshots
```bash
$ brew update
$ brew install shards crystal-lang
$ shards
```
| Player | Preferences | Subscriptions |
|-------------------------------------|-------------------------------------|---------------------------------------|
| ![](screenshots/01_player.png) | ![](screenshots/02_preferences.png) | ![](screenshots/03_subscriptions.png) |
| ![](screenshots/04_description.png) | ![](screenshots/05_preferences.png) | ![](screenshots/06_subscriptions.png) |
### Installing Postgres:
#### On Arch:
## Features
Install according to the [wiki](https://wiki.archlinux.org/index.php/PostgreSQL#Installing_PostgreSQL)
**User features**
- Lightweight
- No ads
- No tracking
- No JavaScript required
- Light/Dark themes
- Customizable homepage
- Subscriptions independent from Google
- Notifications for all subscribed channels
- Audio-only mode (with background play on mobile)
- Support for Reddit comments
- [Available in many languages](locales/), thanks to [our translators](#contribute)
#### On OSX:
**Data import/export**
- Import subscriptions from YouTube, NewPipe and Freetube
- Import watch history from YouTube and NewPipe
- Export subscriptions to NewPipe and Freetube
- Import/Export Invidious user data
```bash
$ brew install postgres
```
**Technical features**
- Embedded video support
- [Developer API](https://docs.invidious.io/api/)
- Does not use official YouTube APIs
- No Contributor License Agreement (CLA)
### Setup Postgres:
```bash
$ ./setup.sh
```
## Quick start
### Installing ImageMagick (required for CAPTCHA):
**Using invidious:**
#### On Arch:
- [Select a public instance from the list](https://instances.invidious.io) and start watching videos right now!
```bash
$ sudo pacman -S imagemagick librsvg
```
**Hosting invidious:**
## Usage:
- [Follow the installation instructions](https://docs.invidious.io/installation/)
```bash
$ crystal build src/invidious.cr
$ ./invidious
```
Or for development:
## Documentation
```bash
$ curl -fsSLo- https://raw.githubusercontent.com/samueleaton/sentry/master/install.cr | crystal eval
$ ./sentry
```
The full documentation can be accessed online at https://docs.invidious.io/
## Extensions
The documentation's source code is available in this repository:
https://github.com/iv-org/documentation
- [Alternate Tube Redirector](https://addons.mozilla.org/en-US/firefox/addon/alternate-tube-redirector/): Automatically open Youtube Videos on alternate sites like Invidious or Hooktube.
- [Invidious Redirect](https://greasyfork.org/en/scripts/370461-invidious-redirect): Redirects Youtube URLs to Invidio.us (userscript)
- [Invidio.us embed](https://greasyfork.org/en/scripts/370442-invidious-embed): Replaces YouTube embeds with Invidio.us embeds (userscript)
### Extensions
## Contributing
We highly recommend the use of [Privacy Redirect](https://github.com/SimonBrazell/privacy-redirect#get),
a browser extension that automatically redirects Youtube URLs to any Invidious instance and replaces
embedded youtube videos on other websites with invidious.
1. Fork it ( https://github.com/omarroth/invidious/fork )
2. Create your feature branch (git checkout -b my-new-feature)
3. Commit your changes (git commit -am 'Add some feature')
4. Push to the branch (git push origin my-new-feature)
5. Create a new Pull Request
The documentation contains a list of browser extensions that we recommended to use along with Invidious.
## Contributors
You can read more here: https://docs.invidious.io/applications/
- [omarroth](https://github.com/omarroth) - creator, maintainer
## Contribute
### Code
1. Fork it ( https://github.com/iv-org/invidious/fork ).
1. Create your feature branch (`git checkout -b my-new-feature`).
1. Stage your files (`git add .`).
1. Commit your changes (`git commit -am 'Add some feature'`).
1. Push to the branch (`git push origin my-new-feature`).
1. Create a new pull request ( https://github.com/iv-org/invidious/compare ).
### Translations
We use [Weblate](https://weblate.org) to manage Invidious translations.
You can suggest new translations and/or correction here: https://hosted.weblate.org/engage/invidious/.
Creating an account is not required, but recommended, especially if you want to contribute regularly.
Weblate also allows you to log-in with major SSO providers like Github, Gitlab, BitBucket, Google, ...
## Projects using Invidious
A list of projects and extensions for or utilizing Invidious can be found in the documentation: https://docs.invidious.io/applications/
## Liability
We take no responsibility for the use of our tool, or external instances
provided by third parties. We strongly recommend you abide by the valid
official regulations in your country. Furthermore, we refuse liability
for any inappropriate use of Invidious, such as illegal downloading.
This tool is provided to you in the spirit of free, open software.
You may view the LICENSE in which this software is provided to you [here](./LICENSE).
> 16. Limitation of Liability.
>
> IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

1
TRANSLATION Normal file
View File

@ -0,0 +1 @@
https://hosted.weblate.org/projects/invidious/

View File

@ -0,0 +1,218 @@
Do Not Track Compliance Policy
Version 1.0
This domain complies with user opt-outs from tracking via the "Do Not Track"
or "DNT" header [http://www.w3.org/TR/tracking-dnt/]. This file will always
be posted via HTTPS at https://example-domain.com/.well-known/dnt-policy.txt
to indicate this fact.
SCOPE
This policy document allows an operator of a Fully Qualified Domain Name
("domain") to declare that it respects Do Not Track as a meaningful privacy
opt-out of tracking, so that privacy-protecting software can better determine
whether to block or anonymize communications with this domain. This policy is
intended first and foremost to be posted on domains that publish ads, widgets,
images, scripts and other third-party embedded hypertext (for instance on
widgets.example.com), but it can be posted on any domain, including those users
visit directly (such as www.example.com). The policy may be applied to some
domains used by a company, site, or service, and not to others. Do Not Track
may be sent by any client that uses the HTTP protocol, including websites,
mobile apps, and smart devices like TVs. Do Not Track also works with all
protocols able to read HTTP headers, including SPDY.
NOTE: This policy contains both Requirements and Exceptions. Where possible
terms are defined in the text, but a few additional definitions are included
at the end.
REQUIREMENTS
When this domain receives Web requests from a user who enables DNT by actively
choosing an opt-out setting in their browser or by installing software that is
primarily designed to protect privacy ("DNT User"), we will take the following
measures with respect to those users' data, subject to the Exceptions, also
listed below:
1. END USER IDENTIFIERS:
a. If a DNT User has logged in to our service, all user identifiers, such as
unique or nearly unique cookies, "supercookies" and fingerprints are
discarded as soon as the HTTP(S) response is issued.
Data structures which associate user identifiers with accounts may be
employed to recognize logged in users per Exception 4 below, but may not
be associated with records of the user's activities unless otherwise
excepted.
b. If a DNT User is not logged in to our service, we will take steps to ensure
that no user identifiers are transmitted to us at all.
2. LOG RETENTION:
a. Logs with DNT Users' identifiers removed (but including IP addresses and
User Agent strings) may be retained for a period of 10 days or less,
unless an Exception (below) applies. This period of time balances privacy
concerns with the need to ensure that log processing systems have time to
operate; that operations engineers have time to monitor and fix technical
and performance problems; and that security and data aggregation systems
have time to operate.
b. These logs will not be used for any other purposes.
3. OTHER DOMAINS:
a. If this domain transfers identifiable user data about DNT Users to
contractors, affiliates or other parties, or embeds from or posts data to
other domains, we will either:
b. ensure that the operators of those domains abide by this policy overall
by posting it at /.well-known/dnt-policy.txt via HTTPS on the domains in
question,
OR
ensure that the recipient's policies and practices require the recipient
to respect the policy for our DNT Users' data.
OR
obtain a contractual commitment from the recipient to respect this policy
for our DNT Users' data.
NOTE: if an “Other Domain” does not receive identifiable user information
from the domain because such information has been removed, because the
Other Domain does not log that information, or for some other reason, these
requirements do not apply.
c. "Identifiable" means any records which are not Anonymized or otherwise
covered by the Exceptions below.
4. PERIODIC REASSERTION OF COMPLIANCE:
At least once every 12 months, we will take reasonable steps commensurate
with the size of our organization and the nature of our service to confirm
our ongoing compliance with this document, and we will publicly reassert our
compliance.
5. USER NOTIFICATION:
a. If we are required by law to retain or disclose user identifiers, we will
attempt to provide the users with notice (unless we are prohibited or it
would be futile) that a request for their information has been made in
order to give the users an opportunity to object to the retention or
disclosure.
b. We will attempt to provide this notice by email, if the users have given
us an email address, and by postal mail if the users have provided a
postal address.
c. If the users do not challenge the disclosure request, we may be legally
required to turn over their information.
d. We may delay notice if we, in good faith, believe that an emergency
involving danger of death or serious physical injury to any person
requires disclosure without delay of information relating to the
emergency.
EXCEPTIONS
Data from DNT Users collected by this domain may be logged or retained only in
the following specific situations:
1. CONSENT / "OPT BACK IN"
a. DNT Users are opting out from tracking across the Web. It is possible
that for some feature or functionality, we will need to ask a DNT User to
"opt back in" to be tracked by us across the entire Web.
b. If we do that, we will take reasonable steps to verify that the users who
select this option have genuinely intended to opt back in to tracking.
One way to do this is by performing scientifically reasonable user
studies with a representative sample of our users, but smaller
organizations can satisfy this requirement by other means.
c. Where we believe that we have opt back in consent, our server will
send a tracking value status header "Tk: C" as described in section 6.2
of the W3C Tracking Preference Expression draft:
http://www.w3.org/TR/tracking-dnt/#tracking-status-value
2. TRANSACTIONS
If a DNT User actively and knowingly enters a transaction with our
services (for instance, clicking on a clearly-labeled advertisement,
posting content to a widget, or purchasing an item), we will retain
necessary data for as long as required to perform the transaction. This
may for example include keeping auditing information for clicks on
advertising links; keeping a copy of posted content and the name of the
posting user; keeping server-side session IDs to recognize logged in
users; or keeping a copy of the physical address to which a purchased
item will be shipped. By their nature, some transactions will require data
to be retained indefinitely.
3. TECHNICAL AND SECURITY LOGGING:
a. If, during the processing of the initial request (for unique identifiers)
or during the subsequent 10 days (for IP addresses and User Agent strings),
we obtain specific information that causes our employees or systems to
believe that a request is, or is likely to be, part of a security attack,
spam submission, or fraudulent transaction, then logs of those requests
are not subject to this policy.
b. If we encounter technical problems with our site, then, in rare
circumstances, we may retain logs for longer than 10 days, if that is
necessary to diagnose and fix those problems, but this practice will not be
routinized and we will strive to delete such logs as soon as possible.
4. AGGREGATION:
a. We may retain and share anonymized datasets, such as aggregate records of
readership patterns; statistical models of user behavior; graphs of system
variables; data structures to count active users on monthly or yearly
bases; database tables mapping authentication cookies to logged in
accounts; non-unique data structures constructed within browsers for tasks
such as ad frequency capping or conversion tracking; or logs with truncated
and/or encrypted IP addresses and simplified User Agent strings.
b. "Anonymized" means we have conducted risk mitigation to ensure
that the dataset, plus any additional information that is in our
possession or likely to be available to us, does not allow the
reconstruction of reading habits, online or offline activity of groups of
fewer than 5000 individuals or devices.
c. If we generate anonymized datasets under this exception we will publicly
document our anonymization methods in sufficient detail to allow outside
experts to evaluate the effectiveness of those methods.
5. ERRORS:
From time to time, there may be errors by which user data is temporarily
logged or retained in violation of this policy. If such errors are
inadvertent, rare, and made in good faith, they do not constitute a breach
of this policy. We will delete such data as soon as practicable after we
become aware of any error and take steps to ensure that it is deleted by any
third-party who may have had access to the data.
ADDITIONAL DEFINITIONS
"Fully Qualified Domain Name" means a domain name that addresses a computer
connected to the Internet. For instance, example1.com; www.example1.com;
ads.example1.com; and widgets.example2.com are all distinct FQDNs.
"Supercookie" means any technology other than an HTTP Cookie which can be used
by a server to associate identifiers with the clients that visit it. Examples
of supercookies include Flash LSO cookies, DOM storage, HTML5 storage, or
tricks to store information in caches or etags.
"Risk mitigation" means an engineering process that evaluates the possibility
and likelihood of various adverse outcomes, considers the available methods of
making those adverse outcomes less likely, and deploys sufficient mitigations
to bring the probability and harm from adverse outcomes below an acceptable
threshold.
"Reading habits" includes amongst other things lists of visited DNS names, if
those domains pertain to specific topics or activities, but records of visited
DNS names are not reading habits if those domain names serve content of a very
diverse and general nature, thereby revealing minimal information about the
opinions, interests or activities of the user.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
assets/apple-touch-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

9
assets/browserconfig.xml Normal file
View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square150x150logo src="/mstile-150x150.png"/>
<TileColor>#2b5797</TileColor>
</tile>
</msapplication>
</browserconfig>

119
assets/css/carousel.css Normal file
View File

@ -0,0 +1,119 @@
/*
Copyright (c) 2024 by Jennifer (https://codepen.io/jwjertzoch/pen/JjyGeRy)
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify,
merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall
be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
*/
.carousel {
margin: 0 auto;
overflow: hidden;
text-align: center;
}
.slides {
width: 100%;
display: flex;
overflow-x: scroll;
scrollbar-width: none;
scroll-snap-type: x mandatory;
scroll-behavior: smooth;
}
.slides::-webkit-scrollbar {
display: none;
}
.slides-item {
align-items: center;
border-radius: 10px;
display: flex;
flex-shrink: 0;
font-size: 100px;
height: 600px;
justify-content: center;
margin: 0 1rem;
position: relative;
scroll-snap-align: start;
transform: scale(1);
transform-origin: center center;
transition: transform .5s;
width: 100%;
}
.carousel__nav {
padding: 1.25rem .5rem;
}
.slider-nav {
align-items: center;
background-color: #ddd;
border-radius: 50%;
color: #000;
display: inline-flex;
height: 1.5rem;
justify-content: center;
padding: .5rem;
position: relative;
text-decoration: none;
width: 1.5rem;
}
.skip-link {
height: 1px;
overflow: hidden;
position: absolute;
top: auto;
width: 1px;
}
.skip-link:focus {
align-items: center;
background-color: #000;
color: #fff;
display: flex;
font-size: 30px;
height: 30px;
justify-content: center;
opacity: .8;
text-decoration: none;
width: 50%;
z-index: 1;
}
.light-theme .slider-nav {
background-color: #ddd;
}
.dark-theme .slider-nav {
background-color: #0005;
}
@media (prefers-color-scheme: light) {
.no-theme .slider-nav {
background-color: #ddd;
}
}
@media (prefers-color-scheme: dark) {
.no-theme .slider-nav {
background-color: #0005;
}
}

View File

@ -1,34 +0,0 @@
a:hover,
a:active {
color: rgb(0, 182, 240);
}
a {
color: #a0a0a0;
text-decoration: none;
}
body {
background-color: rgba(35, 35, 35, 1);
color: #f0f0f0;
}
.pure-form legend {
color: #f0f0f0;
}
.pure-menu-heading {
color: #f0f0f0;
}
.pure-form > fieldset > input,
.pure-control-group > input,
.pure-form > fieldset > select,
.pure-control-group > select {
color: rgba(35, 35, 35, 1);
}
.navbar > .searchbar input {
background-color: inherit;
color: inherit;
}

View File

@ -1,3 +1,21 @@
/*
* Common attributes
*/
html,
body {
font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", Roboto, Oxygen,
Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Helvetica,
Arial, sans-serif;
}
#contents {
display: flex;
flex-direction: column;
min-height: 100vh;
margin: auto;
}
.h-box {
padding-left: 1em;
padding-right: 1em;
@ -8,15 +26,230 @@
padding-bottom: 1em;
}
.deleted {
background-color: rgb(255, 0, 0, 0.5);
}
.underlined {
border-bottom: 1px solid;
margin-bottom: 20px;
}
.title {
margin: 0.5em 0 1em 0;
}
/* A flex container */
.flexible {
display: flex;
align-items: center;
}
.flex-left {
display: flex;
flex: 1 1 auto;
flex-flow: row wrap;
justify-content: flex-start;
}
.flex-right {
display: flex;
flex: 2 0 auto;
flex-flow: row nowrap;
justify-content: flex-end;
}
/*
* Channel page
*/
.channel-profile > * {
font-size: 1.17em;
font-weight: bold;
vertical-align: middle;
border-radius: 50%;
}
.channel-profile > img {
width: 48px;
height: auto;
}
body a.channel-owner {
background-color: #008bec;
color: #fff;
border-radius: 9px;
padding: 1px 6px;
}
.creator-heart-container {
display: inline-block;
padding: 0px 7px 6px 0px;
margin: 0px -7px -4px 0px;
}
.creator-heart {
display: inline-block;
position: relative;
width: 16px;
height: 16px;
border: 2px none;
}
.creator-heart-background-hearted {
width: 16px;
height: 16px;
padding: 0px;
position: relative;
}
.creator-heart-small-hearted {
position: absolute;
right: -7px;
bottom: -4px;
}
.creator-heart-small-container {
display: block;
position: relative;
width: 13px;
height: 13px;
color: rgb(255, 0, 0);
}
.feed-menu {
display: flex;
justify-content: center;
flex-wrap: wrap;
}
.feed-menu-item {
text-align: center;
}
@media screen and (max-width: 640px) {
.feed-menu-item {
flex: 0 0 40%;
}
}
div {
overflow-wrap: break-word;
word-wrap: break-word;
}
.loading {
display: inline-block;
animation: spin 2s linear infinite;
}
.playlist-restricted {
height: 20em;
padding-right: 10px;
}
/*
* Buttons
*/
body a.pure-button {
color: rgba(0,0,0,.8);
}
button.pure-button-primary,
body a.pure-button-primary,
.channel-owner:hover,
.channel-owner:focus {
background-color: #a0a0a0;
color: rgba(35, 35, 35, 1);
}
.pure-button-primary,
.pure-button-secondary {
border: 1px solid #a0a0a0;
border-radius: 3px;
margin: 0 .4em;
}
.pure-button-secondary.low-profile {
padding: 5px 10px;
margin: 0;
}
/* Has to be combined with flex-left/right */
.button-container {
flex-flow: wrap;
gap: 0.5em 0.75em;
}
/*
* Video thumbnails
*/
div.thumbnail {
position: relative;
width: 100%;
box-sizing: border-box;
}
img.thumbnail {
display: block; /* See: https://stackoverflow.com/a/11635197 */
width: 100%;
object-fit: cover;
aspect-ratio: 16 / 9;
}
.thumbnail-placeholder {
min-height: 50px;
border: 2px dotted;
}
div.watched-overlay {
z-index: 50;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(255,255,255,.4);
}
div.watched-indicator {
position: absolute;
left: 0;
bottom: 0;
height: 4px;
width: 100%;
background-color: red;
}
div.thumbnail > .top-left-overlay,
div.thumbnail > .bottom-right-overlay {
z-index: 100;
position: absolute;
padding: 0;
margin: 0;
font-size: 16px;
}
.top-left-overlay { top: 0.6em; left: 0.6em; }
.bottom-right-overlay { bottom: 0.6em; right: 0.6em; }
.length {
padding: 1px;
margin: -2px 0;
color: #fff;
border-radius: 3px;
}
.length, .top-left-overlay button {
color: #eee;
background-color: rgba(35, 35, 35, 0.85) !important;
}
/*
* Navbar
*/
@ -32,7 +265,7 @@ div {
flex: 1;
}
.navbar > .searchbar {
.searchbar {
flex-grow: 2; /* take double the space of the other items */
}
@ -42,29 +275,39 @@ div {
.navbar .index-link {
font-weight: bold;
display: inline;
}
.navbar > .searchbar .pure-form input[type="search"] {
border-top: 0;
border-left: 0;
border-right: 0;
border-bottom: 1px solid #ccc;
border-radius: 0;
.searchbar .pure-form fieldset { padding: 0; }
padding: initial 0;
.searchbar input[type="search"] {
width: 100%;
margin: 1px;
box-shadow: none;
border: 1px solid;
border-color: rgba(0,0,0,0);
border-bottom-color: #CCC;
border-radius: 0;
transition: 0.1s border-bottom;
box-shadow: none;
appearance: none;
-webkit-appearance: none;
}
.navbar > .searchbar .pure-form fieldset {
padding: 0;
.searchbar input[type="search"]:focus {
margin: 0;
border: 2px solid;
border-color: rgba(0,0,0,0);
border-bottom-color: #FED;
}
/* attract focus to the searchbar by adding a subtle transition */
.navbar > .searchbar .pure-form input[type="search"]:focus {
border-bottom: 2px solid #aaa;
/* https://stackoverflow.com/a/55170420 */
input[type="search"]::-webkit-search-cancel-button {
-webkit-appearance: none;
height: 14px;
width: 14px;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAn0lEQVR42u3UMQrDMBBEUZ9WfQqDmm22EaTyjRMHAlM5K+Y7lb0wnUZPIKHlnutOa+25Z4D++MRBX98MD1V/trSppLKHqj9TTBWKcoUqffbUcbBBEhTjBOV4ja4l4OIAZThEOV6jHO8ARXD+gPPvKMABinGOrnu6gTNUawrcQKNCAQ7QeTxORzle3+sDfjJpPCqhJh7GixZq4rHcc9l5A9qZ+WeBhgEuAAAAAElFTkSuQmCC);
background-size: 14px;
}
.user-field {
@ -75,13 +318,28 @@ div {
}
.user-field div {
width: initial;
width: auto;
}
.user-field div:not(:last-child) {
margin-right: 1em;
}
/*
* Responsive rules
*/
@media only screen and (max-aspect-ratio: 16/9) {
.player-dimensions.vjs-fluid {
padding-top: 46.86% !important;
}
#player-container {
padding-bottom: 46.86% !important;
}
}
@media screen and (max-width: 767px) {
.navbar {
flex-direction: column;
@ -90,15 +348,28 @@ div {
.navbar > div {
display: flex;
justify-content: center;
}
.navbar > div:not(:last-child) {
margin-bottom: 1em;
margin-bottom: 25px;
}
.navbar > .searchbar > form {
width: 60%;
width: 75%;
}
h1 {
font-size: 1.25em;
margin: 0.42em 0;
}
/* Space out the subscribe & RSS buttons and align them to the left */
.title.flexible { display: block; }
.title.flexible > .flex-right { margin: 0.75em 0; justify-content: flex-start; }
/* Space out buttons to make them easier to tap */
.user-field { font-size: 125%; }
.user-field > :not(:last-child) { margin-right: 1.75em; }
.icon-buttons { font-size: 125%; }
.icon-buttons > :not(:last-child) { margin-right: 0.75em; }
}
@media screen and (max-width: 320px) {
@ -108,19 +379,95 @@ div {
}
}
/*
/*
* Video "cards" (results/playlist/channel videos)
*/
.video-card-row { margin: 15px 0; }
p.channel-name { margin: 0; }
p.video-data { margin: 0; font-weight: bold; font-size: 80%; }
/*
* Comments & community posts
*/
.comments {
max-width: 800px;
margin: auto;
}
/*
* We don't want the top and bottom margin on the post page.
*/
.comments.post-comments {
margin-bottom: 0;
margin-top: 0;
}
.video-iframe-wrapper {
position: relative;
height: 0;
padding-bottom: 56.25%;
}
.video-iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: none;
}
/*
* Page navigation
*/
.page-nav-container { margin: 15px 0 30px 0; }
.page-prev-container { text-align: start; }
.page-next-container { text-align: end; }
.page-prev-container,
.page-next-container {
display: inline-block;
}
/*
* Footer
*/
.footer {
color: #666666;
margin: 2em 0;
footer {
margin-top: auto;
padding: 1.5em 0;
text-align: center;
max-height: 30vh;
}
.footer a {
color: inherit;
text-decoration: underline;
.light-theme footer {
color: #7c7c7c;
}
.dark-theme footer {
color: #adadad;
}
.light-theme footer a {
color: #7c7c7c !important;
}
.dark-theme footer a {
color: #adadad !important;
}
footer span {
margin: 4px 0;
display: block;
}
/* keyframes */
@ -134,60 +481,321 @@ div {
}
}
/* Control Bar */
.video-js .vjs-control-bar,
.vjs-menu-button-popup .vjs-menu .vjs-menu-content {
background-color: rgba(35, 35, 35, 0.75);
fieldset > select,
span > select {
color: rgba(49, 49, 51, 1);
}
.vjs-menu li.vjs-menu-item:focus,
.vjs-menu li.vjs-menu-item:hover {
background-color: rgba(255, 255, 255, 0.75);
color: rgba(49, 49, 51, 0.75);
.pure-control-group label {
word-wrap: normal;
}
.vjs-menu li.vjs-selected,
.vjs-menu li.vjs-selected:focus,
.vjs-menu li.vjs-selected:hover {
background-color: rgba(0, 182, 240, 0.75);
/*
* Light theme
*/
.light-theme a:hover,
.light-theme a:active,
.light-theme summary:hover,
.light-theme a:focus,
.light-theme summary:focus {
color: #075A9E !important;
}
/* Progress Bar */
.video-js .vjs-slider {
background-color: rgba(15, 15, 15, 0.5);
.light-theme .pure-button-primary:hover,
.light-theme .pure-button-primary:focus,
.light-theme .pure-button-secondary:hover,
.light-theme .pure-button-secondary:focus {
color: #fff !important;
border-color: rgba(0, 182, 240, 0.75) !important;
background-color: rgba(0, 182, 240, 0.75) !important;
}
.video-js .vjs-load-progress,
.video-js .vjs-load-progress div {
background: rgba(87, 87, 88, 1);
.light-theme .pure-button-secondary:not(.low-profile) {
color: #335d7a;
background-color: #fff2;
}
.video-js .vjs-slider:hover,
.video-js button:hover {
color: rgba(0, 182, 240, 1);
.light-theme a {
color: #335d7a;
text-decoration: none;
}
.video-js .vjs-play-progress {
background-color: rgba(0, 182, 240, 1);
/* All links that do not fit with the default color goes here */
.light-theme a:not([data-id]) > .icon,
.light-theme .pure-u-lg-1-5 > .h-box > a[href^="/watch?"],
.light-theme .playlist-restricted > ol > li > a {
color: #303030;
}
/* Big "Play" Button */
.video-js .vjs-big-play-button {
background-color: rgba(35, 35, 35, 0.5);
.light-theme .pure-menu-heading {
color: #565d64;
}
.video-js:hover .vjs-big-play-button {
background-color: rgba(35, 35, 35, 0.75);
@media (prefers-color-scheme: light) {
.no-theme a:hover,
.no-theme a:active,
.no-theme summary:hover,
.no-theme a:focus,
.no-theme summary:focus {
color: #075A9E !important;
}
.no-theme .pure-button-primary:hover,
.no-theme .pure-button-primary:focus,
.no-theme .pure-button-secondary:hover,
.no-theme .pure-button-secondary:focus {
color: #fff !important;
border-color: rgba(0, 182, 240, 0.75) !important;
background-color: rgba(0, 182, 240, 0.75) !important;
}
.no-theme .pure-button-secondary:not(.low-profile) {
color: #335d7a;
background-color: #fff2;
}
.no-theme a {
color: #335d7a;
text-decoration: none;
}
/* All links that do not fit with the default color goes here */
.no-theme a:not([data-id]) > .icon,
.no-theme .pure-u-lg-1-5 > .h-box > a[href^="/watch?"],
.no-theme .playlist-restricted > ol > li > a {
color: #303030;
}
.no-theme footer {
color: #7c7c7c;
}
.no-theme footer a {
color: #7c7c7c !important;
}
.light-theme .pure-menu-heading {
color: #565d64;
}
}
.video-js .vjs-current-time,
.video-js .vjs-time-divider,
.video-js .vjs-duration {
/*
* Dark theme
*/
.dark-theme a:hover,
.dark-theme a:active,
.dark-theme summary:hover,
.dark-theme a:focus,
.dark-theme summary:focus {
color: rgb(0, 182, 240);
}
.dark-theme .pure-button-primary:hover,
.dark-theme .pure-button-primary:focus,
.dark-theme .pure-button-secondary:hover,
.dark-theme .pure-button-secondary:focus {
color: #fff !important;
border-color: rgb(0, 182, 240) !important;
background-color: rgba(0, 182, 240, 1) !important;
}
.dark-theme .pure-button-secondary {
background-color: #0002;
color: #ddd;
}
.dark-theme a {
color: #adadad;
text-decoration: none;
}
body.dark-theme {
background-color: rgba(35, 35, 35, 1);
color: #f0f0f0;
}
.dark-theme .pure-form legend {
color: #f0f0f0;
}
.dark-theme .pure-menu-heading {
color: #f0f0f0;
}
.dark-theme input,
.dark-theme select,
.dark-theme textarea {
color: rgba(35, 35, 35, 1);
}
.dark-theme .pure-form input[type="file"] {
color: #f0f0f0;
}
.dark-theme .searchbar input {
background-color: inherit;
color: inherit;
}
@media (prefers-color-scheme: dark) {
.no-theme a:hover,
.no-theme a:active,
.no-theme a:focus {
color: rgb(0, 182, 240);
}
.no-theme .pure-button-primary:hover,
.no-theme .pure-button-primary:focus,
.no-theme .pure-button-secondary:hover,
.no-theme .pure-button-secondary:focus {
color: #fff !important;
border-color: rgb(0, 182, 240) !important;
background-color: rgba(0, 182, 240, 1) !important;
}
.no-theme .pure-button-secondary {
background-color: #0002;
color: #ddd;
}
.no-theme a {
color: #adadad;
text-decoration: none;
}
body.no-theme {
background-color: rgba(35, 35, 35, 1);
color: #f0f0f0;
}
.no-theme .pure-form legend {
color: #f0f0f0;
}
.no-theme .pure-menu-heading {
color: #f0f0f0;
}
.no-theme input,
.no-theme select,
.no-theme textarea {
color: rgba(35, 35, 35, 1);
}
.no-theme .pure-form input[type="file"] {
color: #f0f0f0;
}
.no-theme .searchbar input {
background-color: inherit;
color: inherit;
}
.no-theme footer {
color: #adadad;
}
.no-theme footer a {
color: #adadad !important;
}
}
/*
* Miscellanous
*/
/*With commit d9528f5 all contents of the page is now within a flexbox. However,
the hr element is rendered improperly within one.
See https://stackoverflow.com/a/34372979 for more info */
hr {
margin: 10px 0 10px 0;
}
/* Description Expansion Styling*/
#descexpansionbutton,
#music-desc-expansion {
display: none;
}
#descexpansionbutton ~ div {
overflow: hidden;
}
#descexpansionbutton:not(:checked) ~ div {
max-height: 8.3em;
}
#descexpansionbutton:checked ~ div {
overflow: unset;
height: 100%;
}
#descexpansionbutton ~ label {
order: 1;
margin-top: 20px;
}
label[for="descexpansionbutton"]:hover,
label[for="music-desc-expansion"]:hover {
cursor: pointer;
}
/* Bidi (bidirectional text) support */
h1, h2, h3, h4, h5, p,
#descriptionWrapper,
#description-box,
#music-description-box {
unicode-bidi: plaintext;
text-align: start;
}
#descriptionWrapper {
max-width: 600px;
white-space: pre-wrap;
}
#music-description-box {
display: none;
}
#music-desc-expansion:checked ~ #music-description-box {
display: block;
}
.video-js .vjs-time-divider {
min-width: 0px;
padding-left: 0px;
padding-right: 0px;
#music-desc-expansion ~ label > h3 > .ion-ios-arrow-up,
#music-desc-expansion:checked ~ label > h3 > .ion-ios-arrow-down {
display: none;
}
#music-desc-expansion:checked ~ label > h3 > .ion-ios-arrow-up,
#music-desc-expansion ~ label > h3 > .ion-ios-arrow-down {
display: inline;
}
/* Select all the music items except the first one */
.music-item + .music-item {
border-top: 1px solid #ffffff;
}
/* Center the "invidious" logo on the search page */
#logo > h1 { text-align: center; }
/* IE11 fixes */
:-ms-input-placeholder { color: #888; }
/* Wider settings name to less word wrap */
.pure-form-aligned .pure-control-group label { width: 19em; }
.channel-emoji {
margin: 0 2px;
}
#download_widget {
width: 100%;
}

27
assets/css/embed.css Normal file
View File

@ -0,0 +1,27 @@
#player {
position: fixed;
right: 0;
bottom: 0;
min-width: 100%;
min-height: 100%;
width: auto;
height: auto;
z-index: -100;
}
.watch-on-invidious {
font-size: 1.3em !important;
font-weight: bold;
white-space: nowrap;
margin: 0 1em 0 1em !important;
order: 3;
}
.watch-on-invidious > a {
color: white;
}
.watch-on-invidious > a:hover,
.watch-on-invidious > a:focus {
color: rgba(0, 182, 240, 1);;
}

16
assets/css/empty.css Normal file
View File

@ -0,0 +1,16 @@
#search-widget {
text-align: center;
margin: 20vh 0 50px 0;
}
#logo > h1 {
font-size: 3.5em;
margin: 0;
padding: 0;
}
@media screen and (max-width: 1500px) and (max-height: 1000px) {
#logo > h1 {
font-size: 10vmin;
}
}

7
assets/css/grids-responsive-min.css vendored Normal file

File diff suppressed because one or more lines are too long

11
assets/css/ionicons.min.css vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,9 +0,0 @@
a:hover,
a:active {
color: #167ac6;
}
a {
color: #303030;
text-decoration: none;
}

264
assets/css/player.css Normal file
View File

@ -0,0 +1,264 @@
/* Youtube player style */
.video-js.player-style-youtube .vjs-progress-control {
height: 0;
}
.video-js.player-style-youtube .vjs-progress-control .vjs-progress-holder, .video-js.player-style-youtube .vjs-progress-control {
position: absolute;
right: 0;
left: 0;
width: 100%;
margin: 0;
}
.video-js.player-style-youtube .vjs-control-bar {
background: linear-gradient(rgba(0,0,0,0.1), rgba(0, 0, 0,0.5));
}
.video-js.player-style-youtube .vjs-slider {
background-color: rgba(255,255,255,0.2);
}
.video-js.player-style-youtube .vjs-load-progress > div {
background-color: rgba(255,255,255,0.5);
}
.video-js.player-style-youtube .vjs-play-progress {
background-color: red;
}
.video-js.player-style-youtube .vjs-progress-control:hover .vjs-progress-holder {
font-size: 15px;
}
.video-js.player-style-youtube .vjs-control-bar > .vjs-spacer {
flex: 1;
order: 2;
}
.video-js.player-style-youtube .vjs-play-progress .vjs-time-tooltip {
display: none;
}
.video-js.player-style-youtube .vjs-play-progress::before {
color: red;
font-size: 0.85em;
display: none;
}
.video-js.player-style-youtube .vjs-progress-holder:hover .vjs-play-progress::before {
display: unset;
}
.video-js.player-style-youtube .vjs-control-bar {
display: flex;
flex-direction: row;
}
.video-js.player-style-youtube .vjs-big-play-button {
/*
Styles copied from video-js.min.css, definition of
.vjs-big-play-centered .vjs-big-play-button
*/
top: 50%;
left: 50%;
margin-top: -0.81666em;
margin-left: -1.5em;
}
.video-js.player-style-youtube .vjs-menu-button-popup .vjs-menu {
margin-bottom: 2em;
}
.video-js.player-style-youtube .vjs-progress-control .vjs-progress-holder, .video-js.player-style-youtube .vjs-progress-control {height: 5px;
margin-bottom: 10px;}
ul.vjs-menu-content::-webkit-scrollbar {
display: none;
}
.vjs-user-inactive {
cursor: none;
}
.video-js .vjs-text-track-display > div > div > div {
background-color: rgba(0, 0, 0, 0.75) !important;
border-radius: 9px !important;
padding: 5px !important;
}
.vjs-play-control,
.vjs-volume-panel,
.vjs-current-time,
.vjs-time-control,
.vjs-duration,
.vjs-progress-control,
.vjs-remaining-time {
order: 1;
}
.vjs-captions-button {
order: 2;
}
.vjs-audio-button {
order: 3;
}
.vjs-quality-selector,
.video-js .vjs-http-source-selector {
order: 4;
}
.vjs-playback-rate {
order: 5;
}
.vjs-share-control {
order: 6;
}
.vjs-fullscreen-control {
order: 7;
}
.vjs-playback-rate > .vjs-menu {
width: 50px;
}
.vjs-control-bar {
display: flex;
flex-direction: row;
scrollbar-width: none;
}
.vjs-control-bar::-webkit-scrollbar {
display: none;
}
.video-js .vjs-icon-cog {
font-size: 18px;
}
.video-js .vjs-control-bar,
.vjs-menu-button-popup .vjs-menu .vjs-menu-content {
background-color: rgba(35, 35, 35, 0.75);
}
.vjs-menu li.vjs-menu-item:focus,
.vjs-menu li.vjs-menu-item:hover {
background-color: rgba(255, 255, 255, 0.75);
color: rgba(49, 49, 51, 0.75);
}
.vjs-menu li.vjs-selected,
.vjs-menu li.vjs-selected:focus,
.vjs-menu li.vjs-selected:hover {
background-color: rgba(0, 182, 240, 0.75);
}
/* Progress Bar */
.video-js .vjs-slider {
background-color: rgba(15, 15, 15, 0.5);
}
.video-js .vjs-load-progress,
.video-js .vjs-load-progress div {
background: rgba(87, 87, 88, 1);
}
.video-js .vjs-slider:hover,
.video-js button:hover {
color: rgba(0, 182, 240, 1);
}
.video-js.player-style-invidious .vjs-play-progress {
background-color: rgba(0, 182, 240, 1);
}
/* Overlay */
.video-js .vjs-overlay {
background-color: rgba(35, 35, 35, 0.75) !important;
}
.video-js .vjs-overlay * {
color: rgba(255, 255, 255, 1) !important;
text-align: center;
}
/* ProgressBar marker */
.vjs-marker {
background-color: rgba(255, 255, 255, 1);
z-index: 0;
}
/* Big "Play" Button */
.video-js .vjs-big-play-button {
background-color: rgba(35, 35, 35, 0.5);
}
.video-js:hover .vjs-big-play-button {
background-color: rgba(35, 35, 35, 0.75);
}
.video-js .vjs-current-time,
.video-js .vjs-time-divider,
.video-js .vjs-duration {
display: block;
}
.video-js .vjs-time-divider {
min-width: 0px;
padding-left: 0px;
padding-right: 0px;
}
.video-js .vjs-poster {
background-size: cover;
object-fit: cover;
}
.player-dimensions.vjs-fluid {
padding-top: 82vh;
}
video.video-js {
position: absolute;
height: 100%;
}
#player-container {
position: relative;
padding-left: 0;
padding-right: 0;
margin-left: 1em;
margin-right: 1em;
padding-bottom: 82vh;
height: 0;
}
.mobile-operations-bar {
display: flex;
position: absolute;
top: 0;
right: 1px !important;
left: initial !important;
width: initial !important;
}
.mobile-operations-bar ul {
position: absolute !important;
bottom: unset !important;
top: 1.5em;
}
@media screen and (max-width: 700px) {
.video-js .vjs-share {
justify-content: unset;
}
}
@media screen and (max-width: 650px) {
.vjs-modal-dialog-content {
overflow-x: hidden;
}
}

11
assets/css/pure-min.css vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.vjs-quality-selector .vjs-menu-button{margin:0;padding:0;height:100%;width:100%}.vjs-quality-selector .vjs-icon-placeholder{font-family:'VideoJS';font-weight:normal;font-style:normal}.vjs-quality-selector .vjs-icon-placeholder:before{content:'\f110'}.vjs-quality-changing .vjs-big-play-button{display:none}.vjs-quality-changing .vjs-control-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;visibility:visible;opacity:1}

121
assets/css/search.css Normal file
View File

@ -0,0 +1,121 @@
summary {
/* This should hide the marker */
display: block;
font-size: 1.17em;
font-weight: bold;
margin: 0 auto 10px auto;
cursor: pointer;
}
summary::-webkit-details-marker,
summary::marker { display: none; }
summary:before {
border-radius: 5px;
content: "[ + ]";
margin: -2px 10px 0 10px;
padding: 1px 0 3px 0;
text-align: center;
width: 40px;
}
details[open] > summary:before { content: "[ ]"; }
#filters-box {
padding: 10px 20px 20px 10px;
margin: 10px 15px;
}
#filters-flex {
display: flex;
flex-wrap: wrap;
flex-direction: row;
align-items: flex-start;
align-content: flex-start;
justify-content: flex-start;
}
fieldset, legend {
display: contents !important;
border: none !important;
margin: 0 !important;
padding: 0 !important;
}
.filter-column {
display: inline-block;
display: inline-flex;
width: max-content;
min-width: max-content;
max-width: 16em;
margin: 15px;
flex-grow: 2;
flex-basis: auto;
flex-direction: column;
}
.filter-name, .filter-options {
display: block;
padding: 5px 10px;
margin: 0;
text-align: start;
}
.filter-options div { margin: 6px 0; }
.filter-options div * { vertical-align: middle; }
.filter-options label { margin: 0 10px; }
#filters-apply {
text-align: right; /* IE11 only */
text-align: end; /* Override for compatible browsers */
}
/* Error message */
.no-results-error {
text-align: center;
line-height: 180%;
font-size: 110%;
padding: 15px 15px 125px 15px;
}
/* Responsive rules */
@media only screen and (max-width: 800px) {
summary { font-size: 1.30em; }
#filters-box {
margin: 10px 0 0 0;
padding: 0;
}
#filters-apply {
text-align: center;
padding: 15px;
}
}
/* Light theme */
.light-theme #filters-box {
background: #dfdfdf;
}
@media (prefers-color-scheme: light) {
.no-theme #filters-box {
background: #dfdfdf;
}
}
/* Dark theme */
.dark-theme #filters-box {
background: #373737;
}
@media (prefers-color-scheme: dark) {
.no-theme #filters-box {
background: #373737;
}
}

View File

@ -0,0 +1 @@
.__cxt-ar-annotations-container__{--annotation-close-size: 20px;position:absolute;width:100%;height:100%;top:0;left:0;pointer-events:none;overflow:hidden}.__cxt-ar-annotation__{position:absolute;box-sizing:border-box;font-family:Arial,sans-serif;color:#fff;z-index:20;pointer-events:auto}.__cxt-ar-annotation__ span{position:absolute;left:0;top:0;overflow:hidden;word-wrap:break-word;white-space:pre-wrap;pointer-events:none;box-sizing:border-box;padding:2%;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.__cxt-ar-annotation-close__{display:none;position:absolute;width:var(--annotation-close-size);height:var(--annotation-close-size);cursor:pointer;right:calc(var(--annotation-close-size)/-1.8);top:calc(var(--annotation-close-size)/-1.8);z-index:1}.__cxt-ar-annotation__:hover:not([hidden]):not([data-ar-closed]) .__cxt-ar-annotation-close__{display:block}.__cxt-ar-annotation__[hidden]{display:none!important}.__cxt-ar-annotation__[data-ar-type=highlight]{border:1px solid rgba(255,255,255,.1);background-color:transparent}.__cxt-ar-annotation__[data-ar-type=highlight]:hover{border:1px solid rgba(255,255,255,.5);background-color:transparent}.__cxt-ar-annotation__ svg{pointer-events:all}

BIN
assets/favicon-16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

BIN
assets/favicon-32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
assets/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
assets/fonts/ionicons.eot Normal file

Binary file not shown.

2090
assets/fonts/ionicons.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 305 KiB

BIN
assets/fonts/ionicons.ttf Normal file

Binary file not shown.

BIN
assets/fonts/ionicons.woff Normal file

Binary file not shown.

BIN
assets/fonts/ionicons.woff2 Normal file

Binary file not shown.

9
assets/hashtag.svg Normal file
View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="128" height="128" viewBox="0 0 128 128" version="1.1" id="svg5" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<g>
<rect fill="#c84fff" width="128" height="128" x="0" y="0" />
<g aria-label="#" transform="matrix(1.1326954,0,0,1.1326954,-20.255282,-23.528147)">
<path d="m 87.780593,70.524217 -2.624999,13.666661 h 11.666662 v 5.708331 H 84.030595 L 80.61393,107.73253 H 74.488932 L 77.988931,89.899209 H 65.863936 L 62.447271,107.73253 H 56.447273 L 59.697272,89.899209 H 48.947276 V 84.190878 H 60.822271 L 63.530603,70.524217 H 52.113942 V 64.815886 H 64.57227 l 3.416665,-17.999993 h 6.124997 l -3.416665,17.999993 h 12.208328 l 3.499999,-17.999993 h 5.999997 l -3.499998,17.999993 h 10.916662 v 5.708331 z M 66.947269,84.190878 H 79.072264 L 81.738929,70.524217 H 69.613934 Z" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 918 B

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="512pt" height="512pt" version="1.0" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><g><rect x="-.0072516" y=".00056299" width="512.01" height="512.02" fill="#575757" stroke-width=".063019"/><path d="m247.17 455.95c-19.792-0.78921-38.719-4.2564-57.154-10.47-60.968-20.55-108.68-68.579-127-127.86-7.8955-25.538-10.062-53.943-6.2586-82.067 3.7105-27.439 13.603-53.515 29.342-77.344 12.069-18.273 29.138-36.277 47.228-49.816 36.891-27.61 85.944-42.49 132.38-40.157 25.88 1.3001 49.939 6.765 73.106 16.606 8.1948 3.481 20.024 9.6845 27.696 14.525 14.15 8.9272 22.367 15.498 34.482 27.573 13.254 13.211 22.128 24.276 30.398 37.906 7.2081 11.879 14.099 27.15 18.229 40.397 1.5996 5.1305 4.442 16.456 5.6852 22.653 2.3908 11.917 2.6998 15.722 2.7049 33.312 6e-3 18.515-0.46256 24.413-2.9166 36.758-9.3274 46.92-35.58 88.167-74.872 117.64-22.814 17.112-50.027 29.535-78.547 35.858-16.714 3.7059-35.421 5.2453-54.498 4.4846zm-35.1-78.786c-5.3e-4 -0.52647-0.0741-2.0564-0.16311-3.3999l-0.16178-2.4427-4.7018-0.26271c-4.0477-0.22614-4.7968-0.33363-5.3847-0.77253-2.0235-1.5108-1.4679-6.0695 2.2494-18.457 0.8637-2.8781 3.3371-11.321 5.4966-18.762 2.1594-7.4409 5.2002-17.836 6.7573-23.101 1.5571-5.2648 4.1948-14.282 5.8615-20.038 1.6667-5.7562 3.6145-12.4 4.3284-14.764 0.71391-2.3641 3.2583-11.037 5.6542-19.272 4.9475-17.007 8.1626-27.723 8.9438-29.811 0.51852-1.3858 0.54785-1.4139 0.99761-0.95317 0.25486 0.26106 3.8462 7.3667 7.9807 15.79 4.1345 8.4236 13.089 26.573 19.898 40.331 17.188 34.73 37.849 76.578 43.261 87.622l4.5356 9.257 11.359-0.0895c6.2475-0.0492 11.615-0.19623 11.929-0.32672 0.5614-0.23385 0.54167-0.2959-1.3723-4.3176-1.068-2.2442-8.1436-16.601-15.724-31.904-48.687-98.293-61.22-123.86-67.889-138.48-4.7022-10.309-6.9031-14.807-7.7139-15.762-0.82931-0.97742-1.6319-1.0638-2.3704-0.25525-1.1993 1.313-4.1046 10.063-9.3869 28.27-2.0569 7.0899-6.5372 22.425-9.9562 34.077-6.6396 22.629-8.5182 29.037-14.33 48.883-2.0354 6.9495-4.7977 16.369-6.1385 20.931-1.3408 4.5628-4.033 13.81-5.9826 20.549-4.304 14.877-6.136 20.889-7.3886 24.25-2.1371 5.7334-2.5723 6.3292-4.9216 6.7384-0.88855 0.15472-2.4102 0.28196-3.3815 0.28275-2.1993 3e-3 -3.5494 0.36339-4.0558 1.0863-0.42176 0.60215-0.56421 4.8802-0.18251 5.4812 0.20573 0.32388 2.4672 0.37414 23.34 0.51873l8.6151 0.0597-7e-4 -0.95723zm36.751-205.59c4.3282-0.92335 8.4607-4.943 9.4374-9.1796 0.36569-1.5862 0.32543-4.9758-0.077-6.4799-0.85108-3.1813-3.2688-6.291-6.039-7.7675-3.8111-2.0313-9.456-2.0295-13.272 5e-3 -5.9828 3.1888-8.1556 11.089-4.7878 17.408 2.6995 5.0648 8.3611 7.3754 14.738 6.015z" fill="#f0f0f0" stroke-width=".025526"/></g><g transform="matrix(.069892 0 0 -.069892 44.236 474.48)"><path d="m2787 4669c-124-65-123-255 3-319 86-44 196-16 247 62 58 87 26 211-67 258-51 26-132 26-183-1z" fill="#00b6f0" stroke="#00b6f0" stroke-width="4.25"/><path d="m2882 4108c-12-16-63-166-102-303-30-104-101-350-165-565-20-69-58-199-85-290-26-91-64-221-85-290-20-69-58-199-85-290-26-91-64-221-85-290-20-69-57-195-81-280-59-207-93-299-115-310-10-6-35-10-56-10-73 0-84-8-81-54l3-41 228-3 228-2-3 47-3 48-73 3c-66 3-74 5-84 27-13 28 0 104 37 225 13 41 47 156 75 255s66 230 85 290c18 61 56 191 85 290 28 99 66 230 85 290 18 61 56 191 85 290 85 297 123 419 131 429 5 5 17-11 28-35 10-24 192-393 403-819s447-902 523-1058l139-282h168c92 0 168 4 168 8s-75 158-166 342c-588 1183-969 1958-1033 2100-29 63-69 151-89 195-44 95-58 110-80 83z" fill="#575757"/></g></svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

254
assets/js/_helpers.js Normal file
View File

@ -0,0 +1,254 @@
'use strict';
// Contains only auxiliary methods
// May be included and executed unlimited number of times without any consequences
// Polyfills for IE11
Array.prototype.find = Array.prototype.find || function (condition) {
return this.filter(condition)[0];
};
Array.from = Array.from || function (source) {
return Array.prototype.slice.call(source);
};
NodeList.prototype.forEach = NodeList.prototype.forEach || function (callback) {
Array.from(this).forEach(callback);
};
String.prototype.includes = String.prototype.includes || function (searchString) {
return this.indexOf(searchString) >= 0;
};
String.prototype.startsWith = String.prototype.startsWith || function (prefix) {
return this.substr(0, prefix.length) === prefix;
};
Math.sign = Math.sign || function(x) {
x = +x;
if (!x) return x; // 0 and NaN
return x > 0 ? 1 : -1;
};
if (!window.hasOwnProperty('HTMLDetailsElement') && !window.hasOwnProperty('mockHTMLDetailsElement')) {
window.mockHTMLDetailsElement = true;
const style = 'details:not([open]) > :not(summary) {display: none}';
document.head.appendChild(document.createElement('style')).textContent = style;
addEventListener('click', function (e) {
if (e.target.nodeName !== 'SUMMARY') return;
const details = e.target.parentElement;
if (details.hasAttribute('open'))
details.removeAttribute('open');
else
details.setAttribute('open', '');
});
}
// Monstrous global variable for handy code
// Includes: clamp, xhr, storage.{get,set,remove}
window.helpers = window.helpers || {
/**
* https://en.wikipedia.org/wiki/Clamping_(graphics)
* @param {Number} num Source number
* @param {Number} min Low border
* @param {Number} max High border
* @returns {Number} Clamped value
*/
clamp: function (num, min, max) {
if (max < min) {
var t = max; max = min; min = t; // swap max and min
}
if (max < num)
return max;
if (min > num)
return min;
return num;
},
/** @private */
_xhr: function (method, url, options, callbacks) {
const xhr = new XMLHttpRequest();
xhr.open(method, url);
// Default options
xhr.responseType = 'json';
xhr.timeout = 10000;
// Default options redefining
if (options.responseType)
xhr.responseType = options.responseType;
if (options.timeout)
xhr.timeout = options.timeout;
if (method === 'POST')
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// better than onreadystatechange because of 404 codes https://stackoverflow.com/a/36182963
xhr.onloadend = function () {
if (xhr.status === 200) {
if (callbacks.on200) {
// fix for IE11. It doesn't convert response to JSON
if (xhr.responseType === '' && typeof(xhr.response) === 'string')
callbacks.on200(JSON.parse(xhr.response));
else
callbacks.on200(xhr.response);
}
} else {
// handled by onerror
if (xhr.status === 0) return;
if (callbacks.onNon200)
callbacks.onNon200(xhr);
}
};
xhr.ontimeout = function () {
if (callbacks.onTimeout)
callbacks.onTimeout(xhr);
};
xhr.onerror = function () {
if (callbacks.onError)
callbacks.onError(xhr);
};
if (options.payload)
xhr.send(options.payload);
else
xhr.send();
},
/** @private */
_xhrRetry: function(method, url, options, callbacks) {
if (options.retries <= 0) {
console.warn('Failed to pull', options.entity_name);
if (callbacks.onTotalFail)
callbacks.onTotalFail();
return;
}
helpers._xhr(method, url, options, callbacks);
},
/**
* @callback callbackXhrOn200
* @param {Object} response - xhr.response
*/
/**
* @callback callbackXhrError
* @param {XMLHttpRequest} xhr
*/
/**
* @param {'GET'|'POST'} method - 'GET' or 'POST'
* @param {String} url - URL to send request to
* @param {Object} options - other XHR options
* @param {XMLHttpRequestBodyInit} [options.payload=null] - payload for POST-requests
* @param {'arraybuffer'|'blob'|'document'|'json'|'text'} [options.responseType=json]
* @param {Number} [options.timeout=10000]
* @param {Number} [options.retries=1]
* @param {String} [options.entity_name='unknown'] - string to log
* @param {Number} [options.retry_timeout=1000]
* @param {Object} callbacks - functions to execute on events fired
* @param {callbackXhrOn200} [callbacks.on200]
* @param {callbackXhrError} [callbacks.onNon200]
* @param {callbackXhrError} [callbacks.onTimeout]
* @param {callbackXhrError} [callbacks.onError]
* @param {callbackXhrError} [callbacks.onTotalFail] - if failed after all retries
*/
xhr: function(method, url, options, callbacks) {
if (!options.retries || options.retries <= 1) {
helpers._xhr(method, url, options, callbacks);
return;
}
if (!options.entity_name) options.entity_name = 'unknown';
if (!options.retry_timeout) options.retry_timeout = 1000;
const retries_total = options.retries;
let currentTry = 1;
const retry = function () {
console.warn('Pulling ' + options.entity_name + ' failed... ' + (currentTry++) + '/' + retries_total);
setTimeout(function () {
options.retries--;
helpers._xhrRetry(method, url, options, callbacks);
}, options.retry_timeout);
};
// Pack retry() call into error handlers
callbacks._onError = callbacks.onError;
callbacks.onError = function (xhr) {
if (callbacks._onError)
callbacks._onError(xhr);
retry();
};
callbacks._onTimeout = callbacks.onTimeout;
callbacks.onTimeout = function (xhr) {
if (callbacks._onTimeout)
callbacks._onTimeout(xhr);
retry();
};
helpers._xhrRetry(method, url, options, callbacks);
},
/**
* @typedef {Object} invidiousStorage
* @property {(key:String) => Object} get
* @property {(key:String, value:Object)} set
* @property {(key:String)} remove
*/
/**
* Universal storage, stores and returns JS objects. Uses inside localStorage or cookies
* @type {invidiousStorage}
*/
storage: (function () {
// access to localStorage throws exception in Tor Browser, so try is needed
let localStorageIsUsable = false;
try{localStorageIsUsable = !!localStorage.setItem;}catch(e){}
if (localStorageIsUsable) {
return {
get: function (key) {
let storageItem = localStorage.getItem(key)
if (!storageItem) return;
try {
return JSON.parse(decodeURIComponent(storageItem));
} catch(e) {
// Erase non parsable value
helpers.storage.remove(key);
}
},
set: function (key, value) {
let encoded_value = encodeURIComponent(JSON.stringify(value))
localStorage.setItem(key, encoded_value);
},
remove: function (key) { localStorage.removeItem(key); }
};
}
// TODO: fire 'storage' event for cookies
console.info('Storage: localStorage is disabled or unaccessible. Cookies used as fallback');
return {
get: function (key) {
const cookiePrefix = key + '=';
function findCallback(cookie) {return cookie.startsWith(cookiePrefix);}
const matchedCookie = document.cookie.split('; ').find(findCallback);
if (matchedCookie) {
const cookieBody = matchedCookie.replace(cookiePrefix, '');
if (cookieBody.length === 0) return;
try {
return JSON.parse(decodeURIComponent(cookieBody));
} catch(e) {
// Erase non parsable value
helpers.storage.remove(key);
}
}
},
set: function (key, value) {
const cookie_data = encodeURIComponent(JSON.stringify(value));
// Set expiration in 2 year
const date = new Date();
date.setFullYear(date.getFullYear()+2);
document.cookie = key + '=' + cookie_data + '; expires=' + date.toGMTString();
},
remove: function (key) {
document.cookie = key + '=; Max-Age=0';
}
};
})()
};

174
assets/js/comments.js Normal file
View File

@ -0,0 +1,174 @@
var video_data = JSON.parse(document.getElementById('video_data').textContent);
var spinnerHTML = '<h3 style="text-align:center"><div class="loading"><i class="icon ion-ios-refresh"></i></div></h3>';
var spinnerHTMLwithHR = spinnerHTML + '<hr>';
String.prototype.supplant = function (o) {
return this.replace(/{([^{}]*)}/g, function (a, b) {
var r = o[b];
return typeof r === 'string' || typeof r === 'number' ? r : a;
});
};
function toggle_comments(event) {
var target = event.target;
var body = target.parentNode.parentNode.parentNode.children[1];
if (body.style.display === 'none') {
target.textContent = '[ ]';
body.style.display = '';
} else {
target.textContent = '[ + ]';
body.style.display = 'none';
}
}
function hide_youtube_replies(event) {
var target = event.target;
var sub_text = target.getAttribute('data-inner-text');
var inner_text = target.getAttribute('data-sub-text');
var body = target.parentNode.parentNode.children[1];
body.style.display = 'none';
target.textContent = sub_text;
target.onclick = show_youtube_replies;
target.setAttribute('data-inner-text', inner_text);
target.setAttribute('data-sub-text', sub_text);
}
function show_youtube_replies(event) {
var target = event.target;
var sub_text = target.getAttribute('data-inner-text');
var inner_text = target.getAttribute('data-sub-text');
var body = target.parentNode.parentNode.children[1];
body.style.display = '';
target.textContent = sub_text;
target.onclick = hide_youtube_replies;
target.setAttribute('data-inner-text', inner_text);
target.setAttribute('data-sub-text', sub_text);
}
function get_youtube_comments() {
var comments = document.getElementById('comments');
var fallback = comments.innerHTML;
comments.innerHTML = spinnerHTML;
var baseUrl = video_data.base_url || '/api/v1/comments/'+ video_data.id
var url = baseUrl +
'?format=html' +
'&hl=' + video_data.preferences.locale +
'&thin_mode=' + video_data.preferences.thin_mode;
if (video_data.ucid) {
url += '&ucid=' + video_data.ucid
}
var onNon200 = function (xhr) { comments.innerHTML = fallback; };
if (video_data.params.comments[1] === 'youtube')
onNon200 = function (xhr) {};
helpers.xhr('GET', url, {retries: 5, entity_name: 'comments'}, {
on200: function (response) {
var commentInnerHtml = ' \
<div> \
<h3> \
<a href="javascript:void(0)">[ ]</a> \
{commentsText} \
</h3> \
<b> \
'
if (video_data.support_reddit) {
commentInnerHtml += ' <a href="javascript:void(0)" data-comments="reddit"> \
{redditComments} \
</a> \
'
}
commentInnerHtml += ' </b> \
</div> \
<div>{contentHtml}</div> \
<hr>'
commentInnerHtml = commentInnerHtml.supplant({
contentHtml: response.contentHtml,
redditComments: video_data.reddit_comments_text,
commentsText: video_data.comments_text.supplant({
// toLocaleString correctly splits number with local thousands separator. e.g.:
// '1,234,567.89' for user with English locale
// '1 234 567,89' for user with Russian locale
// '1.234.567,89' for user with Portuguese locale
commentCount: response.commentCount.toLocaleString()
})
});
comments.innerHTML = commentInnerHtml;
comments.children[0].children[0].children[0].onclick = toggle_comments;
if (video_data.support_reddit) {
comments.children[0].children[1].children[0].onclick = swap_comments;
}
},
onNon200: onNon200, // declared above
onError: function (xhr) {
comments.innerHTML = spinnerHTML;
},
onTimeout: function (xhr) {
comments.innerHTML = spinnerHTML;
}
});
}
function get_youtube_replies(target, load_more, load_replies) {
var continuation = target.getAttribute('data-continuation');
var body = target.parentNode.parentNode;
var fallback = body.innerHTML;
body.innerHTML = spinnerHTML;
var baseUrl = video_data.base_url || '/api/v1/comments/'+ video_data.id
var url = baseUrl +
'?format=html' +
'&hl=' + video_data.preferences.locale +
'&thin_mode=' + video_data.preferences.thin_mode +
'&continuation=' + continuation;
if (video_data.ucid) {
url += '&ucid=' + video_data.ucid
}
if (load_replies) url += '&action=action_get_comment_replies';
helpers.xhr('GET', url, {}, {
on200: function (response) {
if (load_more) {
body = body.parentNode.parentNode;
body.removeChild(body.lastElementChild);
body.insertAdjacentHTML('beforeend', response.contentHtml);
} else {
body.removeChild(body.lastElementChild);
var p = document.createElement('p');
var a = document.createElement('a');
p.appendChild(a);
a.href = 'javascript:void(0)';
a.onclick = hide_youtube_replies;
a.setAttribute('data-sub-text', video_data.hide_replies_text);
a.setAttribute('data-inner-text', video_data.show_replies_text);
a.textContent = video_data.hide_replies_text;
var div = document.createElement('div');
div.innerHTML = response.contentHtml;
body.appendChild(p);
body.appendChild(div);
}
},
onNon200: function (xhr) {
body.innerHTML = fallback;
},
onTimeout: function (xhr) {
console.warn('Pulling comments failed');
body.innerHTML = fallback;
}
});
}

82
assets/js/community.js Normal file
View File

@ -0,0 +1,82 @@
'use strict';
var community_data = JSON.parse(document.getElementById('community_data').textContent);
function hide_youtube_replies(event) {
var target = event.target;
var sub_text = target.getAttribute('data-inner-text');
var inner_text = target.getAttribute('data-sub-text');
var body = target.parentNode.parentNode.children[1];
body.style.display = 'none';
target.innerHTML = sub_text;
target.onclick = show_youtube_replies;
target.setAttribute('data-inner-text', inner_text);
target.setAttribute('data-sub-text', sub_text);
}
function show_youtube_replies(event) {
var target = event.target;
var sub_text = target.getAttribute('data-inner-text');
var inner_text = target.getAttribute('data-sub-text');
var body = target.parentNode.parentNode.children[1];
body.style.display = '';
target.innerHTML = sub_text;
target.onclick = hide_youtube_replies;
target.setAttribute('data-inner-text', inner_text);
target.setAttribute('data-sub-text', sub_text);
}
function get_youtube_replies(target, load_more) {
var continuation = target.getAttribute('data-continuation');
var body = target.parentNode.parentNode;
var fallback = body.innerHTML;
body.innerHTML =
'<h3 style="text-align:center"><div class="loading"><i class="icon ion-ios-refresh"></i></div></h3>';
var url = '/api/v1/channels/comments/' + community_data.ucid +
'?format=html' +
'&hl=' + community_data.preferences.locale +
'&thin_mode=' + community_data.preferences.thin_mode +
'&continuation=' + continuation;
helpers.xhr('GET', url, {}, {
on200: function (response) {
if (load_more) {
body = body.parentNode.parentNode;
body.removeChild(body.lastElementChild);
body.innerHTML += response.contentHtml;
} else {
body.removeChild(body.lastElementChild);
var p = document.createElement('p');
var a = document.createElement('a');
p.appendChild(a);
a.href = 'javascript:void(0)';
a.onclick = hide_youtube_replies;
a.setAttribute('data-sub-text', community_data.hide_replies_text);
a.setAttribute('data-inner-text', community_data.show_replies_text);
a.textContent = community_data.hide_replies_text;
var div = document.createElement('div');
div.innerHTML = response.contentHtml;
body.appendChild(p);
body.appendChild(div);
}
},
onNon200: function (xhr) {
body.innerHTML = fallback;
},
onTimeout: function (xhr) {
console.warn('Pulling comments failed');
body.innerHTML = fallback;
}
});
}

64
assets/js/embed.js Normal file
View File

@ -0,0 +1,64 @@
'use strict';
var video_data = JSON.parse(document.getElementById('video_data').textContent);
function get_playlist(plid) {
var plid_url;
if (plid.startsWith('RD')) {
plid_url = '/api/v1/mixes/' + plid +
'?continuation=' + video_data.id +
'&format=html&hl=' + video_data.preferences.locale;
} else {
plid_url = '/api/v1/playlists/' + plid +
'?index=' + video_data.index +
'&continuation' + video_data.id +
'&format=html&hl=' + video_data.preferences.locale;
}
helpers.xhr('GET', plid_url, {retries: 5, entity_name: 'playlist'}, {
on200: function (response) {
if (!response.nextVideo)
return;
player.on('ended', function () {
var url = new URL('https://example.com/embed/' + response.nextVideo);
url.searchParams.set('list', plid);
if (!plid.startsWith('RD'))
url.searchParams.set('index', response.index);
if (video_data.params.autoplay || video_data.params.continue_autoplay)
url.searchParams.set('autoplay', '1');
if (video_data.params.listen !== video_data.preferences.listen)
url.searchParams.set('listen', video_data.params.listen);
if (video_data.params.speed !== video_data.preferences.speed)
url.searchParams.set('speed', video_data.params.speed);
if (video_data.params.local !== video_data.preferences.local)
url.searchParams.set('local', video_data.params.local);
location.assign(url.pathname + url.search);
});
}
});
}
addEventListener('load', function (e) {
if (video_data.plid) {
get_playlist(video_data.plid);
} else if (video_data.video_series) {
player.on('ended', function () {
var url = new URL('https://example.com/embed/' + video_data.video_series.shift());
if (video_data.params.autoplay || video_data.params.continue_autoplay)
url.searchParams.set('autoplay', '1');
if (video_data.params.listen !== video_data.preferences.listen)
url.searchParams.set('listen', video_data.params.listen);
if (video_data.params.speed !== video_data.preferences.speed)
url.searchParams.set('speed', video_data.params.speed);
if (video_data.params.local !== video_data.preferences.local)
url.searchParams.set('local', video_data.params.local);
if (video_data.video_series.length !== 0)
url.searchParams.set('playlist', video_data.video_series.join(','));
location.assign(url.pathname + url.search);
});
}
});

149
assets/js/handlers.js Normal file
View File

@ -0,0 +1,149 @@
'use strict';
(function () {
var video_player = document.getElementById('player_html5_api');
if (video_player) {
video_player.onmouseenter = function () { video_player['data-title'] = video_player['title']; video_player['title'] = ''; };
video_player.onmouseleave = function () { video_player['title'] = video_player['data-title']; video_player['data-title'] = ''; };
video_player.oncontextmenu = function () { video_player['title'] = video_player['data-title']; };
}
// For dynamically inserted elements
addEventListener('click', function (e) {
if (!e || !e.target) return;
var t = e.target;
var handler_name = t.getAttribute('data-onclick');
switch (handler_name) {
case 'jump_to_time':
e.preventDefault();
var time = t.getAttribute('data-jump-time');
player.currentTime(time);
break;
case 'get_youtube_replies':
var load_more = t.getAttribute('data-load-more') !== null;
var load_replies = t.getAttribute('data-load-replies') !== null;
get_youtube_replies(t, load_more, load_replies);
break;
case 'toggle_parent':
e.preventDefault();
toggle_parent(t);
break;
default:
break;
}
});
document.querySelectorAll('[data-mouse="switch_classes"]').forEach(function (el) {
var classes = el.getAttribute('data-switch-classes').split(',');
var classOnEnter = classes[0];
var classOnLeave = classes[1];
function toggle_classes(toAdd, toRemove) {
el.classList.add(toAdd);
el.classList.remove(toRemove);
}
el.onmouseenter = function () { toggle_classes(classOnEnter, classOnLeave); };
el.onmouseleave = function () { toggle_classes(classOnLeave, classOnEnter); };
});
document.querySelectorAll('[data-onsubmit="return_false"]').forEach(function (el) {
el.onsubmit = function () { return false; };
});
document.querySelectorAll('[data-onclick="mark_watched"]').forEach(function (el) {
el.onclick = function () { mark_watched(el); };
});
document.querySelectorAll('[data-onclick="mark_unwatched"]').forEach(function (el) {
el.onclick = function () { mark_unwatched(el); };
});
document.querySelectorAll('[data-onclick="add_playlist_video"]').forEach(function (el) {
el.onclick = function () { add_playlist_video(el); };
});
document.querySelectorAll('[data-onclick="add_playlist_item"]').forEach(function (el) {
el.onclick = function () { add_playlist_item(el); };
});
document.querySelectorAll('[data-onclick="remove_playlist_item"]').forEach(function (el) {
el.onclick = function () { remove_playlist_item(el); };
});
document.querySelectorAll('[data-onclick="revoke_token"]').forEach(function (el) {
el.onclick = function () { revoke_token(el); };
});
document.querySelectorAll('[data-onclick="remove_subscription"]').forEach(function (el) {
el.onclick = function () { remove_subscription(el); };
});
document.querySelectorAll('[data-onclick="notification_requestPermission"]').forEach(function (el) {
el.onclick = function () { Notification.requestPermission(); };
});
document.querySelectorAll('[data-onrange="update_volume_value"]').forEach(function (el) {
function update_volume_value() {
document.getElementById('volume-value').textContent = el.value;
}
el.oninput = update_volume_value;
el.onchange = update_volume_value;
});
function revoke_token(target) {
var row = target.parentNode.parentNode.parentNode.parentNode.parentNode;
row.style.display = 'none';
var count = document.getElementById('count');
count.textContent--;
var url = '/token_ajax?action_revoke_token=1&redirect=false' +
'&referer=' + encodeURIComponent(location.href) +
'&session=' + target.getAttribute('data-session');
var payload = 'csrf_token=' + target.parentNode.querySelector('input[name="csrf_token"]').value;
helpers.xhr('POST', url, {payload: payload}, {
onNon200: function (xhr) {
count.textContent++;
row.style.display = '';
}
});
}
function remove_subscription(target) {
var row = target.parentNode.parentNode.parentNode.parentNode.parentNode;
row.style.display = 'none';
var count = document.getElementById('count');
count.textContent--;
var url = '/subscription_ajax?action_remove_subscriptions=1&redirect=false' +
'&referer=' + encodeURIComponent(location.href) +
'&c=' + target.getAttribute('data-ucid');
var payload = 'csrf_token=' + target.parentNode.querySelector('input[name="csrf_token"]').value;
helpers.xhr('POST', url, {payload: payload}, {
onNon200: function (xhr) {
count.textContent++;
row.style.display = '';
}
});
}
// Handle keypresses
addEventListener('keydown', function (event) {
// Ignore modifier keys
if (event.ctrlKey || event.metaKey) return;
// Ignore shortcuts if any text input is focused
let focused_tag = document.activeElement.tagName.toLowerCase();
const allowed = /^(button|checkbox|file|radio|submit)$/;
if (focused_tag === 'textarea') return;
if (focused_tag === 'input') {
let focused_type = document.activeElement.type.toLowerCase();
if (!allowed.test(focused_type)) return;
}
// Focus search bar on '/'
if (event.key === '/') {
document.getElementById('searchbox').focus();
event.preventDefault();
}
});
})();

131
assets/js/notifications.js Normal file
View File

@ -0,0 +1,131 @@
'use strict';
var notification_data = JSON.parse(document.getElementById('notification_data').textContent);
/** Boolean meaning 'some tab have stream' */
const STORAGE_KEY_STREAM = 'stream';
/** Number of notifications. May be increased or reset */
const STORAGE_KEY_NOTIF_COUNT = 'notification_count';
var notifications, delivered;
var notifications_mock = { close: function () { } };
function get_subscriptions() {
helpers.xhr('GET', '/api/v1/auth/subscriptions', {
retries: 5,
entity_name: 'subscriptions'
}, {
on200: create_notification_stream
});
}
function create_notification_stream(subscriptions) {
// sse.js can't be replaced to EventSource in place as it lack support of payload and headers
// see https://developer.mozilla.org/en-US/docs/Web/API/EventSource/EventSource
notifications = new SSE(
'/api/v1/auth/notifications', {
withCredentials: true,
payload: 'topics=' + subscriptions.map(function (subscription) { return subscription.authorId; }).join(','),
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
});
delivered = [];
var start_time = Math.round(new Date() / 1000);
notifications.onmessage = function (event) {
if (!event.id) return;
var notification = JSON.parse(event.data);
console.info('Got notification:', notification);
// Ignore not actual and delivered notifications
if (start_time > notification.published || delivered.includes(notification.videoId)) return;
delivered.push(notification.videoId);
let notification_count = helpers.storage.get(STORAGE_KEY_NOTIF_COUNT) || 0;
notification_count++;
helpers.storage.set(STORAGE_KEY_NOTIF_COUNT, notification_count);
update_ticker_count();
// permission for notifications handled on settings page. JS handler is in handlers.js
if (window.Notification && Notification.permission === 'granted') {
var notification_text = notification.liveNow ? notification_data.live_now_text : notification_data.upload_text;
notification_text = notification_text.replace('`x`', notification.author);
var system_notification = new Notification(notification_text, {
body: notification.title,
icon: '/ggpht' + new URL(notification.authorThumbnails[2].url).pathname,
img: '/ggpht' + new URL(notification.authorThumbnails[4].url).pathname
});
system_notification.onclick = function (e) {
open('/watch?v=' + notification.videoId, '_blank');
};
}
};
notifications.addEventListener('error', function (e) {
console.warn('Something went wrong with notifications, trying to reconnect...');
notifications = notifications_mock;
setTimeout(get_subscriptions, 1000);
});
notifications.stream();
}
function update_ticker_count() {
var notification_ticker = document.getElementById('notification_ticker');
const notification_count = helpers.storage.get(STORAGE_KEY_STREAM);
if (notification_count > 0) {
notification_ticker.innerHTML =
'<span id="notification_count">' + notification_count + '</span> <i class="icon ion-ios-notifications"></i>';
} else {
notification_ticker.innerHTML =
'<i class="icon ion-ios-notifications-outline"></i>';
}
}
function start_stream_if_needed() {
// random wait for other tabs set 'stream' flag
setTimeout(function () {
if (!helpers.storage.get(STORAGE_KEY_STREAM)) {
// if no one set 'stream', set it by yourself and start stream
helpers.storage.set(STORAGE_KEY_STREAM, true);
notifications = notifications_mock;
get_subscriptions();
}
}, Math.random() * 1000 + 50); // [0.050 .. 1.050) second
}
addEventListener('storage', function (e) {
if (e.key === STORAGE_KEY_NOTIF_COUNT)
update_ticker_count();
// if 'stream' key was removed
if (e.key === STORAGE_KEY_STREAM && !helpers.storage.get(STORAGE_KEY_STREAM)) {
if (notifications) {
// restore it if we have active stream
helpers.storage.set(STORAGE_KEY_STREAM, true);
} else {
start_stream_if_needed();
}
}
});
addEventListener('load', function () {
var notification_count_el = document.getElementById('notification_count');
var notification_count = notification_count_el ? parseInt(notification_count_el.textContent) : 0;
helpers.storage.set(STORAGE_KEY_NOTIF_COUNT, notification_count);
if (helpers.storage.get(STORAGE_KEY_STREAM))
helpers.storage.remove(STORAGE_KEY_STREAM);
start_stream_if_needed();
});
addEventListener('unload', function () {
// let chance to other tabs to be a streamer via firing 'storage' event
if (notifications) helpers.storage.remove(STORAGE_KEY_STREAM);
});

789
assets/js/player.js Normal file
View File

@ -0,0 +1,789 @@
'use strict';
var player_data = JSON.parse(document.getElementById('player_data').textContent);
var video_data = JSON.parse(document.getElementById('video_data').textContent);
var options = {
preload: 'auto',
liveui: true,
playbackRates: [0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0],
controlBar: {
children: [
'playToggle',
'volumePanel',
'currentTimeDisplay',
'timeDivider',
'durationDisplay',
'progressControl',
'remainingTimeDisplay',
'Spacer',
'captionsButton',
'audioTrackButton',
'qualitySelector',
'playbackRateMenuButton',
'fullscreenToggle'
]
},
html5: {
preloadTextTracks: false,
vhs: {
overrideNative: true
}
}
};
if (player_data.aspect_ratio) {
options.aspectRatio = player_data.aspect_ratio;
}
var embed_url = new URL(location);
embed_url.searchParams.delete('v');
var short_url = location.origin + '/' + video_data.id + embed_url.search;
embed_url = location.origin + '/embed/' + video_data.id + embed_url.search;
var save_player_pos_key = 'save_player_pos';
videojs.Vhs.xhr.beforeRequest = function(options) {
// set local if requested not videoplayback
if (!options.uri.includes('videoplayback')) {
if (!options.uri.includes('local=true'))
options.uri += '?local=true';
}
return options;
};
var player = videojs('player', options);
player.on('error', function () {
if (video_data.params.quality === 'dash') return;
var localNotDisabled = (
!player.currentSrc().includes('local=true') && !video_data.local_disabled
);
var reloadMakesSense = (
player.error().code === MediaError.MEDIA_ERR_NETWORK ||
player.error().code === MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED
);
if (localNotDisabled) {
// add local=true to all current sources
player.src(player.currentSources().map(function (source) {
source.src += '&local=true';
return source;
}));
} else if (reloadMakesSense) {
setTimeout(function () {
console.warn('An error occurred in the player, reloading...');
// After load() all parameters are reset. Save them
var currentTime = player.currentTime();
var playbackRate = player.playbackRate();
var paused = player.paused();
player.load();
if (currentTime > 0.5) currentTime -= 0.5;
player.currentTime(currentTime);
player.playbackRate(playbackRate);
if (!paused) player.play();
}, 5000);
}
});
if (video_data.params.quality === 'dash') {
player.reloadSourceOnError({
errorInterval: 10
});
}
/**
* Function for add time argument to url
*
* @param {String} url
* @param {String} [base]
* @returns {URL} urlWithTimeArg
*/
function addCurrentTimeToURL(url, base) {
var urlUsed = new URL(url, base);
urlUsed.searchParams.delete('start');
var currentTime = Math.ceil(player.currentTime());
if (currentTime > 0)
urlUsed.searchParams.set('t', currentTime);
else if (urlUsed.searchParams.has('t'))
urlUsed.searchParams.delete('t');
return urlUsed;
}
/**
* Global variable to save the last timestamp (in full seconds) at which the external
* links were updated by the 'timeupdate' callback below.
*
* It is initialized to 5s so that the video will always restart from the beginning
* if the user hasn't really started watching before switching to the other website.
*/
var timeupdate_last_ts = 5;
/**
* Callback that updates the timestamp on all external links
*/
player.on('timeupdate', function () {
// Only update once every second
let current_ts = Math.floor(player.currentTime());
if (current_ts > timeupdate_last_ts) timeupdate_last_ts = current_ts;
else return;
// YouTube links
let elem_yt_watch = document.getElementById('link-yt-watch');
let elem_yt_embed = document.getElementById('link-yt-embed');
let base_url_yt_watch = elem_yt_watch.getAttribute('data-base-url');
let base_url_yt_embed = elem_yt_embed.getAttribute('data-base-url');
elem_yt_watch.href = addCurrentTimeToURL(base_url_yt_watch);
elem_yt_embed.href = addCurrentTimeToURL(base_url_yt_embed);
// Invidious links
let domain = window.location.origin;
let elem_iv_embed = document.getElementById('link-iv-embed');
let elem_iv_other = document.getElementById('link-iv-other');
let base_url_iv_embed = elem_iv_embed.getAttribute('data-base-url');
let base_url_iv_other = elem_iv_other.getAttribute('data-base-url');
elem_iv_embed.href = addCurrentTimeToURL(base_url_iv_embed, domain);
elem_iv_other.href = addCurrentTimeToURL(base_url_iv_other, domain);
});
var shareOptions = {
socials: ['fbFeed', 'tw', 'reddit', 'email'],
get url() {
return addCurrentTimeToURL(short_url);
},
title: player_data.title,
description: player_data.description,
image: player_data.thumbnail,
get embedCode() {
// Single quotes inside here required. HTML inserted as is into value attribute of input
return "<iframe id='ivplayer' width='640' height='360' src='" +
addCurrentTimeToURL(embed_url) + "' style='border:none;'></iframe>";
}
};
if (location.pathname.startsWith('/embed/')) {
var overlay_content = '<h1><a rel="noopener" target="_blank" href="' + location.origin + '/watch?v=' + video_data.id + '">' + player_data.title + '</a></h1>';
player.overlay({
overlays: [
{ start: 'loadstart', content: overlay_content, end: 'playing', align: 'top'},
{ start: 'pause', content: overlay_content, end: 'playing', align: 'top'}
]
});
}
// Detect mobile users and initialize mobileUi for better UX
// Detection code taken from https://stackoverflow.com/a/20293441
function isMobile() {
try{ document.createEvent('TouchEvent'); return true; }
catch(e){ return false; }
}
if (isMobile()) {
player.mobileUi({ touchControls: { seekSeconds: 5 * player.playbackRate() } });
var buttons = ['playToggle', 'volumePanel', 'captionsButton'];
if (!video_data.params.listen && video_data.params.quality === 'dash') buttons.push('audioTrackButton');
if (video_data.params.listen || video_data.params.quality !== 'dash') buttons.push('qualitySelector');
// Create new control bar object for operation buttons
const ControlBar = videojs.getComponent('controlBar');
let operations_bar = new ControlBar(player, {
children: [],
playbackRates: [0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0]
});
buttons.slice(1).forEach(function (child) {operations_bar.addChild(child);});
// Remove operation buttons from primary control bar
var primary_control_bar = player.getChild('controlBar');
buttons.forEach(function (child) {primary_control_bar.removeChild(child);});
var operations_bar_element = operations_bar.el();
operations_bar_element.classList.add('mobile-operations-bar');
player.addChild(operations_bar);
// Playback menu doesn't work when it's initialized outside of the primary control bar
var playback_element = document.getElementsByClassName('vjs-playback-rate')[0];
operations_bar_element.append(playback_element);
// The share and http source selector element can't be fetched till the players ready.
player.one('playing', function () {
var share_element = document.getElementsByClassName('vjs-share-control')[0];
operations_bar_element.append(share_element);
if (!video_data.params.listen && video_data.params.quality === 'dash') {
var http_source_selector = document.getElementsByClassName('vjs-http-source-selector vjs-menu-button')[0];
operations_bar_element.append(http_source_selector);
}
});
}
// Enable VR video support
if (!video_data.params.listen && video_data.vr && video_data.params.vr_mode) {
player.crossOrigin('anonymous');
switch (video_data.projection_type) {
case 'EQUIRECTANGULAR':
player.vr({projection: 'equirectangular'});
default: // Should only be 'MESH' but we'll use this as a fallback.
player.vr({projection: 'EAC'});
}
}
// Add markers
if (video_data.params.video_start > 0 || video_data.params.video_end > 0) {
var markers = [{ time: video_data.params.video_start, text: 'Start' }];
if (video_data.params.video_end < 0) {
markers.push({ time: video_data.length_seconds - 0.5, text: 'End' });
} else {
markers.push({ time: video_data.params.video_end, text: 'End' });
}
player.markers({
onMarkerReached: function (marker) {
if (marker.text === 'End')
player.loop() ? player.markers.prev('Start') : player.pause();
},
markers: markers
});
player.currentTime(video_data.params.video_start);
}
player.volume(video_data.params.volume / 100);
player.playbackRate(video_data.params.speed);
/**
* Method for getting the contents of a cookie
*
* @param {String} name Name of cookie
* @returns {String|null} cookieValue
*/
function getCookieValue(name) {
var cookiePrefix = name + '=';
var matchedCookie = document.cookie.split(';').find(function (item) {return item.includes(cookiePrefix);});
if (matchedCookie)
return matchedCookie.replace(cookiePrefix, '');
return null;
}
/**
* Method for updating the 'PREFS' cookie (or creating it if missing)
*
* @param {number} newVolume New volume defined (null if unchanged)
* @param {number} newSpeed New speed defined (null if unchanged)
*/
function updateCookie(newVolume, newSpeed) {
var volumeValue = newVolume !== null ? newVolume : video_data.params.volume;
var speedValue = newSpeed !== null ? newSpeed : video_data.params.speed;
var cookieValue = getCookieValue('PREFS');
var cookieData;
if (cookieValue !== null) {
var cookieJson = JSON.parse(decodeURIComponent(cookieValue));
cookieJson.volume = volumeValue;
cookieJson.speed = speedValue;
cookieData = encodeURIComponent(JSON.stringify(cookieJson));
} else {
cookieData = encodeURIComponent(JSON.stringify({ 'volume': volumeValue, 'speed': speedValue }));
}
// Set expiration in 2 year
var date = new Date();
date.setFullYear(date.getFullYear() + 2);
var ipRegex = /^((\d+\.){3}\d+|[\dA-Fa-f]*:[\d:A-Fa-f]*:[\d:A-Fa-f]+)$/;
var domainUsed = location.hostname;
// Fix for a bug in FF where the leading dot in the FQDN is not ignored
if (domainUsed.charAt(0) !== '.' && !ipRegex.test(domainUsed) && domainUsed !== 'localhost')
domainUsed = '.' + location.hostname;
var secure = location.protocol.startsWith("https") ? " Secure;" : "";
document.cookie = 'PREFS=' + cookieData + '; SameSite=Lax; path=/; domain=' +
domainUsed + '; expires=' + date.toGMTString() + ';' + secure;
video_data.params.volume = volumeValue;
video_data.params.speed = speedValue;
}
player.on('ratechange', function () {
updateCookie(null, player.playbackRate());
if (isMobile()) {
player.mobileUi({ touchControls: { seekSeconds: 5 * player.playbackRate() } });
}
});
player.on('volumechange', function () {
updateCookie(Math.ceil(player.volume() * 100), null);
});
player.on('waiting', function () {
if (player.playbackRate() > 1 && player.liveTracker.isLive() && player.liveTracker.atLiveEdge()) {
console.info('Player has caught up to source, resetting playbackRate');
player.playbackRate(1);
}
});
if (video_data.premiere_timestamp && Math.round(new Date() / 1000) < video_data.premiere_timestamp) {
player.getChild('bigPlayButton').hide();
}
if (video_data.params.save_player_pos) {
const url = new URL(location);
const hasTimeParam = url.searchParams.has('t');
const rememberedTime = get_video_time();
let lastUpdated = 0;
if(!hasTimeParam) {
if (rememberedTime >= video_data.length_seconds - 20)
set_seconds_after_start(0);
else
set_seconds_after_start(rememberedTime);
}
player.on('timeupdate', function () {
const raw = player.currentTime();
const time = Math.floor(raw);
if(lastUpdated !== time && raw <= video_data.length_seconds - 15) {
save_video_time(time);
lastUpdated = time;
}
});
}
else remove_all_video_times();
if (video_data.params.autoplay) {
var bpb = player.getChild('bigPlayButton');
bpb.hide();
player.ready(function () {
new Promise(function (resolve, reject) {
setTimeout(function () {resolve(1);}, 1);
}).then(function (result) {
var promise = player.play();
if (promise !== undefined) {
promise.then(function () {
}).catch(function (error) {
bpb.show();
});
}
});
});
}
if (!video_data.params.listen && video_data.params.quality === 'dash') {
player.httpSourceSelector();
if (video_data.params.quality_dash !== 'auto') {
player.ready(function () {
player.on('loadedmetadata', function () {
const qualityLevels = Array.from(player.qualityLevels()).sort(function (a, b) {return a.height - b.height;});
let targetQualityLevel;
switch (video_data.params.quality_dash) {
case 'best':
targetQualityLevel = qualityLevels.length - 1;
break;
case 'worst':
targetQualityLevel = 0;
break;
default:
const targetHeight = parseInt(video_data.params.quality_dash);
for (let i = 0; i < qualityLevels.length; i++) {
if (qualityLevels[i].height <= targetHeight)
targetQualityLevel = i;
else
break;
}
}
qualityLevels.forEach(function (level, index) {
level.enabled = (index === targetQualityLevel);
});
});
});
}
}
player.vttThumbnails({
src: '/api/v1/storyboards/' + video_data.id + '?height=90',
showTimestamp: true
});
// Enable annotations
if (!video_data.params.listen && video_data.params.annotations) {
addEventListener('load', function (e) {
addEventListener('__ar_annotation_click', function (e) {
const url = e.detail.url,
target = e.detail.target,
seconds = e.detail.seconds;
var path = new URL(url);
if (path.href.startsWith('https://www.youtube.com/watch?') && seconds) {
path.search += '&t=' + seconds;
}
path = path.pathname + path.search;
if (target === 'current') {
location.href = path;
} else if (target === 'new') {
open(path, '_blank');
}
});
helpers.xhr('GET', '/api/v1/annotations/' + video_data.id, {
responseType: 'text',
timeout: 60000
}, {
on200: function (response) {
var video_container = document.getElementById('player');
videojs.registerPlugin('youtubeAnnotationsPlugin', youtubeAnnotationsPlugin);
if (player.paused()) {
player.one('play', function (event) {
player.youtubeAnnotationsPlugin({ annotationXml: response, videoContainer: video_container });
});
} else {
player.youtubeAnnotationsPlugin({ annotationXml: response, videoContainer: video_container });
}
}
});
});
}
function change_volume(delta) {
const curVolume = player.volume();
let newVolume = curVolume + delta;
newVolume = helpers.clamp(newVolume, 0, 1);
player.volume(newVolume);
}
function toggle_muted() {
player.muted(!player.muted());
}
function skip_seconds(delta) {
const duration = player.duration();
const curTime = player.currentTime();
let newTime = curTime + delta;
newTime = helpers.clamp(newTime, 0, duration);
player.currentTime(newTime);
}
function set_seconds_after_start(delta) {
const start = video_data.params.video_start;
player.currentTime(start + delta);
}
function save_video_time(seconds) {
const all_video_times = get_all_video_times();
all_video_times[video_data.id] = seconds;
helpers.storage.set(save_player_pos_key, all_video_times);
}
function get_video_time() {
return get_all_video_times()[video_data.id] || 0;
}
function get_all_video_times() {
return helpers.storage.get(save_player_pos_key) || {};
}
function remove_all_video_times() {
helpers.storage.remove(save_player_pos_key);
}
function set_time_percent(percent) {
const duration = player.duration();
const newTime = duration * (percent / 100);
player.currentTime(newTime);
}
function play() { player.play(); }
function pause() { player.pause(); }
function stop() { player.pause(); player.currentTime(0); }
function toggle_play() { player.paused() ? play() : pause(); }
const toggle_captions = (function () {
let toggledTrack = null;
function bindChange(onOrOff) {
player.textTracks()[onOrOff]('change', function (e) {
toggledTrack = null;
});
}
// Wrapper function to ignore our own emitted events and only listen
// to events emitted by Video.js on click on the captions menu items.
function setMode(track, mode) {
bindChange('off');
track.mode = mode;
setTimeout(function () {
bindChange('on');
}, 0);
}
bindChange('on');
return function () {
if (toggledTrack !== null) {
if (toggledTrack.mode !== 'showing') {
setMode(toggledTrack, 'showing');
} else {
setMode(toggledTrack, 'disabled');
}
toggledTrack = null;
return;
}
// Used as a fallback if no captions are currently active.
// TODO: Make this more intelligent by e.g. relying on browser language.
let fallbackCaptionsTrack = null;
const tracks = player.textTracks();
for (let i = 0; i < tracks.length; i++) {
const track = tracks[i];
if (track.kind !== 'captions') continue;
if (fallbackCaptionsTrack === null) {
fallbackCaptionsTrack = track;
}
if (track.mode === 'showing') {
setMode(track, 'disabled');
toggledTrack = track;
return;
}
}
// Fallback if no captions are currently active.
if (fallbackCaptionsTrack !== null) {
setMode(fallbackCaptionsTrack, 'showing');
toggledTrack = fallbackCaptionsTrack;
}
};
})();
function toggle_fullscreen() {
player.isFullscreen() ? player.exitFullscreen() : player.requestFullscreen();
}
function increase_playback_rate(steps) {
const maxIndex = options.playbackRates.length - 1;
const curIndex = options.playbackRates.indexOf(player.playbackRate());
let newIndex = curIndex + steps;
newIndex = helpers.clamp(newIndex, 0, maxIndex);
player.playbackRate(options.playbackRates[newIndex]);
}
addEventListener('keydown', function (e) {
if (e.target.tagName.toLowerCase() === 'input') {
// Ignore input when focus is on certain elements, e.g. form fields.
return;
}
// See https://github.com/ctd1500/videojs-hotkeys/blob/bb4a158b2e214ccab87c2e7b95f42bc45c6bfd87/videojs.hotkeys.js#L310-L313
const isPlayerFocused = false
|| e.target === document.querySelector('.video-js')
|| e.target === document.querySelector('.vjs-tech')
|| e.target === document.querySelector('.iframeblocker')
|| e.target === document.querySelector('.vjs-control-bar')
;
let action = null;
const code = e.keyCode;
const decoratedKey =
e.key
+ (e.altKey ? '+alt' : '')
+ (e.ctrlKey ? '+ctrl' : '')
+ (e.metaKey ? '+meta' : '')
;
switch (decoratedKey) {
case ' ':
case 'k':
case 'MediaPlayPause':
action = toggle_play;
break;
case 'MediaPlay': action = play; break;
case 'MediaPause': action = pause; break;
case 'MediaStop': action = stop; break;
case 'ArrowUp':
if (isPlayerFocused) action = change_volume.bind(this, 0.1);
break;
case 'ArrowDown':
if (isPlayerFocused) action = change_volume.bind(this, -0.1);
break;
case 'm':
action = toggle_muted;
break;
case 'ArrowRight':
case 'MediaFastForward':
action = skip_seconds.bind(this, 5 * player.playbackRate());
break;
case 'ArrowLeft':
case 'MediaTrackPrevious':
action = skip_seconds.bind(this, -5 * player.playbackRate());
break;
case 'l':
action = skip_seconds.bind(this, 10 * player.playbackRate());
break;
case 'j':
action = skip_seconds.bind(this, -10 * player.playbackRate());
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
// Ignore numpad numbers
if (code > 57) break;
const percent = (code - 48) * 10;
action = set_time_percent.bind(this, percent);
break;
case 'c': action = toggle_captions; break;
case 'f': action = toggle_fullscreen; break;
case 'N':
case 'MediaTrackNext':
action = next_video;
break;
case 'P':
case 'MediaTrackPrevious':
// TODO: Add support to play back previous video.
break;
// TODO: More precise step. Now FPS is taken equal to 29.97
// Common FPS: https://forum.videohelp.com/threads/81868#post323588
// Possible solution is new HTMLVideoElement.requestVideoFrameCallback() https://wicg.github.io/video-rvfc/
case ',': action = function () { pause(); skip_seconds(-1/29.97); }; break;
case '.': action = function () { pause(); skip_seconds( 1/29.97); }; break;
case '>': action = increase_playback_rate.bind(this, 1); break;
case '<': action = increase_playback_rate.bind(this, -1); break;
default:
console.info('Unhandled key down event: %s:', decoratedKey, e);
break;
}
if (action) {
e.preventDefault();
action();
}
}, false);
// Add support for controlling the player volume by scrolling over it. Adapted from
// https://github.com/ctd1500/videojs-hotkeys/blob/bb4a158b2e214ccab87c2e7b95f42bc45c6bfd87/videojs.hotkeys.js#L292-L328
(function () {
const pEl = document.getElementById('player');
var volumeHover = false;
var volumeSelector = pEl.querySelector('.vjs-volume-menu-button') || pEl.querySelector('.vjs-volume-panel');
if (volumeSelector !== null) {
volumeSelector.onmouseover = function () { volumeHover = true; };
volumeSelector.onmouseout = function () { volumeHover = false; };
}
function mouseScroll(event) {
// When controls are disabled, hotkeys will be disabled as well
if (!player.controls() || !volumeHover) return;
event.preventDefault();
var wheelMove = event.wheelDelta || -event.detail;
var volumeSign = Math.sign(wheelMove);
change_volume(volumeSign * 0.05); // decrease/increase by 5%
}
player.on('mousewheel', mouseScroll);
player.on('DOMMouseScroll', mouseScroll);
}());
// Since videojs-share can sometimes be blocked, we defer it until last
if (player.share) player.share(shareOptions);
// show the preferred caption by default
if (player_data.preferred_caption_found) {
player.ready(function () {
if (!video_data.params.listen && video_data.params.quality === 'dash') {
// play.textTracks()[0] on DASH mode is showing some debug messages
player.textTracks()[1].mode = 'showing';
} else {
player.textTracks()[0].mode = 'showing';
}
});
}
// Safari audio double duration fix
if (navigator.vendor === 'Apple Computer, Inc.' && video_data.params.listen) {
player.on('loadedmetadata', function () {
player.on('timeupdate', function () {
if (player.remainingTime() < player.duration() / 2 && player.remainingTime() >= 2) {
player.currentTime(player.duration() - 1);
}
});
});
}
// Safari screen timeout on looped video playback fix
if (navigator.vendor === 'Apple Computer, Inc.' && !video_data.params.listen && video_data.params.video_loop) {
player.loop(false);
player.ready(function () {
player.on('ended', function () {
player.currentTime(0);
player.play();
});
});
}
// Watch on Invidious link
if (location.pathname.startsWith('/embed/')) {
const Button = videojs.getComponent('Button');
let watch_on_invidious_button = new Button(player);
// Create hyperlink for current instance
var redirect_element = document.createElement('a');
redirect_element.setAttribute('href', location.pathname.replace('/embed/', '/watch?v='));
redirect_element.appendChild(document.createTextNode('Invidious'));
watch_on_invidious_button.el().appendChild(redirect_element);
watch_on_invidious_button.addClass('watch-on-invidious');
var cb = player.getChild('ControlBar');
cb.addChild(watch_on_invidious_button);
}
addEventListener('DOMContentLoaded', function () {
// Save time during redirection on another instance
const changeInstanceLink = document.querySelector('#watch-on-another-invidious-instance > a');
if (changeInstanceLink) changeInstanceLink.addEventListener('click', function () {
changeInstanceLink.href = addCurrentTimeToURL(changeInstanceLink.href);
});
});

View File

@ -0,0 +1,48 @@
'use strict';
var playlist_data = JSON.parse(document.getElementById('playlist_data').textContent);
var payload = 'csrf_token=' + playlist_data.csrf_token;
function add_playlist_video(target) {
var select = target.parentNode.children[0].children[1];
var option = select.children[select.selectedIndex];
var url = '/playlist_ajax?action_add_video=1&redirect=false' +
'&video_id=' + target.getAttribute('data-id') +
'&playlist_id=' + option.getAttribute('data-plid');
helpers.xhr('POST', url, {payload: payload}, {
on200: function (response) {
option.textContent = '✓' + option.textContent;
}
});
}
function add_playlist_item(target) {
var tile = target.parentNode.parentNode.parentNode.parentNode.parentNode;
tile.style.display = 'none';
var url = '/playlist_ajax?action_add_video=1&redirect=false' +
'&video_id=' + target.getAttribute('data-id') +
'&playlist_id=' + target.getAttribute('data-plid');
helpers.xhr('POST', url, {payload: payload}, {
onNon200: function (xhr) {
tile.style.display = '';
}
});
}
function remove_playlist_item(target) {
var tile = target.parentNode.parentNode.parentNode.parentNode.parentNode;
tile.style.display = 'none';
var url = '/playlist_ajax?action_remove_video=1&redirect=false' +
'&set_video_id=' + target.getAttribute('data-index') +
'&playlist_id=' + target.getAttribute('data-plid');
helpers.xhr('POST', url, {payload: payload}, {
onNon200: function (xhr) {
tile.style.display = '';
}
});
}

3
assets/js/post.js Normal file
View File

@ -0,0 +1,3 @@
addEventListener('load', function (e) {
get_youtube_comments();
});

File diff suppressed because one or more lines are too long

200
assets/js/sse.js Normal file
View File

@ -0,0 +1,200 @@
/**
* Copyright (C) 2016 Maxime Petazzoni <maxime.petazzoni@bulix.org>.
* All rights reserved.
*/
var SSE = function (url, options) {
if (!(this instanceof SSE)) {
return new SSE(url, options);
}
this.INITIALIZING = -1;
this.CONNECTING = 0;
this.OPEN = 1;
this.CLOSED = 2;
this.url = url;
options = options || {};
this.headers = options.headers || {};
this.payload = options.payload !== undefined ? options.payload : '';
this.method = options.method || (this.payload && 'POST' || 'GET');
this.FIELD_SEPARATOR = ':';
this.listeners = {};
this.xhr = null;
this.readyState = this.INITIALIZING;
this.progress = 0;
this.chunk = '';
this.addEventListener = function(type, listener) {
if (this.listeners[type] === undefined) {
this.listeners[type] = [];
}
if (this.listeners[type].indexOf(listener) === -1) {
this.listeners[type].push(listener);
}
};
this.removeEventListener = function(type, listener) {
if (this.listeners[type] === undefined) {
return;
}
var filtered = [];
this.listeners[type].forEach(function(element) {
if (element !== listener) {
filtered.push(element);
}
});
if (filtered.length === 0) {
delete this.listeners[type];
} else {
this.listeners[type] = filtered;
}
};
this.dispatchEvent = function(e) {
if (!e) {
return true;
}
e.source = this;
var onHandler = 'on' + e.type;
if (this.hasOwnProperty(onHandler)) {
this[onHandler].call(this, e);
if (e.defaultPrevented) {
return false;
}
}
if (this.listeners[e.type]) {
return this.listeners[e.type].every(function(callback) {
callback(e);
return !e.defaultPrevented;
});
}
return true;
};
this._setReadyState = function (state) {
var event = new CustomEvent('readystatechange');
event.readyState = state;
this.readyState = state;
this.dispatchEvent(event);
};
this._onStreamFailure = function(e) {
this.dispatchEvent(new CustomEvent('error'));
this.close();
}
this._onStreamProgress = function(e) {
if (this.xhr.status !== 200 && this.readyState !== this.CLOSED) {
this._onStreamFailure(e);
return;
}
if (this.readyState == this.CONNECTING) {
this.dispatchEvent(new CustomEvent('open'));
this._setReadyState(this.OPEN);
}
var data = this.xhr.responseText.substring(this.progress);
this.progress += data.length;
data.split(/(\r\n|\r|\n){2}/g).forEach(function(part) {
if (part.trim().length === 0) {
this.dispatchEvent(this._parseEventChunk(this.chunk.trim()));
this.chunk = '';
} else {
this.chunk += part;
}
}.bind(this));
};
this._onStreamLoaded = function(e) {
this._onStreamProgress(e);
// Parse the last chunk.
this.dispatchEvent(this._parseEventChunk(this.chunk));
this.chunk = '';
};
/**
* Parse a received SSE event chunk into a constructed event object.
*/
this._parseEventChunk = function(chunk) {
if (!chunk || chunk.length === 0) {
return null;
}
var e = {'id': null, 'retry': null, 'data': '', 'event': 'message'};
chunk.split(/\n|\r\n|\r/).forEach(function(line) {
line = line.trimRight();
var index = line.indexOf(this.FIELD_SEPARATOR);
if (index <= 0) {
// Line was either empty, or started with a separator and is a comment.
// Either way, ignore.
return;
}
var field = line.substring(0, index);
if (!(field in e)) {
return;
}
var value = line.substring(index + 1).trimLeft();
if (field === 'data') {
e[field] += value;
} else {
e[field] = value;
}
}.bind(this));
var event = new CustomEvent(e.event);
event.data = e.data;
event.id = e.id;
return event;
};
this._checkStreamClosed = function() {
if (this.xhr.readyState === XMLHttpRequest.DONE) {
this._setReadyState(this.CLOSED);
}
};
this.stream = function() {
this._setReadyState(this.CONNECTING);
this.xhr = new XMLHttpRequest();
this.xhr.addEventListener('progress', this._onStreamProgress.bind(this));
this.xhr.addEventListener('load', this._onStreamLoaded.bind(this));
this.xhr.addEventListener('readystatechange', this._checkStreamClosed.bind(this));
this.xhr.addEventListener('error', this._onStreamFailure.bind(this));
this.xhr.addEventListener('abort', this._onStreamFailure.bind(this));
this.xhr.open(this.method, this.url);
for (var header in this.headers) {
this.xhr.setRequestHeader(header, this.headers[header]);
}
this.xhr.send(this.payload);
};
this.close = function() {
if (this.readyState === this.CLOSED) {
return;
}
this.xhr.abort();
this.xhr = null;
this._setReadyState(this.CLOSED);
};
};
// Export our SSE module for npm.js
if (typeof exports !== 'undefined') {
exports.SSE = SSE;
}

View File

@ -0,0 +1,44 @@
'use strict';
var subscribe_data = JSON.parse(document.getElementById('subscribe_data').textContent);
var payload = 'csrf_token=' + subscribe_data.csrf_token;
var subscribe_button = document.getElementById('subscribe');
subscribe_button.parentNode.action = 'javascript:void(0)';
if (subscribe_button.getAttribute('data-type') === 'subscribe') {
subscribe_button.onclick = subscribe;
} else {
subscribe_button.onclick = unsubscribe;
}
function subscribe() {
var fallback = subscribe_button.innerHTML;
subscribe_button.onclick = unsubscribe;
subscribe_button.innerHTML = '<b>' + subscribe_data.unsubscribe_text + ' | ' + subscribe_data.sub_count_text + '</b>';
var url = '/subscription_ajax?action_create_subscription_to_channel=1&redirect=false' +
'&c=' + subscribe_data.ucid;
helpers.xhr('POST', url, {payload: payload, retries: 5, entity_name: 'subscribe request'}, {
onNon200: function (xhr) {
subscribe_button.onclick = subscribe;
subscribe_button.innerHTML = fallback;
}
});
}
function unsubscribe() {
var fallback = subscribe_button.innerHTML;
subscribe_button.onclick = subscribe;
subscribe_button.innerHTML = '<b>' + subscribe_data.subscribe_text + ' | ' + subscribe_data.sub_count_text + '</b>';
var url = '/subscription_ajax?action_remove_subscriptions=1&redirect=false' +
'&c=' + subscribe_data.ucid;
helpers.xhr('POST', url, {payload: payload, retries: 5, entity_name: 'unsubscribe request'}, {
onNon200: function (xhr) {
subscribe_button.onclick = unsubscribe;
subscribe_button.innerHTML = fallback;
}
});
}

46
assets/js/themes.js Normal file
View File

@ -0,0 +1,46 @@
'use strict';
var toggle_theme = document.getElementById('toggle_theme');
toggle_theme.href = 'javascript:void(0)';
const STORAGE_KEY_THEME = 'dark_mode';
const THEME_DARK = 'dark';
const THEME_LIGHT = 'light';
// TODO: theme state controlled by system
toggle_theme.addEventListener('click', function () {
const isDarkTheme = helpers.storage.get(STORAGE_KEY_THEME) === THEME_DARK;
const newTheme = isDarkTheme ? THEME_LIGHT : THEME_DARK;
setTheme(newTheme);
helpers.storage.set(STORAGE_KEY_THEME, newTheme);
helpers.xhr('GET', '/toggle_theme?redirect=false', {}, {});
});
/** @param {THEME_DARK|THEME_LIGHT} theme */
function setTheme(theme) {
// By default body element has .no-theme class that uses OS theme via CSS @media rules
// It rewrites using hard className below
if (theme === THEME_DARK) {
toggle_theme.children[0].className = 'icon ion-ios-sunny';
document.body.className = 'dark-theme';
} else if (theme === THEME_LIGHT) {
toggle_theme.children[0].className = 'icon ion-ios-moon';
document.body.className = 'light-theme';
} else {
document.body.className = 'no-theme';
}
}
// Handles theme change event caused by other tab
addEventListener('storage', function (e) {
if (e.key === STORAGE_KEY_THEME)
setTheme(helpers.storage.get(STORAGE_KEY_THEME));
});
// Set theme from preferences on page load
addEventListener('DOMContentLoaded', function () {
const prefTheme = document.getElementById('dark_mode_pref').textContent;
if (prefTheme) {
setTheme(prefTheme);
helpers.storage.set(STORAGE_KEY_THEME, prefTheme);
}
});

File diff suppressed because one or more lines are too long

193
assets/js/watch.js Normal file
View File

@ -0,0 +1,193 @@
'use strict';
function toggle_parent(target) {
var body = target.parentNode.parentNode.children[1];
if (body.style.display === 'none') {
target.textContent = '[ ]';
body.style.display = '';
} else {
target.textContent = '[ + ]';
body.style.display = 'none';
}
}
function swap_comments(event) {
var source = event.target.getAttribute('data-comments');
if (source === 'youtube') {
get_youtube_comments();
} else if (source === 'reddit') {
get_reddit_comments();
}
}
var continue_button = document.getElementById('continue');
if (continue_button) {
continue_button.onclick = continue_autoplay;
}
function next_video() {
var url = new URL('https://example.com/watch?v=' + video_data.next_video);
if (video_data.params.autoplay || video_data.params.continue_autoplay)
url.searchParams.set('autoplay', '1');
if (video_data.params.listen !== video_data.preferences.listen)
url.searchParams.set('listen', video_data.params.listen);
if (video_data.params.speed !== video_data.preferences.speed)
url.searchParams.set('speed', video_data.params.speed);
if (video_data.params.local !== video_data.preferences.local)
url.searchParams.set('local', video_data.params.local);
url.searchParams.set('continue', '1');
location.assign(url.pathname + url.search);
}
function continue_autoplay(event) {
if (event.target.checked) {
player.on('ended', next_video);
} else {
player.off('ended');
}
}
function get_playlist(plid) {
var playlist = document.getElementById('playlist');
playlist.innerHTML = spinnerHTMLwithHR;
var plid_url;
if (plid.startsWith('RD')) {
plid_url = '/api/v1/mixes/' + plid +
'?continuation=' + video_data.id +
'&format=html&hl=' + video_data.preferences.locale;
} else {
plid_url = '/api/v1/playlists/' + plid +
'?index=' + video_data.index +
'&continuation=' + video_data.id +
'&format=html&hl=' + video_data.preferences.locale;
}
helpers.xhr('GET', plid_url, {retries: 5, entity_name: 'playlist'}, {
on200: function (response) {
playlist.innerHTML = response.playlistHtml;
if (!response.nextVideo) return;
var nextVideo = document.getElementById(response.nextVideo);
nextVideo.parentNode.parentNode.scrollTop = nextVideo.offsetTop;
player.on('ended', function () {
var url = new URL('https://example.com/watch?v=' + response.nextVideo);
url.searchParams.set('list', plid);
if (!plid.startsWith('RD'))
url.searchParams.set('index', response.index);
if (video_data.params.autoplay || video_data.params.continue_autoplay)
url.searchParams.set('autoplay', '1');
if (video_data.params.listen !== video_data.preferences.listen)
url.searchParams.set('listen', video_data.params.listen);
if (video_data.params.speed !== video_data.preferences.speed)
url.searchParams.set('speed', video_data.params.speed);
if (video_data.params.local !== video_data.preferences.local)
url.searchParams.set('local', video_data.params.local);
location.assign(url.pathname + url.search);
});
},
onNon200: function (xhr) {
playlist.innerHTML = '';
document.getElementById('continue').style.display = '';
},
onError: function (xhr) {
playlist.innerHTML = spinnerHTMLwithHR;
},
onTimeout: function (xhr) {
playlist.innerHTML = spinnerHTMLwithHR;
}
});
}
function get_reddit_comments() {
var comments = document.getElementById('comments');
var fallback = comments.innerHTML;
comments.innerHTML = spinnerHTML;
var url = '/api/v1/comments/' + video_data.id +
'?source=reddit&format=html' +
'&hl=' + video_data.preferences.locale;
var onNon200 = function (xhr) { comments.innerHTML = fallback; };
if (video_data.params.comments[1] === 'youtube')
onNon200 = function (xhr) {};
helpers.xhr('GET', url, {retries: 5, entity_name: ''}, {
on200: function (response) {
comments.innerHTML = ' \
<div> \
<h3> \
<a href="javascript:void(0)">[ ]</a> \
{title} \
</h3> \
<p> \
<b> \
<a href="javascript:void(0)" data-comments="youtube"> \
{youtubeCommentsText} \
</a> \
</b> \
</p> \
<b> \
<a rel="noopener" target="_blank" href="https://reddit.com{permalink}">{redditPermalinkText}</a> \
</b> \
</div> \
<div>{contentHtml}</div> \
<hr>'.supplant({
title: response.title,
youtubeCommentsText: video_data.youtube_comments_text,
redditPermalinkText: video_data.reddit_permalink_text,
permalink: response.permalink,
contentHtml: response.contentHtml
});
comments.children[0].children[0].children[0].onclick = toggle_comments;
comments.children[0].children[1].children[0].onclick = swap_comments;
},
onNon200: onNon200, // declared above
});
}
if (video_data.play_next) {
player.on('ended', function () {
var url = new URL('https://example.com/watch?v=' + video_data.next_video);
if (video_data.params.autoplay || video_data.params.continue_autoplay)
url.searchParams.set('autoplay', '1');
if (video_data.params.listen !== video_data.preferences.listen)
url.searchParams.set('listen', video_data.params.listen);
if (video_data.params.speed !== video_data.preferences.speed)
url.searchParams.set('speed', video_data.params.speed);
if (video_data.params.local !== video_data.preferences.local)
url.searchParams.set('local', video_data.params.local);
url.searchParams.set('continue', '1');
location.assign(url.pathname + url.search);
});
}
addEventListener('load', function (e) {
if (video_data.plid)
get_playlist(video_data.plid);
if (video_data.params.comments[0] === 'youtube') {
get_youtube_comments();
} else if (video_data.params.comments[0] === 'reddit') {
get_reddit_comments();
} else if (video_data.params.comments[1] === 'youtube') {
get_youtube_comments();
} else if (video_data.params.comments[1] === 'reddit') {
get_reddit_comments();
} else {
var comments = document.getElementById('comments');
comments.innerHTML = '';
}
});

View File

@ -0,0 +1,24 @@
'use strict';
var save_player_pos_key = 'save_player_pos';
function get_all_video_times() {
return helpers.storage.get(save_player_pos_key) || {};
}
document.querySelectorAll('.watched-indicator').forEach(function (indicator) {
var watched_part = get_all_video_times()[indicator.dataset.id];
var total = parseInt(indicator.dataset.length, 10);
if (watched_part === undefined) {
watched_part = total;
}
var percentage = Math.round((watched_part / total) * 100);
if (percentage < 5) {
percentage = 5;
}
if (percentage > 90) {
percentage = 100;
}
indicator.style.width = percentage + '%';
});

View File

@ -0,0 +1,34 @@
'use strict';
var watched_data = JSON.parse(document.getElementById('watched_data').textContent);
var payload = 'csrf_token=' + watched_data.csrf_token;
function mark_watched(target) {
var tile = target.parentNode.parentNode.parentNode.parentNode.parentNode;
tile.style.display = 'none';
var url = '/watch_ajax?action_mark_watched=1&redirect=false' +
'&id=' + target.getAttribute('data-id');
helpers.xhr('POST', url, {payload: payload}, {
onNon200: function (xhr) {
tile.style.display = '';
}
});
}
function mark_unwatched(target) {
var tile = target.parentNode.parentNode.parentNode.parentNode.parentNode;
tile.style.display = 'none';
var count = document.getElementById('count');
count.textContent--;
var url = '/watch_ajax?action_mark_unwatched=1&redirect=false' +
'&id=' + target.getAttribute('data-id');
helpers.xhr('POST', url, {payload: payload}, {
onNon200: function (xhr) {
count.textContent++;
tile.style.display = '';
}
});
}

BIN
assets/mstile-150x150.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@ -1,3 +1,2 @@
User-agent: *
Disallow: /search
Disallow: /login
Disallow: /

View File

@ -0,0 +1,35 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="607.000000pt" height="607.000000pt" viewBox="0 0 607.000000 607.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.11, written by Peter Selinger 2001-2013
</metadata>
<g transform="translate(0.000000,607.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M2770 5949 c-775 -68 -1523 -436 -2020 -994 -491 -551 -743 -1200
-743 -1915 -1 -466 100 -884 312 -1296 146 -284 307 -502 540 -734 172 -171
264 -247 461 -378 415 -277 905 -452 1404 -501 161 -16 508 -14 666 4 914 105
1715 590 2213 1342 306 462 467 995 467 1553 0 268 -22 448 -85 699 -94 378
-293 778 -541 1091 -156 196 -449 465 -665 611 -405 272 -894 453 -1379 509
-130 15 -502 21 -630 9z m475 -139 c527 -39 1012 -203 1435 -485 176 -117 274
-198 436 -360 315 -313 518 -633 664 -1045 52 -148 112 -399 131 -555 19 -150
17 -533 -4 -684 -102 -730 -489 -1382 -1092 -1836 -332 -250 -716 -425 -1135
-519 -348 -77 -784 -87 -1150 -25 -1214 205 -2177 1157 -2350 2324 -56 377
-30 801 70 1148 151 520 427 950 850 1326 566 502 1368 768 2145 711z"/>
<path d="M2787 4669 c-124 -65 -123 -255 3 -319 86 -44 196 -16 247 62 58 87
26 211 -67 258 -51 26 -132 26 -183 -1z"/>
<path d="M2882 4108 c-12 -16 -63 -166 -102 -303 -30 -104 -101 -350 -165
-565 -20 -69 -58 -199 -85 -290 -26 -91 -64 -221 -85 -290 -20 -69 -58 -199
-85 -290 -26 -91 -64 -221 -85 -290 -20 -69 -57 -195 -81 -280 -59 -207 -93
-299 -115 -310 -10 -6 -35 -10 -56 -10 -73 0 -84 -8 -81 -54 l3 -41 228 -3
228 -2 -3 47 -3 48 -73 3 c-66 3 -74 5 -84 27 -13 28 0 104 37 225 13 41 47
156 75 255 28 99 66 230 85 290 18 61 56 191 85 290 28 99 66 230 85 290 18
61 56 191 85 290 85 297 123 419 131 429 5 5 17 -11 28 -35 10 -24 192 -393
403 -819 211 -426 447 -902 523 -1058 l139 -282 168 0 c92 0 168 4 168 8 0 4
-75 158 -166 342 -588 1183 -969 1958 -1033 2100 -29 63 -69 151 -89 195 -44
95 -58 110 -80 83z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

21
assets/site.webmanifest Normal file
View File

@ -0,0 +1,21 @@
{
"name": "Invidious",
"short_name": "Invidious",
"icons": [
{
"src": "/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#575757",
"background_color": "#575757",
"display": "standalone",
"description": "An alternative front-end to YouTube",
"start_url": "/"
}

4
assets/videojs/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
# Ignore everything in this directory
*
# Except this file
!.gitignore

911
config/config.example.yml Normal file
View File

@ -0,0 +1,911 @@
#########################################
#
# Database and other external servers
#
#########################################
##
## Database configuration with separate parameters.
## This setting is MANDATORY, unless 'database_url' is used.
##
db:
user: kemal
password: kemal
host: localhost
port: 5432
dbname: invidious
##
## Database configuration using a single URI. This is an
## alternative to the 'db' parameter above. If both forms
## are used, then only database_url is used.
## This setting is MANDATORY, unless 'db' is used.
##
## Note: The 'database_url' setting allows the use of UNIX
## sockets. To do so, remove the IP address (or FQDN) and port
## and append the 'host' parameter. E.g:
## postgres://kemal:kemal@/invidious?host=/var/run/postgresql
##
## Accepted values: a postgres:// URI
## Default: postgres://kemal:kemal@localhost:5432/invidious
##
#database_url: postgres://kemal:kemal@localhost:5432/invidious
##
## Enable automatic table integrity check. This will create
## the required tables and columns if anything is missing.
##
## Accepted values: true, false
## Default: false
##
#check_tables: false
##
## Path to an external signature resolver, used to emulate
## the Youtube client's Javascript. If no such server is
## available, some videos will not be playable.
##
## When this setting is commented out, no external
## resolver will be used.
##
## Accepted values: a path to a UNIX socket or "<IP>:<Port>"
## Default: <none>
##
#signature_server:
#########################################
#
# Server config
#
#########################################
# -----------------------------
# Network (inbound)
# -----------------------------
##
## Port to listen on for incoming connections.
##
## Note: Ports lower than 1024 requires either root privileges
## (not recommended) or the "CAP_NET_BIND_SERVICE" capability
## (See https://stackoverflow.com/a/414258 and `man capabilities`)
##
## Accepted values: 1-65535
## Default: 3000
##
#port: 3000
##
## When the invidious instance is behind a proxy, and the proxy
## listens on a different port than the instance does, this lets
## invidious know about it. This is used to craft absolute URLs
## to the instance (e.g in the API).
##
## Note: This setting is MANDATORY if invidious is behind a
## reverse proxy.
##
## Accepted values: 1-65535
## Default: <none>
##
#external_port:
##
## Interface address to listen on for incoming connections.
##
## Accepted values: a valid IPv4 or IPv6 address.
## default: 0.0.0.0 (listen on all interfaces)
##
#host_binding: 0.0.0.0
##
## Domain name under which this instance is hosted. This is
## used to craft absolute URLs to the instance (e.g in the API).
## The domain MUST be defined if your instance is accessed from
## a domain name (like 'example.com').
##
## Accepted values: a fully qualified domain name (FQDN)
## Default: <none>
##
domain:
##
## Tell Invidious that it is behind a proxy that provides only
## HTTPS, so all links must use the https:// scheme. This
## setting MUST be set to true if invidious is behind a
## reverse proxy serving HTTPs.
##
## Accepted values: true, false
## Default: false
##
https_only: false
##
## Enable/Disable 'Strict-Transport-Security'. Make sure that
## the domain specified under 'domain' is served securely.
##
## Accepted values: true, false
## Default: true
##
#hsts: true
# -----------------------------
# Network (outbound)
# -----------------------------
##
## Disable proxying server-wide. Can be disable as a whole, or
## only for a single function.
##
## Accepted values: true, false, dash, livestreams, downloads, local
## Default: false
##
#disable_proxy: false
##
## Size of the HTTP pool used to connect to youtube. Each
## domain ('youtube.com', 'ytimg.com', ...) has its own pool.
##
## Accepted values: a positive integer
## Default: 100
##
#pool_size: 100
##
## Additional cookies to be sent when requesting the youtube API.
##
## Accepted values: a string in the format "name1=value1; name2=value2..."
## Default: <none>
##
#cookies:
##
## Force connection to youtube over a specific IP family.
##
## Note: This may sometimes resolve issues involving rate-limiting.
## See https://github.com/ytdl-org/youtube-dl/issues/21729.
##
## Accepted values: ipv4, ipv6
## Default: <none>
##
#force_resolve:
##
## Use Innertube's transcripts API instead of timedtext for closed captions
##
## Useful for larger instances as InnerTube is **not ratelimited**. See https://github.com/iv-org/invidious/issues/2567
##
## Subtitle experience may differ slightly on Invidious.
##
## Accepted values: true, false
## Default: false
##
# use_innertube_for_captions: false
##
## Send Google session informations. This is useful when Invidious is blocked
## by the message "This helps protect our community."
## See https://github.com/iv-org/invidious/issues/4734.
##
## Warning: These strings gives much more identifiable information to Google!
##
## Accepted values: String
## Default: <none>
##
# po_token: ""
# visitor_data: ""
# -----------------------------
# Logging
# -----------------------------
##
## Path to log file. Can be absolute or relative to the invidious
## binary. This is overridden if "-o OUTPUT" or "--output=OUTPUT"
## are passed on the command line.
##
## Accepted values: a filesystem path or 'STDOUT'
## Default: STDOUT
##
#output: STDOUT
##
## Logging Verbosity. This is overridden if "-l LEVEL" or
## "--log-level=LEVEL" are passed on the command line.
##
## Accepted values: All, Trace, Debug, Info, Warn, Error, Fatal, Off
## Default: Info
##
#log_level: Info
# -----------------------------
# Features
# -----------------------------
##
## Enable/Disable the "Popular" tab on the main page.
##
## Accepted values: true, false
## Default: true
##
#popular_enabled: true
##
## Enable/Disable statstics (available at /api/v1/stats).
## The following data is available:
## - Software name ("invidious") and version+branch (same data as
## displayed in the footer, e.g: "2021.05.13-75e5b49" / "master")
## - The value of the 'registration_enabled' config (true/false)
## - Number of currently registered users
## - Number of registered users who connected in the last month
## - Number of registered users who connected in the last 6 months
## - Timestamp of the last server restart
## - Timestamp of the last "Channel Refresh" job execution
##
## Warning: This setting MUST be set to true if you plan to run
## a public instance. It is used by api.invidious.io to refresh
## your instance's status.
##
## Accepted values: true, false
## Default: false
##
#statistics_enabled: false
# -----------------------------
# Users and accounts
# -----------------------------
##
## Allow/Forbid Invidious (local) account creation. Invidious
## accounts allow users to subscribe to channels and to create
## playlists without a Google account.
##
## Accepted values: true, false
## Default: true
##
#registration_enabled: true
##
## Allow/Forbid users to log-in.
##
## Accepted values: true, false
## Default: true
##
#login_enabled: true
##
## Enable/Disable the captcha challenge on the login page.
##
## Note: this is a basic captcha challenge that doesn't
## depend on any third parties.
##
## Accepted values: true, false
## Default: true
##
#captcha_enabled: true
##
## List of usernames that will be granted administrator rights.
## A user with administrator rights will be able to change the
## server configuration options listed below in /preferences,
## in addition to the usual user preferences.
##
## Server-wide settings:
## - popular_enabled
## - captcha_enabled
## - login_enabled
## - registration_enabled
## - statistics_enabled
## Default user preferences:
## - default_home
## - feed_menu
##
## Accepted values: an array of strings
## Default: [""]
##
#admins: [""]
##
## Enable/Disable the user notifications for all users
##
## Note: On large instances, it is recommended to set this option to 'false'
## in order to reduce the amount of data written to the database, and hence
## improve the overall performance of the instance.
##
## Accepted values: true, false
## Default: true
##
#enable_user_notifications: true
# -----------------------------
# Background jobs
# -----------------------------
##
## Number of threads to use when crawling channel videos (during
## subscriptions update).
##
## Notes: This setting is overridden if either "-c THREADS" or
## "--channel-threads=THREADS" is passed on the command line.
##
## Accepted values: a positive integer
## Default: 1
##
channel_threads: 1
##
## Time interval between two executions of the job that crawls
## channel videos (subscriptions update).
##
## Accepted values: a valid time interval (like 1h30m or 90m)
## Default: 30m
##
#channel_refresh_interval: 30m
##
## Forcefully dump and re-download the entire list of uploaded
## videos when crawling channel (during subscriptions update).
##
## Accepted values: true, false
## Default: false
##
full_refresh: false
##
## Number of threads to use when updating RSS feeds.
##
## Notes: This setting is overridden if either "-f THREADS" or
## "--feed-threads=THREADS" is passed on the command line.
##
## Accepted values: a positive integer
## Default: 1
##
feed_threads: 1
jobs:
## Options for the database cleaning job
clear_expired_items:
## Enable/Disable job
##
## Accepted values: true, false
## Default: true
##
enable: true
## Options for the channels updater job
refresh_channels:
## Enable/Disable job
##
## Accepted values: true, false
## Default: true
##
enable: true
## Options for the RSS feeds updater job
refresh_feeds:
## Enable/Disable job
##
## Accepted values: true, false
## Default: true
##
enable: true
# -----------------------------
# Miscellaneous
# -----------------------------
##
## custom banner displayed at the top of every page. This can
## used for instance announcements, e.g.
##
## Accepted values: any string. HTML is accepted.
## Default: <none>
##
#banner:
##
## Subscribe to channels using PubSubHub (Google PubSubHubbub service).
## PubSubHub allows Invidious to be instantly notified when a new video
## is published on any subscribed channels. When PubSubHub is not used,
## Invidious will check for new videos every minute.
##
## Note: This setting is recommended for public instances.
##
## Note 2:
## - Requires a public instance (it uses /feed/webhook/v1)
## - Requires 'domain' and 'hmac_key' to be set.
## - Setting this parameter to any number greater than zero will
## enable channel subscriptions via PubSubHub, but will limit the
## amount of concurrent subscriptions.
##
## Accepted values: true, false, a positive integer
## Default: false
##
#use_pubsub_feeds: false
##
## HMAC signing key used for CSRF tokens, cookies and pubsub
## subscriptions verification.
##
## Note: This parameter is mandatory and should be a random string.
## Such random string can be generated on linux with the following
## command: `pwgen 20 1`
##
## Accepted values: a string
## Default: <none>
##
hmac_key: "CHANGE_ME!!"
##
## List of video IDs where the "download" widget must be
## disabled, in order to comply with DMCA requests.
##
## Accepted values: an array of string
## Default: <none>
##
#dmca_content:
##
## Cache video annotations in the database.
##
## Warning: empty annotations or annotations that only contain
## cards won't be cached.
##
## Accepted values: true, false
## Default: false
##
#cache_annotations: false
##
## Source code URL. If your instance is running a modified source
## code, you MUST publish it somewhere and set this option.
##
## Accepted values: a string
## Default: <none>
##
#modified_source_code_url: ""
##
## Maximum custom playlist length limit.
##
## Accepted values: Integer
## Default: 500
##
#playlist_length_limit: 500
#########################################
#
# Default user preferences
#
#########################################
##
## NOTE: All the settings below define the default user
## preferences. They will apply to ALL users connecting
## without a preferences cookie (so either on the first
## connection to the instance or after clearing the
## browser's cookies).
##
default_user_preferences:
# -----------------------------
# Internationalization
# -----------------------------
##
## Default user interface language (locale).
##
## Note: When hosting a public instance, overriding the
## default (english) is not recommended, as it may
## people using other languages.
##
## Accepted values:
## ar (Arabic)
## da (Danish)
## de (German)
## en-US (english, US)
## el (Greek)
## eo (Esperanto)
## es (Spanish)
## fa (Persian)
## fi (Finnish)
## fr (French)
## he (Hebrew)
## hr (Hungarian)
## id (Indonesian)
## is (Icelandic)
## it (Italian)
## ja (Japanese)
## nb-NO (Norwegian, Bokmål)
## nl (Dutch)
## pl (Polish)
## pt-BR (Portuguese, Brazil)
## pt-PT (Portuguese, Portugal)
## ro (Romanian)
## ru (Russian)
## sv (Swedish)
## tr (Turkish)
## uk (Ukrainian)
## zh-CN (Chinese, China) (a.k.a "Simplified Chinese")
## zh-TW (Chinese, Taiwan) (a.k.a "Traditional Chinese")
##
## Default: en-US
##
#locale: en-US
##
## Default geographical location for content.
##
## Accepted values:
## AE, AR, AT, AU, AZ, BA, BD, BE, BG, BH, BO, BR, BY, CA, CH, CL, CO, CR,
## CY, CZ, DE, DK, DO, DZ, EC, EE, EG, ES, FI, FR, GB, GE, GH, GR, GT, HK,
## HN, HR, HU, ID, IE, IL, IN, IQ, IS, IT, JM, JO, JP, KE, KR, KW, KZ, LB,
## LI, LK, LT, LU, LV, LY, MA, ME, MK, MT, MX, MY, NG, NI, NL, NO, NP, NZ,
## OM, PA, PE, PG, PH, PK, PL, PR, PT, PY, QA, RO, RS, RU, SA, SE, SG, SI,
## SK, SN, SV, TH, TN, TR, TW, TZ, UA, UG, US, UY, VE, VN, YE, ZA, ZW
##
## Default: US
##
#region: US
##
## Top 3 preferred languages for video captions.
##
## Note: overriding the default (no preferred
## caption language) is not recommended, in order
## to not penalize people using other languages.
##
## Accepted values: a three-entries array.
## Each entry can be one of:
## "English", "English (auto-generated)",
## "Afrikaans", "Albanian", "Amharic", "Arabic",
## "Armenian", "Azerbaijani", "Bangla", "Basque",
## "Belarusian", "Bosnian", "Bulgarian", "Burmese",
## "Catalan", "Cebuano", "Chinese (Simplified)",
## "Chinese (Traditional)", "Corsican", "Croatian",
## "Czech", "Danish", "Dutch", "Esperanto", "Estonian",
## "Filipino", "Finnish", "French", "Galician", "Georgian",
## "German", "Greek", "Gujarati", "Haitian Creole", "Hausa",
## "Hawaiian", "Hebrew", "Hindi", "Hmong", "Hungarian",
## "Icelandic", "Igbo", "Indonesian", "Irish", "Italian",
## "Japanese", "Javanese", "Kannada", "Kazakh", "Khmer",
## "Korean", "Kurdish", "Kyrgyz", "Lao", "Latin", "Latvian",
## "Lithuanian", "Luxembourgish", "Macedonian",
## "Malagasy", "Malay", "Malayalam", "Maltese", "Maori",
## "Marathi", "Mongolian", "Nepali", "Norwegian Bokmål",
## "Nyanja", "Pashto", "Persian", "Polish", "Portuguese",
## "Punjabi", "Romanian", "Russian", "Samoan",
## "Scottish Gaelic", "Serbian", "Shona", "Sindhi",
## "Sinhala", "Slovak", "Slovenian", "Somali",
## "Southern Sotho", "Spanish", "Spanish (Latin America)",
## "Sundanese", "Swahili", "Swedish", "Tajik", "Tamil",
## "Telugu", "Thai", "Turkish", "Ukrainian", "Urdu",
## "Uzbek", "Vietnamese", "Welsh", "Western Frisian",
## "Xhosa", "Yiddish", "Yoruba", "Zulu"
##
## Default: ["", "", ""]
##
#captions: ["", "", ""]
# -----------------------------
# Interface
# -----------------------------
##
## Enable/Disable dark mode.
##
## Accepted values: "dark", "light", "auto"
## Default: "auto"
##
#dark_mode: "auto"
##
## Enable/Disable thin mode (no video thumbnails).
##
## Accepted values: true, false
## Default: false
##
#thin_mode: false
##
## List of feeds available on the home page.
##
## Note: "Subscriptions" and "Playlists" are only visible
## when the user is logged in.
##
## Accepted values: A list of strings
## Each entry can be one of: "Popular", "Trending",
## "Subscriptions", "Playlists"
##
## Default: ["Popular", "Trending", "Subscriptions", "Playlists"] (show all feeds)
##
#feed_menu: ["Popular", "Trending", "Subscriptions", "Playlists"]
##
## Default feed to display on the home page.
##
## Note: setting this option to "Popular" has no
## effect when 'popular_enabled' is set to false.
##
## Accepted values: Popular, Trending, Subscriptions, Playlists, <none>
## Default: Popular
##
#default_home: Popular
##
## Default number of results to display per page.
##
## Note: this affects invidious-generated pages only, such
## as watch history and subscription feeds. Playlists, search
## results and channel videos depend on the data returned by
## the Youtube API.
##
## Accepted values: any positive integer
## Default: 40
##
#max_results: 40
##
## Show/hide annotations.
##
## Accepted values: true, false
## Default: false
##
#annotations: false
##
## Show/hide annotation.
##
## Accepted values: true, false
## Default: false
##
#annotations_subscribed: false
##
## Type of comments to display below video.
##
## Accepted values: a two-entries array.
## Each entry can be one of: "youtube", "reddit", ""
##
## Default: ["youtube", ""]
##
#comments: ["youtube", ""]
##
## Default player style.
##
## Accepted values: invidious, youtube
## Default: invidious
##
#player_style: invidious
##
## Show/Hide the "related videos" sidebar when
## watching a video.
##
## Accepted values: true, false
## Default: true
##
#related_videos: true
# -----------------------------
# Video player behavior
# -----------------------------
##
## Automatically play videos on page load.
##
## Accepted values: true, false
## Default: false
##
#autoplay: false
##
## Automatically load the "next" video (either next in
## playlist or proposed) when the current video ends.
##
## Accepted values: true, false
## Default: false
##
#continue: false
##
## Autoplay next video by default.
##
## Note: Only effective if 'continue' is set to true.
##
## Accepted values: true, false
## Default: true
##
#continue_autoplay: true
##
## Play videos in Audio-only mode by default.
##
## Accepted values: true, false
## Default: false
##
#listen: false
##
## Loop videos automatically.
##
## Accepted values: true, false
## Default: false
##
#video_loop: false
# -----------------------------
# Video playback settings
# -----------------------------
##
## Default video quality.
##
## Accepted values: dash, hd720, medium, small
## Default: hd720
##
#quality: hd720
##
## Default dash video quality.
##
## Note: this setting only takes effet if the
## 'quality' parameter is set to "dash".
##
## Accepted values:
## auto, best, 4320p, 2160p, 1440p, 1080p,
## 720p, 480p, 360p, 240p, 144p, worst
## Default: auto
##
#quality_dash: auto
##
## Default video playback speed.
##
## Accepted values: 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0
## Default: 1.0
##
#speed: 1.0
##
## Default volume.
##
## Accepted values: 0-100
## Default: 100
##
#volume: 100
##
## Allow 360° videos to be played.
##
## Note: This feature requires a WebGL-enabled browser.
##
## Accepted values: true, false
## Default: true
##
#vr_mode: true
##
## Save the playback position
## Allow to continue watching at the previous position when
## watching the same video.
##
## Accepted values: true, false
## Default: false
##
#save_player_pos: false
# -----------------------------
# Subscription feed
# -----------------------------
##
## In the "Subscription" feed, only show the latest video
## of each channel the user is subscribed to.
##
## Note: when combined with 'unseen_only', the latest unseen
## video of each channel will be displayed instead of the
## latest by date.
##
## Accepted values: true, false
## Default: false
##
#latest_only: false
##
## Enable/Disable user subscriptions desktop notifications.
##
## Accepted values: true, false
## Default: false
##
#notifications_only: false
##
## In the "Subscription" feed, Only show the videos that the
## user haven't watched yet (i.e which are not in their watch
## history).
##
## Accepted values: true, false
## Default: false
##
#unseen_only: false
##
## Default sorting parameter for subscription feeds.
##
## Accepted values:
## 'alphabetically'
## 'alphabetically - reverse'
## 'channel name'
## 'channel name - reverse'
## 'published'
## 'published - reverse'
##
## Default: published
##
#sort: published
# -----------------------------
# Miscellaneous
# -----------------------------
##
## Proxy videos through instance by default.
##
## Warning: As most users won't change this setting in their
## preferences, defaulting to true will significantly
## increase the instance's network usage, so make sure that
## your server's connection can handle it.
##
## Accepted values: true, false
## Default: false
##
#local: false
##
## Show the connected user's nick at the top right.
##
## Accepted values: true, false
## Default: true
##
#show_nick: true
##
## Automatically redirect to a random instance when the user uses
## any "switch invidious instance" link (For videos, it's the plane
## icon, next to "watch on youtube" and "listen"). When set to false,
## the user is sent to https://redirect.invidious.io instead, where
## they can manually select an instance.
##
## Accepted values: true, false
## Default: false
##
#automatic_instance_redirect: false
##
## Show the entire video description by default (when set to 'false',
## only the first few lines of the description are shown and a
## "show more" button allows to expand it).
##
## Accepted values: true, false
## Default: false
##
#extend_desc: false

View File

@ -1,10 +0,0 @@
crawl_threads: 1
channel_threads: 1
video_threads: 1
db:
user: kemal
password: kemal
host: localhost
port: 5432
dbname: invidious
full_refresh: false

View File

@ -0,0 +1,7 @@
#!/bin/sh
[ -z "$POSTGRES_USER" ] && POSTGRES_USER=kemal
[ -z "$POSTGRES_DB" ] && POSTGRES_DB=invidious
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE channels ADD COLUMN subscribed bool;"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "UPDATE channels SET subscribed = false;"

View File

@ -0,0 +1,10 @@
#!/bin/sh
[ -z "$POSTGRES_USER" ] && POSTGRES_USER=kemal
[ -z "$POSTGRES_DB" ] && POSTGRES_DB=invidious
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE channel_videos DROP COLUMN live_now CASCADE"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE channel_videos DROP COLUMN premiere_timestamp CASCADE"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE channel_videos ADD COLUMN live_now bool"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE channel_videos ADD COLUMN premiere_timestamp timestamptz"

View File

@ -0,0 +1,22 @@
#!/bin/sh
[ -z "$POSTGRES_USER" ] && POSTGRES_USER=kemal
[ -z "$POSTGRES_DB" ] && POSTGRES_DB=invidious
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE videos DROP COLUMN title CASCADE"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE videos DROP COLUMN views CASCADE"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE videos DROP COLUMN likes CASCADE"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE videos DROP COLUMN dislikes CASCADE"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE videos DROP COLUMN wilson_score CASCADE"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE videos DROP COLUMN published CASCADE"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE videos DROP COLUMN description CASCADE"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE videos DROP COLUMN language CASCADE"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE videos DROP COLUMN author CASCADE"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE videos DROP COLUMN ucid CASCADE"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE videos DROP COLUMN allowed_regions CASCADE"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE videos DROP COLUMN is_family_friendly CASCADE"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE videos DROP COLUMN genre CASCADE"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE videos DROP COLUMN genre_url CASCADE"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE videos DROP COLUMN license CASCADE"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE videos DROP COLUMN sub_count_text CASCADE"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE videos DROP COLUMN author_thumbnail CASCADE"

View File

@ -0,0 +1,7 @@
#!/bin/sh
[ -z "$POSTGRES_USER" ] && POSTGRES_USER=kemal
[ -z "$POSTGRES_DB" ] && POSTGRES_DB=invidious
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE channels ADD COLUMN deleted bool;"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "UPDATE channels SET deleted = false;"

View File

@ -0,0 +1,8 @@
#!/bin/sh
[ -z "$POSTGRES_USER" ] && POSTGRES_USER=kemal
[ -z "$POSTGRES_DB" ] && POSTGRES_DB=invidious
psql "$POSTGRES_DB" "$POSTGRES_USER" < config/sql/session_ids.sql
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "INSERT INTO session_ids (SELECT unnest(id), email, CURRENT_TIMESTAMP FROM users) ON CONFLICT (id) DO NOTHING"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE users DROP COLUMN id"

View File

@ -0,0 +1,6 @@
#!/bin/sh
[ -z "$POSTGRES_USER" ] && POSTGRES_USER=kemal
[ -z "$POSTGRES_DB" ] && POSTGRES_DB=invidious
psql "$POSTGRES_DB" "$POSTGRES_USER" < config/sql/annotations.sql

View File

@ -0,0 +1,6 @@
#!/bin/sh
[ -z "$POSTGRES_USER" ] && POSTGRES_USER=kemal
[ -z "$POSTGRES_DB" ] && POSTGRES_DB=invidious
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE channel_videos ADD COLUMN views bigint;"

View File

@ -0,0 +1,7 @@
#!/bin/sh
[ -z "$POSTGRES_USER" ] && POSTGRES_USER=kemal
[ -z "$POSTGRES_DB" ] && POSTGRES_DB=invidious
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE channel_videos ADD COLUMN live_now bool;"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "UPDATE channel_videos SET live_now = false;"

View File

@ -0,0 +1,6 @@
#!/bin/sh
[ -z "$POSTGRES_USER" ] && POSTGRES_USER=kemal
[ -z "$POSTGRES_DB" ] && POSTGRES_DB=invidious
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE users ADD COLUMN feed_needs_update boolean"

View File

@ -0,0 +1,6 @@
#!/bin/sh
[ -z "$POSTGRES_USER" ] && POSTGRES_USER=kemal
[ -z "$POSTGRES_DB" ] && POSTGRES_DB=invidious
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE channel_videos ADD COLUMN premiere_timestamp timestamptz;"

View File

@ -0,0 +1,6 @@
CREATE INDEX channel_videos_ucid_published_idx
ON public.channel_videos
USING btree
(ucid COLLATE pg_catalog."default", published);
DROP INDEX channel_videos_ucid_idx;

View File

@ -0,0 +1,8 @@
#!/bin/sh
[ -z "$POSTGRES_USER" ] && POSTGRES_USER=kemal
[ -z "$POSTGRES_DB" ] && POSTGRES_DB=invidious
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE channels DROP COLUMN subscribed"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "ALTER TABLE channels ADD COLUMN subscribed timestamptz"
psql "$POSTGRES_DB" "$POSTGRES_USER" -c "UPDATE channels SET subscribed = '2019-01-01 00:00:00+00'"

View File

@ -0,0 +1,12 @@
-- Table: public.annotations
-- DROP TABLE public.annotations;
CREATE TABLE IF NOT EXISTS public.annotations
(
id text NOT NULL,
annotations xml,
CONSTRAINT annotations_id_key UNIQUE (id)
);
GRANT ALL ON TABLE public.annotations TO current_user;

View File

@ -2,37 +2,29 @@
-- DROP TABLE public.channel_videos;
CREATE TABLE public.channel_videos
CREATE TABLE IF NOT EXISTS public.channel_videos
(
id text COLLATE pg_catalog."default" NOT NULL,
title text COLLATE pg_catalog."default",
published timestamp with time zone,
updated timestamp with time zone,
ucid text COLLATE pg_catalog."default",
author text COLLATE pg_catalog."default",
CONSTRAINT channel_videos_id_key UNIQUE (id)
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
id text NOT NULL,
title text,
published timestamp with time zone,
updated timestamp with time zone,
ucid text,
author text,
length_seconds integer,
live_now boolean,
premiere_timestamp timestamp with time zone,
views bigint,
CONSTRAINT channel_videos_id_key UNIQUE (id)
);
GRANT ALL ON TABLE public.channel_videos TO kemal;
GRANT ALL ON TABLE public.channel_videos TO current_user;
-- Index: channel_videos_published_idx
-- Index: public.channel_videos_ucid_published_idx
-- DROP INDEX public.channel_videos_published_idx;
-- DROP INDEX public.channel_videos_ucid_published_idx;
CREATE INDEX channel_videos_published_idx
ON public.channel_videos USING btree
(published)
TABLESPACE pg_default;
CREATE INDEX IF NOT EXISTS channel_videos_ucid_published_idx
ON public.channel_videos
USING btree
(ucid COLLATE pg_catalog."default", published);
-- Index: channel_videos_ucid_idx
-- DROP INDEX public.channel_videos_ucid_idx;
CREATE INDEX channel_videos_ucid_idx
ON public.channel_videos USING btree
(ucid COLLATE pg_catalog."default")
TABLESPACE pg_default;

View File

@ -2,25 +2,24 @@
-- DROP TABLE public.channels;
CREATE TABLE public.channels
CREATE TABLE IF NOT EXISTS public.channels
(
id text COLLATE pg_catalog."default" NOT NULL,
author text COLLATE pg_catalog."default",
updated timestamp with time zone,
CONSTRAINT channels_id_key UNIQUE (id)
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
id text NOT NULL,
author text,
updated timestamp with time zone,
deleted boolean,
subscribed timestamp with time zone,
CONSTRAINT channels_id_key UNIQUE (id)
);
GRANT ALL ON TABLE public.channels TO kemal;
GRANT ALL ON TABLE public.channels TO current_user;
-- Index: channels_id_idx
-- Index: public.channels_id_idx
-- DROP INDEX public.channels_id_idx;
CREATE INDEX channels_id_idx
ON public.channels USING btree
(id COLLATE pg_catalog."default")
TABLESPACE pg_default;
CREATE INDEX IF NOT EXISTS channels_id_idx
ON public.channels
USING btree
(id COLLATE pg_catalog."default");

22
config/sql/nonces.sql Normal file
View File

@ -0,0 +1,22 @@
-- Table: public.nonces
-- DROP TABLE public.nonces;
CREATE TABLE IF NOT EXISTS public.nonces
(
nonce text,
expire timestamp with time zone,
CONSTRAINT nonces_id_key UNIQUE (nonce)
);
GRANT ALL ON TABLE public.nonces TO current_user;
-- Index: public.nonces_nonce_idx
-- DROP INDEX public.nonces_nonce_idx;
CREATE INDEX IF NOT EXISTS nonces_nonce_idx
ON public.nonces
USING btree
(nonce COLLATE pg_catalog."default");

View File

@ -0,0 +1,19 @@
-- Table: public.playlist_videos
-- DROP TABLE public.playlist_videos;
CREATE TABLE IF NOT EXISTS public.playlist_videos
(
title text,
id text,
author text,
ucid text,
length_seconds integer,
published timestamptz,
plid text references playlists(id),
index int8,
live_now boolean,
PRIMARY KEY (index,plid)
);
GRANT ALL ON TABLE public.playlist_videos TO current_user;

29
config/sql/playlists.sql Normal file
View File

@ -0,0 +1,29 @@
-- Type: public.privacy
-- DROP TYPE public.privacy;
CREATE TYPE public.privacy AS ENUM
(
'Public',
'Unlisted',
'Private'
);
-- Table: public.playlists
-- DROP TABLE public.playlists;
CREATE TABLE IF NOT EXISTS public.playlists
(
title text,
id text primary key,
author text,
description text,
video_count integer,
created timestamptz,
updated timestamptz,
privacy privacy,
index int8[]
);
GRANT ALL ON public.playlists TO current_user;

View File

@ -0,0 +1,23 @@
-- Table: public.session_ids
-- DROP TABLE public.session_ids;
CREATE TABLE IF NOT EXISTS public.session_ids
(
id text NOT NULL,
email text,
issued timestamp with time zone,
CONSTRAINT session_ids_pkey PRIMARY KEY (id)
);
GRANT ALL ON TABLE public.session_ids TO current_user;
-- Index: public.session_ids_id_idx
-- DROP INDEX public.session_ids_id_idx;
CREATE INDEX IF NOT EXISTS session_ids_id_idx
ON public.session_ids
USING btree
(id COLLATE pg_catalog."default");

View File

@ -2,22 +2,28 @@
-- DROP TABLE public.users;
CREATE TABLE public.users
CREATE TABLE IF NOT EXISTS public.users
(
id text[] COLLATE pg_catalog."default" NOT NULL,
updated timestamp with time zone,
notifications text[] COLLATE pg_catalog."default",
subscriptions text[] COLLATE pg_catalog."default",
email text COLLATE pg_catalog."default" NOT NULL,
preferences text COLLATE pg_catalog."default",
password text COLLATE pg_catalog."default",
token text COLLATE pg_catalog."default",
watched text[] COLLATE pg_catalog."default",
CONSTRAINT users_email_key UNIQUE (email)
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
updated timestamp with time zone,
notifications text[],
subscriptions text[],
email text NOT NULL,
preferences text,
password text,
token text,
watched text[],
feed_needs_update boolean,
CONSTRAINT users_email_key UNIQUE (email)
);
GRANT ALL ON TABLE public.users TO current_user;
-- Index: public.email_unique_idx
-- DROP INDEX public.email_unique_idx;
CREATE UNIQUE INDEX IF NOT EXISTS email_unique_idx
ON public.users
USING btree
(lower(email) COLLATE pg_catalog."default");
GRANT ALL ON TABLE public.users TO kemal;

View File

@ -2,38 +2,22 @@
-- DROP TABLE public.videos;
CREATE TABLE public.videos
CREATE UNLOGGED TABLE IF NOT EXISTS public.videos
(
id text COLLATE pg_catalog."default" NOT NULL,
info text COLLATE pg_catalog."default",
updated timestamp with time zone,
title text COLLATE pg_catalog."default",
views bigint,
likes integer,
dislikes integer,
wilson_score double precision,
published timestamp with time zone,
description text COLLATE pg_catalog."default",
language text COLLATE pg_catalog."default",
author text COLLATE pg_catalog."default",
ucid text COLLATE pg_catalog."default",
allowed_regions text[] COLLATE pg_catalog."default",
is_family_friendly boolean,
genre text COLLATE pg_catalog."default",
CONSTRAINT videos_pkey PRIMARY KEY (id)
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
id text NOT NULL,
info text,
updated timestamp with time zone,
CONSTRAINT videos_pkey PRIMARY KEY (id)
);
GRANT ALL ON TABLE public.videos TO kemal;
GRANT ALL ON TABLE public.videos TO current_user;
-- Index: id_idx
-- Index: public.id_idx
-- DROP INDEX public.id_idx;
CREATE UNIQUE INDEX id_idx
ON public.videos USING btree
(id COLLATE pg_catalog."default")
TABLESPACE pg_default;
CREATE UNIQUE INDEX IF NOT EXISTS id_idx
ON public.videos
USING btree
(id COLLATE pg_catalog."default");

55
docker-compose.yml Normal file
View File

@ -0,0 +1,55 @@
# Warning: This docker-compose file is made for development purposes.
# Using it will build an image from the locally cloned repository.
#
# If you want to use Invidious in production, see the docker-compose.yml file provided
# in the installation documentation: https://docs.invidious.io/installation/
version: "3"
services:
invidious:
build:
context: .
dockerfile: docker/Dockerfile
restart: unless-stopped
ports:
- "127.0.0.1:3000:3000"
environment:
# Please read the following file for a comprehensive list of all available
# configuration options and their associated syntax:
# https://github.com/iv-org/invidious/blob/master/config/config.example.yml
INVIDIOUS_CONFIG: |
db:
dbname: invidious
user: kemal
password: kemal
host: invidious-db
port: 5432
check_tables: true
# external_port:
# domain:
# https_only: false
# statistics_enabled: false
hmac_key: "CHANGE_ME!!"
healthcheck:
test: wget -nv --tries=1 --spider http://127.0.0.1:3000/api/v1/trending || exit 1
interval: 30s
timeout: 5s
retries: 2
invidious-db:
image: docker.io/library/postgres:14
restart: unless-stopped
volumes:
- postgresdata:/var/lib/postgresql/data
- ./config/sql:/config/sql
- ./docker/init-invidious-db.sh:/docker-entrypoint-initdb.d/init-invidious-db.sh
environment:
POSTGRES_DB: invidious
POSTGRES_USER: kemal
POSTGRES_PASSWORD: kemal
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
volumes:
postgresdata:

52
docker/Dockerfile Normal file
View File

@ -0,0 +1,52 @@
FROM crystallang/crystal:1.12.1-alpine AS builder
RUN apk add --no-cache sqlite-static yaml-static
ARG release
WORKDIR /invidious
COPY ./shard.yml ./shard.yml
COPY ./shard.lock ./shard.lock
RUN shards install --production
COPY ./src/ ./src/
# TODO: .git folder is required for building this is destructive.
# See definition of CURRENT_BRANCH, CURRENT_COMMIT and CURRENT_VERSION.
COPY ./.git/ ./.git/
# Required for fetching player dependencies
COPY ./scripts/ ./scripts/
COPY ./assets/ ./assets/
COPY ./videojs-dependencies.yml ./videojs-dependencies.yml
RUN crystal spec --warnings all \
--link-flags "-lxml2 -llzma"
RUN if [[ "${release}" == 1 ]] ; then \
crystal build ./src/invidious.cr \
--release \
--static --warnings all \
--link-flags "-lxml2 -llzma"; \
else \
crystal build ./src/invidious.cr \
--static --warnings all \
--link-flags "-lxml2 -llzma"; \
fi
FROM alpine:3.18
RUN apk add --no-cache rsvg-convert ttf-opensans tini
WORKDIR /invidious
RUN addgroup -g 1000 -S invidious && \
adduser -u 1000 -S invidious -G invidious
COPY --chown=invidious ./config/config.* ./config/
RUN mv -n config/config.example.yml config/config.yml
RUN sed -i 's/host: \(127.0.0.1\|localhost\)/host: invidious-db/' config/config.yml
COPY ./config/sql/ ./config/sql/
COPY ./locales/ ./locales/
COPY --from=builder /invidious/assets ./assets/
COPY --from=builder /invidious/invidious .
RUN chmod o+rX -R ./assets ./config ./locales
EXPOSE 3000
USER invidious
ENTRYPOINT ["/sbin/tini", "--"]
CMD [ "/invidious/invidious" ]

52
docker/Dockerfile.arm64 Normal file
View File

@ -0,0 +1,52 @@
FROM alpine:3.19 AS builder
RUN apk add --no-cache 'crystal=1.10.1-r0' shards sqlite-static yaml-static yaml-dev libxml2-static zlib-static openssl-libs-static openssl-dev musl-dev xz-static
ARG release
WORKDIR /invidious
COPY ./shard.yml ./shard.yml
COPY ./shard.lock ./shard.lock
RUN shards install --production
COPY ./src/ ./src/
# TODO: .git folder is required for building this is destructive.
# See definition of CURRENT_BRANCH, CURRENT_COMMIT and CURRENT_VERSION.
COPY ./.git/ ./.git/
# Required for fetching player dependencies
COPY ./scripts/ ./scripts/
COPY ./assets/ ./assets/
COPY ./videojs-dependencies.yml ./videojs-dependencies.yml
RUN crystal spec --warnings all \
--link-flags "-lxml2 -llzma"
RUN if [[ "${release}" == 1 ]] ; then \
crystal build ./src/invidious.cr \
--release \
--static --warnings all \
--link-flags "-lxml2 -llzma"; \
else \
crystal build ./src/invidious.cr \
--static --warnings all \
--link-flags "-lxml2 -llzma"; \
fi
FROM alpine:3.18
RUN apk add --no-cache rsvg-convert ttf-opensans tini
WORKDIR /invidious
RUN addgroup -g 1000 -S invidious && \
adduser -u 1000 -S invidious -G invidious
COPY --chown=invidious ./config/config.* ./config/
RUN mv -n config/config.example.yml config/config.yml
RUN sed -i 's/host: \(127.0.0.1\|localhost\)/host: invidious-db/' config/config.yml
COPY ./config/sql/ ./config/sql/
COPY ./locales/ ./locales/
COPY --from=builder /invidious/assets ./assets/
COPY --from=builder /invidious/invidious .
RUN chmod o+rX -R ./assets ./config ./locales
EXPOSE 3000
USER invidious
ENTRYPOINT ["/sbin/tini", "--"]
CMD [ "/invidious/invidious" ]

12
docker/init-invidious-db.sh Executable file
View File

@ -0,0 +1,12 @@
#!/bin/bash
set -eou pipefail
psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/channels.sql
psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/videos.sql
psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/channel_videos.sql
psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/users.sql
psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/session_ids.sql
psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/nonces.sql
psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/annotations.sql
psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/playlists.sql
psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/playlist_videos.sql

19
invidious.service Normal file
View File

@ -0,0 +1,19 @@
[Unit]
Description=Invidious (An alternative YouTube front-end)
After=syslog.target
After=network.target
[Service]
RestartSec=2s
Type=simple
User=invidious
Group=invidious
WorkingDirectory=/home/invidious/invidious
ExecStart=/home/invidious/invidious/invidious -o invidious.log
Restart=always
[Install]
WantedBy=multi-user.target

1
kubernetes/README.md Normal file
View File

@ -0,0 +1 @@
The Helm chart has moved to a dedicated GitHub repository: https://github.com/iv-org/invidious-helm-chart/tree/master/invidious

60
kubernetes/values.yaml Normal file
View File

@ -0,0 +1,60 @@
name: invidious
image:
repository: quay.io/invidious/invidious
tag: latest
pullPolicy: Always
replicaCount: 1
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 16
targetCPUUtilizationPercentage: 50
service:
type: ClusterIP
port: 3000
#loadBalancerIP:
resources: {}
#requests:
# cpu: 100m
# memory: 64Mi
#limits:
# cpu: 800m
# memory: 512Mi
securityContext:
allowPrivilegeEscalation: false
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
# See https://github.com/bitnami/charts/tree/master/bitnami/postgresql
postgresql:
image:
tag: 13
auth:
username: kemal
password: kemal
database: invidious
primary:
initdb:
username: kemal
password: kemal
scriptsConfigMap: invidious-postgresql-init
# Adapted from ../config/config.yml
config:
channel_threads: 1
db:
user: kemal
password: kemal
host: invidious-postgresql
port: 5432
dbname: invidious
full_refresh: false
https_only: false
domain:

15
locales/af.json Normal file
View File

@ -0,0 +1,15 @@
{
"generic_views_count": "{{count}} kyk",
"generic_views_count_plural": "{{count}} kyke",
"generic_videos_count": "{{count}} video",
"generic_videos_count_plural": "{{count}} videos",
"generic_playlists_count": "{{count}} snitlys",
"generic_playlists_count_plural": "{{count}} snitlyste",
"generic_subscriptions_count": "{{count}} intekening",
"generic_subscriptions_count_plural": "{{count}} intekeninge",
"LIVE": "LEWENDIG",
"generic_subscribers_count": "{{count}} intekenaar",
"generic_subscribers_count_plural": "{{count}} intekenare",
"Shared `x` ago": "`x` gelede gedeel",
"New passwords must match": "Nuwe wagwoord moet ooreenstem"
}

Some files were not shown because too many files have changed in this diff Show More