* Implement chapters
* Generate chapters locally for the Invidious API backend
* Performance improvements
* More performance improvements
* Improve chapters appearance and add compact mode for Invidious
* Update UI while seeking instead of afterwards
* Invidious extract chapters with range timestamps properly and duplicate chapters
* Minor code improvement
* Add accessibility labels and keyboard navigation
* Add chapter markers
* Fix missing newline at the bottom of ft-video-player.css
* Fix marker placement
* Improve premiere timestamp
Removes the unesseccary parts of the timestamp, year and seconds.
displays month as long name (eg., March)
* fix linting... forgot to add the file again before commit.
* get and use current locale set in freetube
this fixes issues where os locale and freetube locale don't match
* use 'default' when no locale is set in freetube.
this defaults to system locale
* use i18n to get locale and format date with intl
* format date with intl.datetimeformat
forgot to add file again after changes...
* use intl relative time format to format upcomingTimeLeft
* rename timeUnitI18nKey to just timeUnit
It's no longer used as a key and is no longer partial
* Improve premiere timestamp
Removes the unesseccary parts of the timestamp, year and seconds.
displays month as long name (eg., March)
* fix linting... forgot to add the file again before commit.
* get and use current locale set in freetube
this fixes issues where os locale and freetube locale don't match
* use 'default' when no locale is set in freetube.
this defaults to system locale
* use i18n to get locale and format date with intl
* format date with intl.datetimeformat
forgot to add file again after changes...
* display year if current year is less than year of premiere date
* Added a copyToClipboard function to utils
This should make it easier to handle errors which
result from the clipboard API (which are more likely
in web builds). This should also make it easier to handle
copying to clipboard in cordova builds by abstracting the
platform specific code out of the views and moving it
all into one function.
* Moved the $t function out of utils
* Removing locale snippets I was using and am not now
* Added function comment to copyToClipboard
* Adding some missing references
* Adding an additional check
* Re-reviewing my changes, I found a mistake
* Update src/renderer/store/modules/utils.js
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
* Update static/locales/en-US.yaml
Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>
* Reverting the language back to what it was previously
* Switching to using i18n.t()
instead of handling the translations myself.
Also, it looks like eslint removed a tab.
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>
* Applying a workaround for localization issue
This changes where the title comes from on the response object from ytdl.
This is related to FreeTubeApp#2530.
* Applying the same workaround on the description
* Added a fallback to videoDetails
* Adding a console error to the title try block
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
* Simplifying a loop to Array.join
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
* Adding a console error to the description try block
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
* Add a map for the description lines
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
* Added a question mark operator for descriptions
This should prevent errors from erroneously being thrown on videos
which have a blank description. If the description is undefined or does
not contain a 'runs' field, the resulting descriptionLines should be
and empty array. Then, videoDescription will be an empty string.
* Each line already contains a `\n`
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
* display time left until video premiers:
* video premiere display time left with time units
Displays time left in seconds, minutes, hours, and days.
This depends on how much time is left.
* premiere time left, display time in singular if needed
also simplified the big if block
* premiere time left, display time unit in lowercase
* Add Starting Soon string to locale file
* apply fixes reported by linter
* premiere time left, add suggested changes
Better temp variable scoping, flatten nested code, rename temp variables, use string intepolation
Co-authored-by: PikachuEXE <pikachuexe@gmail.com>
* replace tabs with spaces
tabs where used in some places in the suggested code
* display time left, remove "starting soon" string
Since upcomingTimeStamp will be null when the time has passed the scheduled timestamp
it doesn't make sense to use something that will rarely be displayed.
e.g. a user has to click on the video with less than a second remaing until it goes live for it to be displayed
it would also be displayed as "Premieres in Starting soon" which doesn't make sense
* display 'less than a minute' instead of exactly how many seconds remain
Looks better and works for values less than 0
Co-authored-by: PikachuEXE <pikachuexe@gmail.com>
* start to implement some parental controls
* Hide share + Hide Unsubscribe
* Hide live streams
* fix hide live streams
* Add "parental-control-settings"
* Implement Hide Live Streams & Hide "Age Restricted"
* Hide live streams from Subscriptions + fix hide live streams from search
* enable safe search on showFamilyFriendlyOnly
* Move some settings from parental control to distraction free
* fix channel loading
* make parental control settings collapsible
* fix lint
* dont show age restricted on videos that are loading
* improve hide live videos
* code refactor
* grammar
* nvm im dumb
* use named placeholder for age restricted message
* improve readability
* change Hide Description to Hide Video Description
* update translated strings
* fix age restricted component
Co-authored-by: Preston <freetubeapp@protonmail.com>
Co-authored-by: peepopoggers <72892531+peepopoggers@users.noreply.github.com>
* Fix watching watched video in development
* Fix removing a file even when it does not exist (and would raise error)
* Fix infinite reload in video watching
File updates (e.g. dashFiles) in static folder triggers app reload (web-dev-server)
But the a file is created/updated/deleted on before playing any video
So it goes into a loop of loading a video
There are now two separate settings related to Invidious instances:
- currentInvidiousInstance
- defaultInvidiousInstance
'currentInvidiousInstance' is a value that exists solely in memory
and it's the value used by the app to make the API calls,
while 'defaultInvidiousInstance' is the value that can be persisted
in the database by user action and will be used to initiate
the 'currentInvidiousInstance' on startup.
If the user has not saved a default value to the database,
'currentInvidiousInstance' is randomized from
a fetched list of viable candidates.
* feat: add support for opening videos/playlists in external players (like mpv) #418
Signed-off-by: Randshot <randshot@norealm.xyz>
* feat: move external player settings into own section
feat: add warnings for when the external player doesn't support the current action (e.g. reversing playlists)
feat: add toggle in settings for ignoring unsupported action warnings
Signed-off-by: Randshot <randshot@norealm.xyz>
* improvement: do not append start offset argument when the watch progress is 0
Signed-off-by: Randshot <randshot@norealm.xyz>
* fix: fix undefined showToast error when clicking on the external player playlist button
Signed-off-by: Randshot <randshot@norealm.xyz>
* feat: add icon button for external player to watch-video-info (below video player) component
improvement: refactor the code for opening the external player into a separate function in utils.js
Signed-off-by: Randshot <randshot@norealm.xyz>
* feat: add support for ytdl protocol urls (supportsYtdlProtocol)
chore: fix lint error
Signed-off-by: Randshot <randshot@norealm.xyz>
* feat: add support for passing default playback rate to external player
improvement: add warning message for when the external player does not support starting playback at
a given offset
chore: rename reverse, shuffle, and loopPlaylist fields for consistency
Signed-off-by: Randshot <randshot@norealm.xyz>
* feat: add setting for custom external player command line arguments
Signed-off-by: Randshot <randshot@norealm.xyz>
* chore: fix lint error
Signed-off-by: Randshot <randshot@norealm.xyz>
* improvement(watch-video-info.js): change the default for playlistId back to null (consistent with other occurrences)
improvement(utils.js/openInExternalPlayer): also check for empty playlistId string
fix(watch-video-info.js): fix merge error
Signed-off-by: Randshot <randshot@norealm.xyz>
* improvement(components/ft-list-video): check whether watch history is turned on, before adding a video to it
fix(store/utils): fix playlistReverse typo, causing `undefined` being set as a command line argument
fix(store/utils): check for 'string' type, instead of `null` and `undefined`
fix(views/Watch): fix getPlaylistIndex returning an incorrect index, when reverse was turned on
chore(locales/en-US): fix thumbnail and suppress typo
chore(locales/en_GB): fix thumbnail and suppress typo
Signed-off-by: Randshot <randshot@norealm.xyz>
* feat: pause player when opening video in external player
Signed-off-by: Randshot <randshot@norealm.xyz>
* feat(externalPlayer): refactor externalPlayerCmdArguments into a separate static file `static/external-player-map.json`
chore(components/ft-list-video): fix lint error
Signed-off-by: Randshot <randshot@norealm.xyz>
* Revert "feat: pause player when opening video in external player"
This reverts commit 28b4713334bf941be9e403abf517bb4b89beb04f.
* feat: pause the app's player when opening video in external player
* This commit addresses above requested changes.
improvement(components/external-player-settings): move `externalPlayer` check to `ft-flex-box`
improvement(components/external-player-settings): use `update*` methods, instead of `handle*`
improvement(store/utils): move child_process invocation to `main/index.js` via IPC call to renderer
improvement(store/utils): use `dispatch` for calling actions
improvement(store/utils): get external player related settings directly in the action
improvement(renderer/App): move `checkExternalPlayer` call down into `usingElectron` if statement
fix(renderer/App): fix lint error
improvement(components/ft-list-playlist): remove unnecessary payload fields
fix(components/ft-list-playlist): fix typo in component name
improvement(components/ft-list-video): remove unnecessary payload fields
improvement(components/watch-video-info): remove unnecessary payload fields
improvement(views/Settings): add `usingElectron` condition
Signed-off-by: Randshot <randshot@norealm.xyz>
* fix(store/utils): fix toast message error
Signed-off-by: Randshot <randshot@norealm.xyz>
* fix(store/utils): fix a few code mess-ups
Co-authored-by: Svallinn <41585298+Svallinn@users.noreply.github.com>
The `remote` module is deprecated and `@electron/remote` is unnecessary,
since the `ipcMain` and `ipcRenderer` can replace their functionality,
providing better performance and better security.
All other dangerous calls (mainly pulling main process constructs into
the renderer process) have also been removed.
Closes: #1268
Having 'system' locale set would wrongfully send the wrong
locale information to YouTube, which would result in the captions
not being set properly. This commit fixes that behavior.
The interval to play the next video in a playlist was dynamic and
wasn't applied to the normal autoplay timer.
This commit merges the logic of these two scenarios so that they both
utilize the user-defined interval.