mirror of
https://github.com/iv-org/invidious.git
synced 2025-06-28 17:48:30 +00:00
Fix typos
This commit is contained in:
parent
2e7b7fbda7
commit
8d6f679019
10
CHANGELOG.md
10
CHANGELOG.md
@ -149,7 +149,7 @@ An HTTP proxy can be configured directly in Invidious, if needed. \
|
|||||||
* The instance list is downloaded in the background to improve redirection speed
|
* The instance list is downloaded in the background to improve redirection speed
|
||||||
* New `colorize_logs` option makes each log level a different color
|
* New `colorize_logs` option makes each log level a different color
|
||||||
|
|
||||||
#### For developpers
|
#### For developers
|
||||||
|
|
||||||
* `/api/v1/channels/{id}/shorts` now supports the `sort-by` parameter with the following values:
|
* `/api/v1/channels/{id}/shorts` now supports the `sort-by` parameter with the following values:
|
||||||
`newest`, `oldest` and `popular`
|
`newest`, `oldest` and `popular`
|
||||||
@ -301,7 +301,7 @@ Allow manual trigger of release-container build ([#4877], thanks @syeopite)
|
|||||||
|
|
||||||
[inv_sig_helper]: https://github.com/iv-org/inv_sig_helper
|
[inv_sig_helper]: https://github.com/iv-org/inv_sig_helper
|
||||||
|
|
||||||
#### For developpers
|
#### For developers
|
||||||
|
|
||||||
* The versions of Crystal that we test in CI/CD are now: `1.9.2`, `1.10.1`, `1.11.2`, `1.12.1`.
|
* The versions of Crystal that we test in CI/CD are now: `1.9.2`, `1.10.1`, `1.11.2`, `1.12.1`.
|
||||||
Please note that due to a bug in the `libxml` bindings (See [#4256]), versions prior to `1.10.0`
|
Please note that due to a bug in the `libxml` bindings (See [#4256]), versions prior to `1.10.0`
|
||||||
@ -328,7 +328,7 @@ Allow manual trigger of release-container build ([#4877], thanks @syeopite)
|
|||||||
* Watch page: the items in the "add to playlist" drop down are now sorted alphabetically
|
* Watch page: the items in the "add to playlist" drop down are now sorted alphabetically
|
||||||
* Videos: the "genre" URL is now always pointing to a valid webpage
|
* Videos: the "genre" URL is now always pointing to a valid webpage
|
||||||
* Playlists: Fixed `Could not parse N episodes` error on podcast playlists
|
* Playlists: Fixed `Could not parse N episodes` error on podcast playlists
|
||||||
* All external links should now have the [`rel`] attibute set to `noreferrer noopener` for
|
* All external links should now have the [`rel`] attribute set to `noreferrer noopener` for
|
||||||
increased privacy.
|
increased privacy.
|
||||||
* Preferences: Fixed the admin-only "modified source code" input being ignored
|
* Preferences: Fixed the admin-only "modified source code" input being ignored
|
||||||
* Watch/channel pages: use the full image URL in `og:image` and `twitter:image` meta tags
|
* Watch/channel pages: use the full image URL in `og:image` and `twitter:image` meta tags
|
||||||
@ -338,7 +338,7 @@ Allow manual trigger of release-container build ([#4877], thanks @syeopite)
|
|||||||
#### API
|
#### API
|
||||||
|
|
||||||
* fixed the `local` parameter not applying to `formatStreams` on `/api/v1/videos/{id}`
|
* fixed the `local` parameter not applying to `formatStreams` on `/api/v1/videos/{id}`
|
||||||
* fixed an `Index out of bounds` error hapenning when a playlist had no videos
|
* fixed an `Index out of bounds` error happening when a playlist had no videos
|
||||||
* fixed duplicated query parameters in proxied video URLs
|
* fixed duplicated query parameters in proxied video URLs
|
||||||
* Return actual video height/width/fps rather than hard coded values
|
* Return actual video height/width/fps rather than hard coded values
|
||||||
* Fixed the `/api/v1/popular` endpoint not returning a proper error code/message when the
|
* Fixed the `/api/v1/popular` endpoint not returning a proper error code/message when the
|
||||||
@ -357,7 +357,7 @@ Allow manual trigger of release-container build ([#4877], thanks @syeopite)
|
|||||||
* Channel: Render age restricted channels ([#4295], thanks @ChunkyProgrammer)
|
* Channel: Render age restricted channels ([#4295], thanks @ChunkyProgrammer)
|
||||||
* Ameba: Miscellaneous fixes ([#4807], thanks @syeopite)
|
* Ameba: Miscellaneous fixes ([#4807], thanks @syeopite)
|
||||||
* API: Proxy formatStreams URLs too ([#4859], thanks @colinleroy)
|
* API: Proxy formatStreams URLs too ([#4859], thanks @colinleroy)
|
||||||
* UI: Add search button to search bar ([#4706], thanks @thansk)
|
* UI: Add search button to search bar ([#4706], thanks @thanks)
|
||||||
* Add ability to set po_token and visitordata ID ([#4789], thanks @unixfox)
|
* Add ability to set po_token and visitordata ID ([#4789], thanks @unixfox)
|
||||||
* Add support for an external signature server ([#4772], by @SamantazFox)
|
* Add support for an external signature server ([#4772], by @SamantazFox)
|
||||||
* Ameba: Fix Naming/VariableNames ([#4790], thanks @syeopite)
|
* Ameba: Fix Naming/VariableNames ([#4790], thanks @syeopite)
|
||||||
|
@ -739,7 +739,7 @@ body.dark-theme {
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Miscellanous
|
* Miscellaneous
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -259,7 +259,7 @@ https_only: false
|
|||||||
# use_innertube_for_captions: false
|
# use_innertube_for_captions: false
|
||||||
|
|
||||||
##
|
##
|
||||||
## Send Google session informations. This is useful when Invidious is blocked
|
## Send Google session information. This is useful when Invidious is blocked
|
||||||
## by the message "This helps protect our community."
|
## by the message "This helps protect our community."
|
||||||
## See https://github.com/iv-org/invidious/issues/4734.
|
## See https://github.com/iv-org/invidious/issues/4734.
|
||||||
##
|
##
|
||||||
@ -319,7 +319,7 @@ https_only: false
|
|||||||
#popular_enabled: true
|
#popular_enabled: true
|
||||||
|
|
||||||
##
|
##
|
||||||
## Enable/Disable statstics (available at /api/v1/stats).
|
## Enable/Disable statistics (available at /api/v1/stats).
|
||||||
## The following data is available:
|
## The following data is available:
|
||||||
## - Software name ("invidious") and version+branch (same data as
|
## - Software name ("invidious") and version+branch (same data as
|
||||||
## displayed in the footer, e.g: "2021.05.13-75e5b49" / "master")
|
## displayed in the footer, e.g: "2021.05.13-75e5b49" / "master")
|
||||||
@ -865,7 +865,7 @@ default_user_preferences:
|
|||||||
##
|
##
|
||||||
## Default dash video quality.
|
## Default dash video quality.
|
||||||
##
|
##
|
||||||
## Note: this setting only takes effet if the
|
## Note: this setting only takes effect if the
|
||||||
## 'quality' parameter is set to "dash".
|
## 'quality' parameter is set to "dash".
|
||||||
##
|
##
|
||||||
## Accepted values:
|
## Accepted values:
|
||||||
|
@ -18,7 +18,7 @@ sudo systemctl start postgresql.service
|
|||||||
sudo systemctl enable postgresql.service
|
sudo systemctl enable postgresql.service
|
||||||
|
|
||||||
#
|
#
|
||||||
# Create databse and user
|
# Create database and user
|
||||||
#
|
#
|
||||||
|
|
||||||
if [ "$interactive" = "true" ]; then
|
if [ "$interactive" = "true" ]; then
|
||||||
@ -51,7 +51,7 @@ if [ "$interactive" = "true" ]; then
|
|||||||
echo " NOTICE "
|
echo " NOTICE "
|
||||||
echo "-------------"
|
echo "-------------"
|
||||||
echo
|
echo
|
||||||
echo "Make sure that your postgreSQL's pg_hba.conf file contains the follwong"
|
echo "Make sure that your postgreSQL's pg_hba.conf file contains the following"
|
||||||
echo "lines before previous 'host' configurations:"
|
echo "lines before previous 'host' configurations:"
|
||||||
echo
|
echo
|
||||||
echo "host invidious kemal 127.0.0.1/32 md5"
|
echo "host invidious kemal 127.0.0.1/32 md5"
|
||||||
|
@ -15,7 +15,7 @@ Spectator.describe Invidious::Search::Query do
|
|||||||
# Query parsing
|
# Query parsing
|
||||||
# -------------------
|
# -------------------
|
||||||
|
|
||||||
it "parses query with URL prameters (q)" do
|
it "parses query with URL parameters (q)" do
|
||||||
query = described_class.new(
|
query = described_class.new(
|
||||||
HTTP::Params.parse("q=What+is+Love+10+hour&type=video&duration=long"),
|
HTTP::Params.parse("q=What+is+Love+10+hour&type=video&duration=long"),
|
||||||
Invidious::Search::Query::Type::Regular, nil
|
Invidious::Search::Query::Type::Regular, nil
|
||||||
@ -33,7 +33,7 @@ Spectator.describe Invidious::Search::Query do
|
|||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "parses query with URL prameters (search_query)" do
|
it "parses query with URL parameters (search_query)" do
|
||||||
query = described_class.new(
|
query = described_class.new(
|
||||||
HTTP::Params.parse("search_query=What+is+Love+10+hour&type=video&duration=long"),
|
HTTP::Params.parse("search_query=What+is+Love+10+hour&type=video&duration=long"),
|
||||||
Invidious::Search::Query::Type::Regular, nil
|
Invidious::Search::Query::Type::Regular, nil
|
||||||
|
@ -15,14 +15,14 @@ def text_to_parsed_content(text : String) : JSON::Any
|
|||||||
line.scan(/https?:\/\/[^ ]*/).each do |url_match|
|
line.scan(/https?:\/\/[^ ]*/).each do |url_match|
|
||||||
# Retrieve last node and update node without match
|
# Retrieve last node and update node without match
|
||||||
last_node = current_nodes[-1].as_h
|
last_node = current_nodes[-1].as_h
|
||||||
splitted_last_node = last_node["text"].as_s.split(url_match[0])
|
split_last_node = last_node["text"].as_s.split(url_match[0])
|
||||||
last_node["text"] = JSON.parse(splitted_last_node[0].to_json)
|
last_node["text"] = JSON.parse(split_last_node[0].to_json)
|
||||||
current_nodes[-1] = JSON.parse(last_node.to_json)
|
current_nodes[-1] = JSON.parse(last_node.to_json)
|
||||||
# Create new node with match and navigation infos
|
# Create new node with match and navigation infos
|
||||||
current_node = {"text" => url_match[0], "navigationEndpoint" => {"urlEndpoint" => {"url" => url_match[0]}}}
|
current_node = {"text" => url_match[0], "navigationEndpoint" => {"urlEndpoint" => {"url" => url_match[0]}}}
|
||||||
current_nodes << (JSON.parse(current_node.to_json))
|
current_nodes << (JSON.parse(current_node.to_json))
|
||||||
# If text remain after match create new simple node with text after match
|
# If text remain after match create new simple node with text after match
|
||||||
after_node = {"text" => splitted_last_node.size > 1 ? splitted_last_node[1] : ""}
|
after_node = {"text" => split_last_node.size > 1 ? split_last_node[1] : ""}
|
||||||
current_nodes << (JSON.parse(after_node.to_json))
|
current_nodes << (JSON.parse(after_node.to_json))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -134,7 +134,7 @@ module Invidious::Comments
|
|||||||
end
|
end
|
||||||
|
|
||||||
if cvm = node["commentViewModel"]?
|
if cvm = node["commentViewModel"]?
|
||||||
# two commentViewModels for inital request
|
# two commentViewModels for initial request
|
||||||
# one commentViewModel when getting a replies to a comment
|
# one commentViewModel when getting a replies to a comment
|
||||||
cvm = cvm["commentViewModel"] if cvm["commentViewModel"]?
|
cvm = cvm["commentViewModel"] if cvm["commentViewModel"]?
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ module Invidious::Database::ChannelVideos
|
|||||||
return PG_DB.query_all(request, ids, as: ChannelVideo)
|
return PG_DB.query_all(request, ids, as: ChannelVideo)
|
||||||
end
|
end
|
||||||
|
|
||||||
def select_notfications(ucid : String, since : Time) : Array(ChannelVideo)
|
def select_notifications(ucid : String, since : Time) : Array(ChannelVideo)
|
||||||
request = <<-SQL
|
request = <<-SQL
|
||||||
SELECT * FROM channel_videos
|
SELECT * FROM channel_videos
|
||||||
WHERE ucid = $1 AND published > $2
|
WHERE ucid = $1 AND published > $2
|
||||||
|
@ -35,6 +35,6 @@ class VideoNotAvailableException < Exception
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Exception used to indicate that the JSON response from YT is missing
|
# Exception used to indicate that the JSON response from YT is missing
|
||||||
# some important informations, and that the query should be sent again.
|
# some important information, and that the query should be sent again.
|
||||||
class RetryOnceException < Exception
|
class RetryOnceException < Exception
|
||||||
end
|
end
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
module Invidious::Frontend::SearchFilters
|
module Invidious::Frontend::SearchFilters
|
||||||
extend self
|
extend self
|
||||||
|
|
||||||
# Generate the search filters collapsable widget.
|
# Generate the search filters collapsible widget.
|
||||||
def generate(filters : Search::Filters, query : String, page : Int, locale : String) : String
|
def generate(filters : Search::Filters, query : String, page : Int, locale : String) : String
|
||||||
return String.build(8000) do |str|
|
return String.build(8000) do |str|
|
||||||
str << "<div id='filters'>\n"
|
str << "<div id='filters'>\n"
|
||||||
|
@ -49,7 +49,7 @@ class HTTP::Client
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Mute the ClientError exception raised when a connection is flushed.
|
# Mute the ClientError exception raised when a connection is flushed.
|
||||||
# This happends when the connection is unexpectedly closed by the client.
|
# This happens when the connection is unexpectedly closed by the client.
|
||||||
#
|
#
|
||||||
class HTTP::Server::Response
|
class HTTP::Server::Response
|
||||||
class Output
|
class Output
|
||||||
|
@ -101,7 +101,7 @@ def create_notification_stream(env, topics, connection_channel)
|
|||||||
topics.try &.each do |topic|
|
topics.try &.each do |topic|
|
||||||
case topic
|
case topic
|
||||||
when .match(/UC[A-Za-z0-9_-]{22}/)
|
when .match(/UC[A-Za-z0-9_-]{22}/)
|
||||||
Invidious::Database::ChannelVideos.select_notfications(topic, since_unix).each do |video|
|
Invidious::Database::ChannelVideos.select_notifications(topic, since_unix).each do |video|
|
||||||
response = JSON.parse(video.to_json(locale))
|
response = JSON.parse(video.to_json(locale))
|
||||||
|
|
||||||
env.response.puts "id: #{id}"
|
env.response.puts "id: #{id}"
|
||||||
|
@ -31,7 +31,7 @@ module Invidious::Jobs
|
|||||||
|
|
||||||
def self.start_all
|
def self.start_all
|
||||||
JOBS.each do |job|
|
JOBS.each do |job|
|
||||||
# Don't run the main rountine if the job is disabled by config
|
# Don't run the main routine if the job is disabled by config
|
||||||
next if job.disabled?
|
next if job.disabled?
|
||||||
|
|
||||||
spawn { job.begin }
|
spawn { job.begin }
|
||||||
|
@ -33,7 +33,7 @@ module Invidious::Routes::API::Manifest
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Proxy URLs for video playback on invidious.
|
# Proxy URLs for video playback on invidious.
|
||||||
# Other API clients can get the original URLs by omiting `local=true`.
|
# Other API clients can get the original URLs by omitting `local=true`.
|
||||||
manifest = response.body.gsub(/<BaseURL>[^<]+<\/BaseURL>/) do |baseurl|
|
manifest = response.body.gsub(/<BaseURL>[^<]+<\/BaseURL>/) do |baseurl|
|
||||||
url = baseurl.lchop("<BaseURL>").rchop("</BaseURL>")
|
url = baseurl.lchop("<BaseURL>").rchop("</BaseURL>")
|
||||||
url = HttpServer::Utils.proxy_video_url(url, absolute: true) if local
|
url = HttpServer::Utils.proxy_video_url(url, absolute: true) if local
|
||||||
@ -74,7 +74,7 @@ module Invidious::Routes::API::Manifest
|
|||||||
displayname = audio_track["displayName"]?.try &.as_s || "Unknown"
|
displayname = audio_track["displayName"]?.try &.as_s || "Unknown"
|
||||||
bitrate = fmt["bitrate"]
|
bitrate = fmt["bitrate"]
|
||||||
|
|
||||||
# Different representations of the same audio should be groupped into one AdaptationSet.
|
# Different representations of the same audio should be grouped into one AdaptationSet.
|
||||||
# However, most players don't support auto quality switching, so we have to trick them
|
# However, most players don't support auto quality switching, so we have to trick them
|
||||||
# into providing a quality selector.
|
# into providing a quality selector.
|
||||||
# See https://github.com/iv-org/invidious/issues/3074 for more details.
|
# See https://github.com/iv-org/invidious/issues/3074 for more details.
|
||||||
|
@ -317,7 +317,7 @@ module Invidious::Search
|
|||||||
# Initialize output variable
|
# Initialize output variable
|
||||||
filters = Filters.new
|
filters = Filters.new
|
||||||
|
|
||||||
# Get parameter, and check emptyness
|
# Get parameter, and check emptiness
|
||||||
search_params = params["sp"]?
|
search_params = params["sp"]?
|
||||||
|
|
||||||
if search_params.nil? || search_params.empty?
|
if search_params.nil? || search_params.empty?
|
||||||
|
@ -770,8 +770,8 @@ private module Parsers
|
|||||||
#
|
#
|
||||||
# continuationItemRenderer contains various metadata ued to load more
|
# continuationItemRenderer contains various metadata ued to load more
|
||||||
# content (i.e when the user scrolls down). The interesting bit is the
|
# content (i.e when the user scrolls down). The interesting bit is the
|
||||||
# protobuf object known as the "continutation token". Previously, those
|
# protobuf object known as the "continuation token". Previously, those
|
||||||
# were generated from sratch, but recent (as of 11/2022) Youtube changes
|
# were generated from scratch, but recent (as of 11/2022) Youtube changes
|
||||||
# are forcing us to extract them from replies.
|
# are forcing us to extract them from replies.
|
||||||
#
|
#
|
||||||
module ContinuationItemRendererParser
|
module ContinuationItemRendererParser
|
||||||
|
Loading…
Reference in New Issue
Block a user