* Improve Watch page accessibility
Co-Authored-By: Jason <84899178+jasonhenriquez@users.noreply.github.com>
* fix title issue, remove unused gotochannel function
Co-authored-by: Jason <84899178+jasonhenriquez@users.noreply.github.com>
* 2622 Remove select-on-focus behaviour from ft-input.
Replace this with show-clear-text-button.
* 2622 Make channel search a little wider so placeholder not truncated.
Co-authored-by: Simon Epstein <simon.epstein@67bricks.com>
* add logic to hide channels
* Add new ft-input-tags ui element and use this for channel hiding
* remove unused tooltip code
* Add tooltip to the ft-input-tags and the new setting
* Add spacer between toggle options and ft-flex-box
* Swap to stringify from semicolon + add focus to label
* Simplify the input_tags code + rename setting to channelsHidden
* Fix issue shown by linter
* Recentralize input button + fix tooltip for small windows
* Improve accessiblity
* fix hiding playlist when channel ID entered
* pass tag directly to removeTag function
Co-authored-by: petaded <code@zikl.co.uk>
Co-authored-by: petaded <petaded@zikl.co.uk>
* Hide unsubscribe button on channel list if this is set in parental
controls.
* Fix github linting errors
* Removed trailing whitespace.
* Reverted yarn.lock change
* Remove package-lock.json
* Added support for password protecting settings.
* Push password handling code inside password-settings component.
* Added incorrect password message
* Replace update method with watch.
* Use updateSettingsPassword to commit value to database.
* Move password settings to the bottom (review comment)
* Moved unlock into separate component (review feedback)
* Styling password dialog
* Removed incorrect (and unused) prop value - review comment.
* Removed unused component imports
Co-authored-by: Simon Epstein <simon.epstein@67bricks.com>
* improve accessibility of FreeTube input elements
Co-Authored-By: Jason <84899178+jasonhenriquez@users.noreply.github.com>
* make focus visible for prompt
* add close button to ft-prompt
* Update src/renderer/components/ft-icon-button/ft-icon-button.vue
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
* make suggested changes
* move eslint plugin to devdepedencies
Co-Authored-By: absidue <48293849+absidue@users.noreply.github.com>
* dont hide ft-prompt on focus out
* add aria-describeby
* update eslint-plugin-vuejs-accessibility
* Update yarn.lock
* Update yarn.lock
* Fix lint issues
* only escape whitespace in ids
* use computed properties
Co-authored-by: Jason <84899178+jasonhenriquez@users.noreply.github.com>
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
* Hide unsubscribe button on channel list if this is set in parental
controls.
* Fix github linting errors
* Removed trailing whitespace.
* Reverted yarn.lock change
* Remove package-lock.json
Co-authored-by: Simon Epstein <simon.epstein@67bricks.com>
* Migrate search suggestions to youtubei.js
* Rename functions to indicate that they are for the local API
* Implement and use a lightweight Innertube session
* Fix typo in comment
Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>
* Fix another typo in a comment
Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>
* Deduplicate CSS rules for the Catppuccin Mocha colours
* Deduplicate CSS rules for the Dracula colours
* Deduplicate CSS rules for the themes
* Deduplicate CSS rules for the main and secondary colours
* Use native DomParser instead of opml-to-json dependency
* Add support for Invidious feed URLs
* Fallback to HTML parser, as HTML is much less strict than XML
* Log error before falling back to the HTML parser
* #1414: Add share button ton Channel view
- Update src/renderer/components/ft-share-button to handle Channels
- Update english locale entries for 'Share channel'
* #1414: Add share button ton Channel view
- update youtubeShareURL() in src/renderer/components/ft-share-button
* #1414: Add share button ton Channel view
- implemented the new button in src/renderer/views/Channel
* #1414: Add share button ton Channel view
- renamed mediaType to shareTargetType in ft-share-button.js
- switched logic from !isChannel to isVideo in ft-share-button.vue
* #1414: Add share button ton Channel view
- renamed target type in ft-share-button.vue
- updated implementation in Channel.vue
It defaults to `false`. This should prevent users with
multiple displays from running into issues when they
drag the window from a portrait display to a landscape
display too quickly.
* Disable http disk cache and implempent in-memory image cache
* Add comment about removing URL scheme prefix
Co-authored-by: PikachuEXE <pikachuexe@gmail.com>
* Add early return to clean up the code
* Rewrite cache expiry logic with fallbacks
* Move this change behind a CLI argument --experiments-disable-disk-cache
* Replace CLI flag with a GUI setting
* Improve warning message styling
* ! Fix incompatibility with latest settings code
* Use CSS instead of sass for the experimental settings
* Return the error as JSON instead of throwing it
* Inline restart prompt label and option names and values
* Mention crash risk and recommend backups in the warning
Co-authored-by: PikachuEXE <pikachuexe@gmail.com>
* Adding videojs-mobile-ui as a dependency
- Using the beta because it fixes an issue
with multiple version of videojs loading
at once.
This is related to MarmadileManteater#56.
* Mapping defaultSkipInterval to seekSeconds
* Adding CSS to prevent showing duplicate buttons
- Added a new variable `usingTouch` to selectively hide
the existing `vjs-big-play-button` when the `touch-overlay`
is visible.
* Renaming CSS class to something more specific
* Adding text-shadow behind play / pause button
This should make it more visually distinct against a
light or colorful background.
* Enabling touch-overlay anytime a touch is detected
Disabling it whenever mouse input is detected
The default behavior of `videojs-mobile-ui` is to
only work in Android and iOS, but by
forcing the touch behavior to be enabled and selectively
showing it only when touch input is detected, it should work
on any device with touch input even if the browser doesn't
detect that it is running in Android or iOS.
* Removing unnecessary code
* Removing unintentionally leftover variable
* Removing an unnecessary assignment
Adding comments to explain why a flag called
`forceForTesting` is set to true
Disabling the `lockOnRotate` flag.
* Moving this flag and wrapper class
* Adding whitespace
* Making my comment a little more consistent
* Changing the punctuation of a comment
* Adjusting the CSS to fix a firefox discrepancy
* Adding a check for mobile firefox
For whatever reason, mobile firefox sometimes
triggers onmouseover when a touch occurs, and this
is unwanted behavior.
* Adding a drop-shadow to the ff and rw icons
This should make them easier to see on top of light
videos
* Hiding the mobile play button according to setting
- Added CSS to hide the videojs-mobile-ui play button
when the `Display Play Button In Video Player` setting is disabled.
* Replacing long computed string with class binding
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
* Adding newline at the end of videoJS.css
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
* Implement `getRegionData` in web
- Adjust __dirname to be a more sensible value
- Add `process.env.GEOLOCATION_NAMES` for web builds to avoid having
to blindly try and fetch
* Reverting webpack changes
* Change `indexOf` to `includes`
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
* Adding a new helper `createWebURL`
It takes a given path to a resource, and it returns an
easily fetch-able absolute path
* Using `createWebUrl` inside of the locale fetch
* Using `createWebURL` inside of `getRegionData`
* Removing an unnecessary leftover import
* Wait, no I was mistaken
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
* Implementing the web callback for `showSaveDialog`
Using the native filesystem API when it is available
* Adding the `writeFileFromDialog` function
It normalizes the behavior of writing to a file handle
given by a file picker between web and electron
* Refactoring `exportFreeTubeSubscriptions`
Now, it should use the profile data stored in memory
rather than reading it from the file system (which may not
be present in web browsers), and it should also work in web
builds
* Refactoring exportYouTubeSubscriptions
Using the `writeFileFromDialog` function instead of `fs`
* Refactoring the rest of the subscription exports
Using the `writeFileFromDialog` function instead of `fs`
* Refactoring exportHistory
- Using the historyCache stored in memory instead of
reading from `fs` to get the history data
- Using `writeFileFromDialog` instead of `fs.writeFile`
* Refactoring exportPlaylists
Using `writeFileFromDialog` instead of `fs`
* Removing no longer needed `fs` import
* Removing something I was using to debug
* Fixing issue with mime types non populating in save picker
* Adding back an unintentionally removed line
Previously, only settings which have a user defined value would
be iterated on in this loop. Now, all settings that have a user defined
value or that have side effects will be iterated. This is important because
`currentLocale`'s side effect handler contains a call to `getRegionData`,
and if this side effect handler is never called, the `Region for Trending`
option in settings will never populate.
* Adding ytpl and ytsr as externals in web.config
This should get rid of those two warnings that were
showing up on web builds
* Reducing discrepancies between dev and prod in web builds
* Removing a line which would prevent hot reloading
`this.locales` is retained between hot reloads, so it shouldn't
be set to `null`.
* Adding a new flag to the dev runner
Adding a new command: `run dev:web`
* Running `loadLocale` in development web builds
* Adding a line back which was removed
* Removing a line which was added
* Adding two additional checks to the instance filter
- Checking if the instance supports the api at all
- Checking if the instance supports cors in web environments
* Removing instances without API from instances json
* Modifying the hardcoded fallbacks
* Use named parameters instead of $ and % in localised strings
* Fix URL warning again
* Update placeholders in most locales
* Let the translators fix the problematic RTL strings
* Fix the missing quotes in some of the YAML files
* remove deprecated @keypress from top-nav
* remove deprecated @keypress from side-nav
* add role and tabindex to new window button
it could previously not be selected by tabbing over the buttons
* Removing a `width:auto` which was overriding
the width for a lot of .select-text
* Making the general-settings component not overflow
* Reducing margin in settings when window is narrow
* Moving invidious instance tooltip to reduce overflow
* Reducing the width of sliders to be 100% at maximum
Before this change, the preset width `380px` could easily
be wider than the window.
* Reducing overflow in Theme Settings
- Added breakpoint for theme `select`s
- Added breakpoint for the UI scale slider
* Reducing the remaining overflow in settings
This moves all of the tooltips slightly to the left
when the window is narrow to reduce overflow.
* Expanding the sponsorblock settings to full width
* Moving remaining tooltips into a fixed zone
* Floating the tooltip icon to the right
When the display is narrow, the tooltip
can sometimes overflow, and it is very
difficult to predict how it will overflow
if the tool tip icon comes directly after
a locale string.
This change floats those icons into a
centralized location where the tooltip
can be guaranteed to not overflow.
* Removing some irrelevant changes
* Reducing margin on switches
* Removing bottom margin on the last section
* Making room for overflow ellipsis
* Adding class `.containsTooltip` to `ft-toggle`
This should make is easier to style the toggles
which contain tooltips specficially.
* Modifying the media query for tooltips
* Adding a media query to reduce data settings margin
* add shortcut to subscription refresh button
* add shortcut to most popular refresh button
* add shortcut to trending refresh button
* prevent refresh if currently loading
`.href` is computed from the real value of the attribute,
and this was causing an issue where isExternalLink would
classify links that should not be external links as external links.
- If picture and picture is disabled, the control can be hidden
when the available screen real estate is small.
- If the width is under 680, the video is already
almost the width of the entire window, so it makes sense
to hide it.
* Adding an import for setImmediate
`setImmediate` is a global in node, but
it is technically from the `timers` module,
and it is not global in web.
* Replacing node specific call to `setImmediate`
`setTimeout` is available globally in both node and web
* Formatting the locales pathname to be more accurate
Before this change, the URL would refer
`https://localhost//static/locales/${locale}.json`
which technically works in most web browsers,
but it does not work in Cordova at all, so this
changes the links to be more accurately:
`https://localhost/static/locales/${locale}.json`
* Removing usage of `path` because it requires a polyfill/shim
* Linting the code
* Add setting to disable automatic fetching of subscriptions
* rename from load to fetch. fix profile switch auto fetching
* add message for when auto fetch is disabled
* add strings to locale file
* Use a switch column grid for the subscription settings
This matches the layout other settings components
* remove import of now unused ft-flex-box component
* add variable to track if an attempt to fetch has been made.
used so the disable automatic fetch message doesn't block the
empty channels message.
* reduce distance between switches by adding compact=true
* edit tooltip wording
* 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
* Hiding "smooth-scroll" setting when not electron
- This feature requires the restart of electron and
doesn't work in web builds.
* Removing this comment
- A safeguard was added
- This function won't be called unless IS_ELECTRON is true
- Expanded the fall-back to catch edge
cases where the instance list returns a
completely valid response of [] (an other-
wise useless response which doesn't throw
an error).
* Replace jquery in ft-icon-button with vue functionality
* Rename hide method to hideDropdown
* Fix typo in comment
Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>
* Fix menu reappearing too soon
* Fix share menu buttons not triggering
Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>
* use 5px border radius instead of 5%
a 5% border radius will create an oval shape when height and width differ.
this doesn't look good.
5px radius looks better and is used in other places
* offset premiereDate by 12px from bottom left
Increases the offset a tiny amount and adds a left offset aswell.
This looks better than when it was previously only offset from the bottom.
I used 12px because it's what youtube uses.
* use flexbox to align items additional positioning with margins
vertically centes premiere icon and text with by making their parent a flexbox
sets a min width for the text instead of using a set width for the premiereDate
* change font size and weight of timestamp text
* remove uneeded line height styling
line height 1.2 did not affect anything
* fix indentation
* Update src/renderer/views/Watch/Watch.sass
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
* 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
* Implementing the open file dialog in web
- Adding a new function to make loading files
from a dialog box easier in both web and electron
* Canceled should always be false
onchange is only triggered when the file picker
has a file path. If the user cancels, this function
is never called.
* Changing from `function ()` to `() => {`
* Adding a try around processing the history import
* Moving the try-catch to a smaller section
* Adding a listener to when the file picker is closed
* Fixing the grammar on my comment
* Refactoring playlist imports to use readFileFromDialog
* Refactoring handleFreetubeImportFile to use readFileFromDialog
* Refactoring handleYoutubeCsvImportFile to use readFileFromDialog
* Refactoring handleYoutubeImportFile to use readFileFromDialog
* Refactoring importOpmlYoutubeSubscriptions to use readFileFromDialog
* Refactoring importNewPipeSubscriptions to use readFileFromDialog
* Added a check
to prevent resolve from being called multiple times
* Moving the call to removeEventListener
to prevent this event from being triggered twice
* Adding extensions to the web file picker
* Hiding `Check for legacy subscriptions` in web
* Adding comments for better readability
* Correcting my vue syntax
* right click menu for open in a new window
* open video in new window when right click
* router link added to channel images for easier selection in the context of a context menu
* fix security bug user can visit other website via freetube
* simplify context menu entry condition
* createWindow in open new window adapted with the merged function
* Change the open new window selector for the origin of the page no matter the name of the website
* Keypress reintegrate into the code for accesibility
* Keypress reintegrate into the code for accesibility
* Fix style for sidenav subscription links
Co-authored-by: PikachuEXE <pikachuexe@gmail.com>
* 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>
* Allow webpack to bundle *most* dependencies
* Exclude *most* node_modules from getting packaged by electron-builder
* Import only the required icons instead of bundling the whole icon pack
* Reduce packaging blacklist to only include the few things that still need blacklisting
* 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>
the seconds length value provided by the API
rather than trying to pull the time from the video
element. This is related to FreeTubeApp#2492 and
MarmadileManteater#9.
* add playlist progress bar
could use some css
* theme and lint
idk if those changes to the package.json or yarn.lock are ok but
it wouldent lint without them :/
* hopfuly fix errors
* why is this not working
* this is anoying.
* fix some other issues
thx @PikachuEXE
Co-authored-by: PikachuEXE <pikachuexe@gmail.com>
* spelling mistake
Co-authored-by: PikachuEXE <pikachuexe@gmail.com>
* will not display if playlist is shuffled or
reversed
Co-authored-by: makerio90 <makerio1@pm.me>
Co-authored-by: PikachuEXE <pikachuexe@gmail.com>
Added a line to map the field "authorId" to "channelId"
on the featured channels that come from the Invidious API
because the Channel view expects related channels to have
the property "channelId". This is related to FreeTubeApp#2481.
* External player choice 'None' translated in Settings
* requested fix related to Vue i18n import
* suggested changes using translation key and fallback to player name
* Fix cursor moving while cycling through search suggestions
* Fix the search suggestions changing for all keyboard events
* Remove use of deprecated event.keyCode
* 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>
If a current video is practically over or the value in
the history's watch progress is almost the same as the length
of the video, it's safe to deduce that if the external player
button is clicked, the user is most likely just rewatching
the video, making no sense to pass a start offset to it
* Add hover visual on thumbnails
* Fix white-space issues on playlist description
* Fix playlist issues with scrolling
* Fix end of file new lines
* Fix dropdown not visible issue
* Fix mobile styling
* Clean up using flex
* Fix lint issue
* Clean up ft-input for top-nav
* Even out padding on ft-input
* Remove difference in in/out transitions for input
* Alternative solution to showing clear text button
* Keep clear text button visible if applicable
* Fix typo
* Format Invidious playlist dates with the selected locale
* Fix language for locale API as well
* Add special handling for Norsk nynorsk
* Workaround system locale issue
* * Implement divider for video "more dropdown menu"
* * Update API for ft-icon-button
* * Update existing ft-icon-button user to use new API for dropdown options
* * Update ft-icon-button to remove unused old API
* * Update divider to be less visible
* * Update padding of list item
* * Update WebpackDevServer option to avoid app reloading on MacOS .DS_Store file change
* Add setting for each SB category
* Update SB Settings Component
* Show other SB categories in seek bar
* Use camelCase for SponsorBlock values
Co-authored-by: PikachuEXE <pikachuexe@gmail.com>
* change "Don't Skip" to "Do Nothing" in locale
* improve styling of sponsorblock settings
* add filler category, don't repeat colors
* Fix JS format issue caused during code conflict resolving
* make sponsor block markers transparent
* change opacity to 0.6
Co-authored-by: PikachuEXE <pikachuexe@gmail.com>
* channel member + custom channel emojis
* accessibility improvements
* show member icon for comment replies
* update yt-comment-scraper. make member icon more accessible.
* Add system preference to theme-settings
* Add watching logic to check for dark theme settings
* Add en system theme translation
* Add explicit darkTheme option to browserWindow
* Remove unnecessary themeSource line
* Fix lint errors
* Move to using main process messaging for theme change
* Add system dataset selectors for themes
* Fix lint errors
* Change system theme to system default
* Use system default for deciding background color of newWindow
* Add baseTheme to state persistance
* Use baseTheme on browserWindow creation
* Fix lint errors
* Improve window background logic
* Catch settingsDb errors
* Remove dark flash on light themes
* Fix lint issues
* Fix system default sync on multiple windows
* Load database on each new window
* Fix lint errors
* Update compatibility for shared electron storage
* Remove unused console log
* Revert unnecessary changes
* Fix window maximize white flash
* Fix handleBaseTheme usage
* Use data-system-theme instead of data-theme
* Revert window maximize changes
* Fix theme flash on new window open
* ^ Update electron 15.x
* ^ Update electron 15.x > 16.x
This fixes the issue of white flash on new window shown before event `ready-to-show`
even window created with option `backgroundColor`
* * Update `createWindow` to pass options via an object instead of positional arguments
* * Implement windows opening with new window won't be closed when "parent" window closed
* * Update new window opened via middle click to be shown immediately
Matches current behaviour and better user experience (due to elimination of delay from the click to window appearance)
* * Update new window button to show new window faster
* * Only focus on new window on event `ready-to-show` if new window is not already shown
* Update src/main/index.js
Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>
Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>
* src/renderer/store/modules/utils.js, src/renderer/components/watch-video-info/watch-video-info.vue, src/renderer/components/watch-video-info/watch-video-info.js, src/renderer/components/ft-icon-button/ft-icon-button.js, src/main/index.js
in-app download in hardcoded path
* download into variable folder supported
download can be done into a specify folder defined in the settings or can be done by choosing a folder just before the downloading
* src/renderer/store/modules/utils.js: folder is asked before downloading when appropriate
* src/renderer/store/modules/utils.js: toast added for success and faillure
* src/renderer/store/modules/utils.js: mecanism to show download progress
* src/renderer/store/modules/utils.js: percentage symbol added to toast message when displaying progress
* src/renderer/components/download-settings/download-settings.js: clarification comment about electron
* src/renderer/store/modules/utils.js: typo in comment resolved
* src/renderer/store/modules/utils.js: show a toast when there is a file error
* static/locales/fr-FR.yaml: resolved typo in Choose Path
* src/renderer/store/modules/utils.js: download progress notification toast deleted
* corrections of typos, changes in toast messages, toast messages translatable by modifying the ft-toast component to allow translatable strings
* cleaner code for translatable toast
* downloadMedia argument changed from array to object
* src/renderer/components/download-settings/download-settings.sass: trailling space added
* Apply suggestions from code review
folder changed for folderPath
Co-authored-by: PikachuEXE <pikachuexe@gmail.com>
* fix forgotten folderPath renaming
* extra space deleted
* starting toast displayed after download folder asks
* audio button deleted
* experimental electron web library deleted because can cause performance issues
* placeholder for web support
* made better condition for web and electon compatibility and small variable renaming
* better error message when user cancel the download
* falling back to asking the user if the download repository doesn't exist
* falling back mode implemented
* console.log for debugging deleted
* useless import deleted
* small renaming
Co-authored-by: PikachuEXE <pikachuexe@gmail.com>
* transition duration of 0.5s added to watched videos
* small code reformating
* extra white spaces deleted
* typo in the word transition corrected
* original whitespaces respected
* transition added when hovering end
* video stat components started and properties chosen
* ft-video-stats integraded into the video player for dev and debugging
* using a timer to get video stats and a method to update the statistic every second
* getting statistic from vhs and adaptativeFormat
* frame drop capture
* stats capture in the form of event
* useless comment deleted
* stats render with a for loop in the template
* stats correctly displayed
* overlay stats added
* video stats component deleted
* video stats component deleted inside template video player
* video stats component fully deleted
* modal solution working need more styling and code messy
* lint
* modal working with stats
* keyboard shortcut for stats
* lint fix
* network state is now a string
* new line deleted
* useless whitespace deleted
* package-lock.json remove and ignore
* keyboard shortcut restricted to up arrow
* stats overlay made larger
* align to left corner
* useless formatting of string deleted
* renaming of variable formatedStrats for formattedStats
* keyboard shortcut made into a variable
* lint-fix
* key change for i
* label translated
* whitespace added for gitignore
* lock file not ignored
* videoId stat deleted
* ft-video-player.js, en-US.yaml, fr-FR.yaml: changing percentage stats display
changing the display for percentage stats for the format 'x%' instead of 'xx.xx'
* ft-video-player.js, en-US.yaml, fr-FR.yaml: network state video statistic deleted
* ft-video-player.js: made stats modal background color darker
* ft-video-player.js, en-US.yaml, fr-FR.yaml: video id are now related to the one of youtube
* ft-video-player.js, en-US.yaml, fr-FR.yaml: stats displayed made closet to the youtube implementation
the name are capitalized, the order of display is changed and fps is combined with viewport
* lint-fix
* en-US.yaml, fr-FR.yaml: network state possibilities deleted because not used
* package.json.lock: deleted
* ft-video-player.js: formated_stats renamed for formatted_stats
* lock file deleted
* index.js, ft-video-player.js: handling of right click context menu
via electon ipc bus an event is send to tell the vue component to show the stats modal
* ft-video-player.js, index.js: renaming of video stats display event and definition of it as a variable
* index.js, en-US.yaml: inconsistant capitalization of video statistics label solved
* index.js: pluralized video stats
* ft-video-player.js: fix right click undefined this.player
change the arrow function inside the closure for a function with a bind to this
* ft-video-player.js: handling of the case when this.player is not defined
the property this.stats.display.activated as been added and manage when the to show the stats. In this way in the runtime (it is still refered in the run time but it is capture in an event loop) with dont have to refer to this.player so when it is not defined it doesnt affect the behavior.
* lint fix
* src/renderer/components/ft-video-player/ft-video-player.js: modal.close move into the display event of the statistic context
* lint fix
* src/renderer/components/ft-video-player/ft-video-player.js, static/locales/en-US.yaml, static/locales/fr-FR.yaml: better capitalization of the stats labels
* static/locales/en-US.yaml: fps capitalized
* static/locales/fr-FR.yaml, static/locales/en-US.yaml: capitalized label
* src/renderer/views/History/History.js, src/renderer/store/datastores.js, src/renderer/store/modules/history.js: search history function added and indexing of history database
* npm fix
* src/renderer/views/History/History.js, src/renderer/store/modules/history.js: regex used to handle text search since their is no text indexing
* src/renderer/views/History/History.js, src/renderer/views/History/History.vue: search bar added but not adapted for history search use case
* src/renderer/views/History/History.js, src/renderer/views/History/History.vue: search bar added but not adapted for history search use case
* src/renderer/views/History/History.js, src/renderer/store/modules/history.js, src/renderer/views/History/History.vue: search history working but order do not remain the same depending on search
* src/renderer/views/History/History.js, src/renderer/store/modules/history.js, src/renderer/views/History/History.vue: search history working but order do not remain the same depending on search
* src/renderer/views/History/History.js: loading added when query is empty to order the history
* src/renderer/views/History/History.vue, src/renderer/views/History/History.js, static/locales/en-US.yaml, static/locales/fr-FR.yaml: translation added
* src/renderer/components/ft-list-video/ft-list-video.js, src/renderer/views/History/History.vue, src/renderer/views/History/History.js: fix the bad history reconstruction problem by adding an update hook to ft-list-video component
* lint fix
* src/datastores/handlers/base.js, src/datastores/handlers/electron.js, src/datastores/handlers/web.js, src/datastores/index.js, src/renderer/store/modules/history.js, src/renderer/views/History/History.js, src/constants.js: history adapted to the new db
* src/renderer/store/modules/history.js: print statement deleted
* src/renderer/views/History/History.js, static/locales/en-US.yaml, static/locales/fr-FR.yaml: search history place holder renamed
* search playlists backend
* search bar added into the frontend, search method of playlist deleted because the document are the playlist and not the videos
* src/renderer/store/modules/playlists.js: commment typo resolved
* placeholder name of search bar only defined into the .vue file instead of in the .js file
* src/renderer/components/ft-list-video/ft-list-video.js: fix the mecanism to modify a video card to reflect the current data
* src/renderer/views/History/History.js: doesn't load when query is empty
* src/renderer/components/ft-list-video/ft-list-video.js: fix problem date disapearing
* video id query deleted from search in history and playlist
* History: Refactor history module
* Profiles: Refactor profiles module
* IPC: Move channel ids to their own file and make them constants
* IPC: Replace single sync channel for one channel per sync type
* Everywhere: Replace default profile id magic strings with constant ref
* Profiles: Refactor `activeProfile` property from store
This commit makes it so that `activeProfile`'s getter returns
the entire profile, while the related update function only needs
the profile id (instead of the previously used array index)
to change the currently active profile.
This change was made due to inconsistency regarding the active profile
when creating new profiles.
If a new profile coincidentally landed in the current active profile's
array index after sorting, the app would mistakenly change to it
without any action from the user apart from the profile's creation.
Turning the profile id into the selector instead solves this issue.
* Revert "Store: Implement history synchronization between windows"
This reverts commit 99b61e6178.
This is necessary for an upcoming improved implementation of the
history synchronization.
* History: Remove unused mutation
* Everywhere: Create abstract database handlers
The project now utilizes abstract handlers to fetch, modify
or otherwise manipulate data from the database.
This facilitates 3 aspects of the app, in addition of
making them future proof:
- Switching database libraries is now trivial
Since most of the app utilizes the abstract handlers, it's incredibly
easily to change to a different DB library.
Hypothetically, all that would need to be done is to simply replace the
the file containing the base handlers, while the rest of the app
would go unchanged.
- Syncing logic between Electron and web is now properly separated
There are now two distinct DB handling APIs: the Electron one and
the web one.
The app doesn't need to manually choose the API, because it's detected
which platform is being utilized on import.
- All Electron windows now share the same database instance
This provides a single source of truth, improving consistency
regarding data manipulation and windows synchronization.
As a sidenote, syncing implementation has been left as is
(web unimplemented; Electron only syncs settings, remaining
datastore syncing will be implemented in the upcoming commits).
* Electron/History: Implement history synchronization
* Profiles: Implement suplementary profile creation logic
* ft-profile-edit: Small fix on profile name missing display
* Electron/Profiles: Implement profile synchronization
* Electron/Playlists: Implement playlist synchronization
* Select current playback rate in playback rate selector
* More concise implementation
Co-authored-by: PikachuEXE <pikachuexe@gmail.com>
* Scroll to the selected element instead of focusing it
Co-authored-by: PikachuEXE <pikachuexe@gmail.com>
* added the setting to toggle the 'scroll playback rate over video player' on and off. Set the default to off
* • Added Setting to toggle the 'ctrl+scroll for playback rate' feature
• Added the label and tooltip to the en-US local file
• Added the ctrl+scroll functionality to the video player component
• Added the ctrl+click functionality to the video player component
• Modified the existing scroll to change volume funtionality to ignore the event if the ctrl key is pressed
* changed the max playrate to 8 in Player Settings. Changed the available playrate options in the video player component popup menu to go up to 8 in steps of .25
* reverted back to hard coded values for playback rates
* opps, forgot to remove the playbackRates method. It has been removed now.
* fixed (at lesast I think) the hacky way I was overwriding the click handler. Also added a check for event.meteKey for mac users.
* added a check for if the metakey is pressedin the the mosueScrollVlumne method
* made a slight change to the tooltip text. The point of this commit is just to try and get the tests to re-run after I marked the PR as ready for review.
* added 'event.metaKey' back to the 'mouseScrollPlaybackRate' method. Not sure how I ended up leaving it off a few commits ago
Co-authored-by: Cody Sechelski <codysechelski@RMC02G68EYMD6R.local>
* transition duration of 0.5s added to watched videos
* small code reformating
* extra white spaces deleted
* typo in the word transition corrected
* original whitespaces respected
* transition added when hovering end
* video stat components started and properties chosen
* ft-video-stats integraded into the video player for dev and debugging
* using a timer to get video stats and a method to update the statistic every second
* getting statistic from vhs and adaptativeFormat
* frame drop capture
* stats capture in the form of event
* useless comment deleted
* stats render with a for loop in the template
* stats correctly displayed
* overlay stats added
* video stats component deleted
* video stats component deleted inside template video player
* video stats component fully deleted
* modal solution working need more styling and code messy
* lint
* modal working with stats
* keyboard shortcut for stats
* lint fix
* network state is now a string
* new line deleted
* useless whitespace deleted
* package-lock.json remove and ignore
* keyboard shortcut restricted to up arrow
* stats overlay made larger
* align to left corner
* useless formatting of string deleted
* renaming of variable formatedStrats for formattedStats
* keyboard shortcut made into a variable
* lint-fix
* key change for i
* label translated
* whitespace added for gitignore
* lock file not ignored
* videoId stat deleted
* ft-video-player.js, en-US.yaml, fr-FR.yaml: changing percentage stats display
changing the display for percentage stats for the format 'x%' instead of 'xx.xx'
* ft-video-player.js, en-US.yaml, fr-FR.yaml: network state video statistic deleted
* ft-video-player.js: made stats modal background color darker
* ft-video-player.js, en-US.yaml, fr-FR.yaml: video id are now related to the one of youtube
* ft-video-player.js, en-US.yaml, fr-FR.yaml: stats displayed made closet to the youtube implementation
the name are capitalized, the order of display is changed and fps is combined with viewport
* lint-fix
* en-US.yaml, fr-FR.yaml: network state possibilities deleted because not used
* package.json.lock: deleted
* ft-video-player.js: formated_stats renamed for formatted_stats
* lock file deleted
* index.js, ft-video-player.js: handling of right click context menu
via electon ipc bus an event is send to tell the vue component to show the stats modal
* ft-video-player.js, index.js: renaming of video stats display event and definition of it as a variable
* index.js, en-US.yaml: inconsistant capitalization of video statistics label solved
* index.js: pluralized video stats
* ft-video-player.js: fix right click undefined this.player
change the arrow function inside the closure for a function with a bind to this
* ft-video-player.js: handling of the case when this.player is not defined
the property this.stats.display.activated as been added and manage when the to show the stats. In this way in the runtime (it is still refered in the run time but it is capture in an event loop) with dont have to refer to this.player so when it is not defined it doesnt affect the behavior.
* lint fix
* src/renderer/components/ft-video-player/ft-video-player.js: modal.close move into the display event of the statistic context
* lint fix
* src/renderer/components/ft-video-player/ft-video-player.js, static/locales/en-US.yaml, static/locales/fr-FR.yaml: better capitalization of the stats labels
* static/locales/en-US.yaml: fps capitalized
* static/locales/fr-FR.yaml, static/locales/en-US.yaml: capitalized label
* ^ Update electron 13.x > 15.x
* ! Fix child window options due to breaking change in electron 14.x
Breaking change:
https://github.com/electron/electron/pull/28550
Child windows no longer inherit BrowserWindow construction options from their parents.
* Add pinned, owner and reply from owner indicators
* fix locale
* show owner for invidious
* add margin to pinned indicator
* show owner indicator for replies
* don't show "from owner and others" on hide
* Pass variable into translated string
Co-authored-by: PikachuEXE <pikachuexe@gmail.com>
* fix replacing channelName
Co-authored-by: PikachuEXE <pikachuexe@gmail.com>
* Adds :disabled styling/functionality for ft-button & ft-select
* Disable proxy, external player, & SponsorBlock settings when applicable
* Changes Invidious General Settings, Proxy Settings, and SponsorBlock settings to disappear when appropriate
* Update ft-toggle-switch.sass
* Switches to styling with disabled class for ft-toggle-switch
* Sets cursor to not-allowed for disabled controls
* transition duration of 0.5s added to watched videos
* small code reformating
* extra white spaces deleted
* typo in the word transition corrected
* original whitespaces respected
* transition added when hovering end
* feat(store/utils): add support for the `defaultCustomArguments` external player mapping field
improve(store/utils): move custom arguments evaluation to the top in `openInExternalPlayer`
improve(components/external-player-settings): conditionally append the default custom arguments to the tooltip
Signed-off-by: Randshot <randshot@norealm.xyz>
* fix(components/external-player-settings): fix lint error
chore(components/external-player-settings): remove unnecessary console log
Signed-off-by: Randshot <randshot@norealm.xyz>
* chore(static/external-player-map): add new `defaultCustomArguments` field to vlc map
Signed-off-by: Randshot <randshot@norealm.xyz>
* #1293. Revise side-nav text labels
* #1293. Remove text on collapsed menu
* #1293. Height of collapsed Option
* Update side-nav.vue. Trending text in title attr
* Side-nav-more-options revised
* Restore navLabel on closed status
* Sidenav label in compact mode as an opt-in setting
* Sidenav-more-options using hideCompactSidebarText
* Sidenav after lintfix
* Sidenav label option renamed and moved to theme settings
* Set minimum height for .navOption
* Correct capitalization
* NavBar icon size on compact mode
* More compact navbar while hiding labels
* Fix store getter
* side-nav.css remove comments
* Update hide labels text
Co-authored-by: Preston <freetubeapp@protonmail.com>
* filter invidious instances
* remove watch for value
* update list on mount
* hide on misspell + empty
* Fix spelling mistake
* minor fix
* remove "Clear" to "from." from locale files
* Update watch-video-info.js
* Modified language files
Modified language files to include the ISO 639-1 language code
* Change date based on locale
This changes the date based on locale. If locale does not exist it defaults to English
* Removed locale codes from files
* Getting locale code from $store
* Delete launch.json
* Replace _ with - for locale
* Add locale change to playlist query
Change the locale of playlist query.
On error defaults to user location (the library does it, no extra work required)
Does not work with Norsk nyorsk locale
* Make linter happy
* Lint
* replace dashes with underscores for locale string
* Don't blind dark theme users
It is better to start the temporary background dark so it doesnt flashbang dark theme users late at night.
Just happened to me 😢
This makes the loading background color the normal dark theme background color.
* Grab theme before await
* make it consistent when built
* final fixes
* removed accidental file
Co-authored-by: Preston <freetubeapp@protonmail.com>
* Rename `showArrow` to `showActionButton`
* * Display different icon for action button when input text look like a Youtube URL
* ! Fix transition for button appearing absent
* * Update to use new icon for all FT supported URLs
* Update src/renderer/components/ft-input/ft-input.js
Co-authored-by: Jason <84899178+jasonhenriquez@users.noreply.github.com>
* * Update action button to look disabled when input text is empty
* * Disable button hover/active visual effect when "disabled"
* * Make action button only respond to cursor when enabled
Co-authored-by: Jason <84899178+jasonhenriquez@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
* update colors to match theme
* fixed issues with light theme
* readded line that was accidentally deleted
* update colour to match search bar
* update profile selector & dropdown
* increase blur on ft-profile-selector box shadow
* don't change search suggestion background color to primary color
Co-authored-by: Preston <freetubeapp@protonmail.com>
* * Focus in input after text clear
* "makes the button disappear after clicking"
* animation
* Fix button title text
* Really remove/hide the button after CSS animation
* Fix hovered button overlapping text input box
* Fix incorrect initial value
* Fixes#1733
* Improves Trending & Channel tab styling
Removes :focus styling for unintended effects with auto-focusing on Trending page. Replaces underline with bold text weight & primary color bottom border on selected/active tab. Replaces animated background color change with bold text weight on tab:hover. Changes inactive tab color to tertiary. Removes unnecessary margin beneath tabs. Removes some of the empty vertical space between Channel info section & channel banner. Adds margin changes to maintain good appearance on smaller screens.
* Added Dracula Theme
• Added Light and Dark versions of the logo using Dracula Colors
• Added the base theme and Dracula accent colors to the theme.css
• Added the options for the new theme and colors in the theme-settings comp
• Added translations for the theme and color names to all local yaml files that
already had theme and color information
* fixed some yamls that I broke
* fixed some more yamls that I broke
* fixed an indentation error
* fixed the formating issues. It's back to 2 spaces rather than 4.
* removed package-lock, added back a new line at the end of the .gitignore, tweaked the colors a bit to add more contrast beween the text and backgroud colors in the overflow menu on the video cards., changed the card color to be slightly ligher than the background instead of slightly darker.
* apparently there was a blank line in the package.json file that was removed. Just trying to get this diff out of the pr
* apparently there was a blank line in the package.json file that was removed. Just trying to get this diff out of the pr
* fixed formating issues that I created in the theme.css. Converted my new code to use double quotes and uppercase hex codes to match existing formatting.
* fixed formating issues that I created in the theme.css. Converted my new code to use double quotes and uppercase hex codes to match existing formatting.
* fixed formating issues that I created in the theme.css. Converted my new code to use double quotes and uppercase hex codes to match existing formatting.
* resoliving conflicts in a local file
* added contract to all of the dracula primary colors. Added contrast for the main dracula theme's secondary and teriary text colors
* * Implement setting for disabling external link opening
* * Implement setting for disabling external link opening in dropdown
* * Place proper tooltip content on setting tooltip
* Implement "open link after prompt"
* Fix new setting placement and long translation entry value issue
* fix via increasing width instead of truncating text
* * Access new perference via computed property
* ~ Move the code comment back to original place
* * Update prompt to show URL
* Fix missing :key for element with v-for
* Do Nothing > No Action
* $ Use shortcut to preference value in conditional statements
* Update translation text
* move and update tooltip text
* Rename "Open Link After Prompt" > "Ask Before Opening Link"
Also fix the translation value
* Adds base dropdown ability to settings page with <details> & <summary>
* Adjusts styling of settings page
Replaces css stylesheets with sass stylesheets on some settings elements for better standardization of styling. Removes now unnecessary ft-card, .card, etc styling. Adds styling to new dropdown functionality.
* Update subscription-settings.sass
* Update Settings.css
* Proportional scaling inside grid
Cards inside grid (subscriptions, trending and others using the same system) now scale according to grid size.
* Update _ft-list-item.sass
Co-authored-by: Preston <freetubeapp@protonmail.com>
* * Improve style of top nav search input
* Implement clear input text on input
* ! Fix to only have top nav input to add new clear text box button
* * Update button design & fix accessibility flaw
* * Update spacing of new button
* * Update input box padding-left to use the same value as padding-right
* * Updating button padding
* Add support for csv yt subscriptions
* Simplify setting exportFileName
* check if subscribed to channel before making web requests
Co-authored-by: Preston <freetubeapp@protonmail.com>
* Makes reload buttons' position fixed
* Changes reload buttons' positions to absolute on narrow enough screens
Co-authored-by: Preston <freetubeapp@protonmail.com>
* Setting to customize fast-forward/rewind times
* Move variable placement to keep alphabetical order
Moves defaultSkipInterval to be one line below defaultQuality because Q comes before S in the alphabet. This keeps the variable declarations alphabetical.
* $ Add class names to some elements & use in CSS
* * Update playlist page style to ensure description box has max height to enusre visibility of share button
* Update Titles to change based on locale
* Update Title on Forward/Backwards navigation
* Revert "Update Title on Forward/Backwards navigation"
This reverts commit 0a57825e92.
* Translate Window Titles
-Updated en-US & en_GB localization files to include 'Playlist" and "Profile Settings"
- Updated app to dynamically change titles + translate (App.js sets title instead of router now)
- Channel & Video get title based on Channel Name & Video name (changing those titles are in their respective views)
* Revert "Update Titles to change based on locale"
This reverts commit 9e80816067.
* Re-add update title to channel view
* fix playlist title
* Fix 'Edit Profile' title