-
Notifications
You must be signed in to change notification settings - Fork 857
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'development' into iv-rss-detect-error-channels-properly
- Loading branch information
Showing
87 changed files
with
2,289 additions
and
2,518 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
import preferUseI18nPolyfillRule from './prefer-use-i18n-polyfill-rule.mjs' | ||
|
||
export default { | ||
meta: { | ||
name: 'eslint-plugin-freetube', | ||
version: '1.0' | ||
}, | ||
rules: { | ||
'prefer-use-i18n-polyfill': preferUseI18nPolyfillRule | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
import { dirname, relative, resolve } from 'path' | ||
|
||
const polyfillPath = resolve(import.meta.dirname, '../../src/renderer/composables/use-i18n-polyfill') | ||
|
||
function getRelativePolyfillPath(filePath) { | ||
const relativePath = relative(dirname(filePath), polyfillPath).replaceAll('\\', '/') | ||
|
||
if (relativePath[0] !== '.') { | ||
return `./${relativePath}` | ||
} | ||
|
||
return relativePath | ||
} | ||
|
||
/** @type {import('eslint').Rule.RuleModule} */ | ||
export default { | ||
meta: { | ||
type: 'problem', | ||
fixable: 'code' | ||
}, | ||
create(context) { | ||
return { | ||
'ImportDeclaration[source.value="vue-i18n"]'(node) { | ||
const specifierIndex = node.specifiers.findIndex(specifier => specifier.type === 'ImportSpecifier' && specifier.imported.name === 'useI18n') | ||
|
||
if (specifierIndex !== -1) { | ||
context.report({ | ||
node: node.specifiers.length === 1 ? node : node.specifiers[specifierIndex], | ||
message: "Please use FreeTube's useI18n polyfill, as vue-i18n's useI18n composable does not work when the vue-i18n is in legacy mode, which is needed for components using the Options API.", | ||
fix: context.physicalFilename === '<text>' | ||
? undefined | ||
: (fixer) => { | ||
const relativePath = getRelativePolyfillPath(context.physicalFilename) | ||
|
||
// If the import only imports `useI18n`, we can just update the source/from text | ||
// Else we need to create a new import for `useI18n` and remove useI18n from the original one | ||
if (node.specifiers.length === 1) { | ||
return fixer.replaceText(node.source, `'${relativePath}'`) | ||
} else { | ||
const specifier = node.specifiers[specifierIndex] | ||
|
||
let specifierText = 'useI18n' | ||
|
||
if (specifier.imported.name !== specifier.local.name) { | ||
specifierText += ` as ${specifier.local.name}` | ||
} | ||
|
||
return [ | ||
fixer.removeRange([ | ||
specifierIndex === 0 ? specifier.start : node.specifiers[specifierIndex - 1].end, | ||
specifierIndex === node.specifiers.length - 1 ? specifier.end : node.specifiers[specifierIndex + 1].start | ||
]), | ||
fixer.insertTextAfter(node, `\nimport { ${specifierText} } from '${relativePath}'`) | ||
] | ||
} | ||
} | ||
}) | ||
} | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
78 changes: 78 additions & 0 deletions
78
src/renderer/components/ExperimentalSettings/ExperimentalSettings.vue
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
<template> | ||
<FtSettingsSection | ||
:title="$t('Settings.Experimental Settings.Experimental Settings')" | ||
> | ||
<p class="experimental-warning"> | ||
{{ $t('Settings.Experimental Settings.Warning') }} | ||
</p> | ||
<FtFlexBox> | ||
<FtToggleSwitch | ||
tooltip-position="top" | ||
:label="$t('Settings.Experimental Settings.Replace HTTP Cache')" | ||
compact | ||
:default-value="replaceHttpCache" | ||
:disabled="replaceHttpCacheLoading" | ||
:tooltip="$t('Tooltips.Experimental Settings.Replace HTTP Cache')" | ||
@change="handleRestartPrompt" | ||
/> | ||
</FtFlexBox> | ||
<FtPrompt | ||
v-if="showRestartPrompt" | ||
:label="$t('Settings[\'The app needs to restart for changes to take effect. Restart and apply change?\']')" | ||
:option-names="[$t('Yes, Restart'), $t('Cancel')]" | ||
:option-values="['restart', 'cancel']" | ||
@click="handleReplaceHttpCache" | ||
/> | ||
</FtSettingsSection> | ||
</template> | ||
|
||
<script setup> | ||
import { onMounted, ref } from 'vue' | ||
import FtSettingsSection from '../ft-settings-section/ft-settings-section.vue' | ||
import FtFlexBox from '../ft-flex-box/ft-flex-box.vue' | ||
import FtToggleSwitch from '../ft-toggle-switch/ft-toggle-switch.vue' | ||
import FtPrompt from '../ft-prompt/ft-prompt.vue' | ||
import { IpcChannels } from '../../../constants' | ||
const replaceHttpCacheLoading = ref(true) | ||
const replaceHttpCache = ref(false) | ||
const showRestartPrompt = ref(false) | ||
onMounted(async () => { | ||
if (process.env.IS_ELECTRON) { | ||
const { ipcRenderer } = require('electron') | ||
replaceHttpCache.value = await ipcRenderer.invoke(IpcChannels.GET_REPLACE_HTTP_CACHE) | ||
} | ||
replaceHttpCacheLoading.value = false | ||
}) | ||
/** | ||
* @param {boolean} value | ||
*/ | ||
function handleRestartPrompt(value) { | ||
replaceHttpCache.value = value | ||
showRestartPrompt.value = true | ||
} | ||
/** | ||
* @param {'restart' | 'cancel' | null} value | ||
*/ | ||
function handleReplaceHttpCache(value) { | ||
showRestartPrompt.value = false | ||
if (value === null || value === 'cancel') { | ||
replaceHttpCache.value = !replaceHttpCache.value | ||
return | ||
} | ||
if (process.env.IS_ELECTRON) { | ||
const { ipcRenderer } = require('electron') | ||
ipcRenderer.send(IpcChannels.TOGGLE_REPLACE_HTTP_CACHE) | ||
} | ||
} | ||
</script> | ||
|
||
<style scoped src="./ExperimentalSettings.css" /> |
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
72 changes: 72 additions & 0 deletions
72
src/renderer/components/ParentalControlSettings/ParentalControlSettings.vue
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
<template> | ||
<FtSettingsSection | ||
:title="$t('Settings.Parental Control Settings.Parental Control Settings')" | ||
> | ||
<div class="switchColumnGrid"> | ||
<div class="switchColumn"> | ||
<FtToggleSwitch | ||
:label="$t('Settings.Parental Control Settings.Hide Unsubscribe Button')" | ||
compact | ||
:default-value="hideUnsubscribeButton" | ||
@change="updateHideUnsubscribeButton" | ||
/> | ||
<FtToggleSwitch | ||
:label="$t('Settings.Parental Control Settings.Show Family Friendly Only')" | ||
compact | ||
:default-value="showFamilyFriendlyOnly" | ||
@change="updateShowFamilyFriendlyOnly" | ||
/> | ||
</div> | ||
<div class="switchColumn"> | ||
<FtToggleSwitch | ||
:label="$t('Settings.Parental Control Settings.Hide Search Bar')" | ||
compact | ||
:default-value="hideSearchBar" | ||
@change="updateHideSearchBar" | ||
/> | ||
</div> | ||
</div> | ||
</FtSettingsSection> | ||
</template> | ||
|
||
<script setup> | ||
import { computed } from 'vue' | ||
import FtSettingsSection from '../ft-settings-section/ft-settings-section.vue' | ||
import FtToggleSwitch from '../ft-toggle-switch/ft-toggle-switch.vue' | ||
import store from '../../store/index' | ||
const hideSearchBar = computed(() => { | ||
return store.getters.getHideSearchBar | ||
}) | ||
const hideUnsubscribeButton = computed(() => { | ||
return store.getters.getHideUnsubscribeButton | ||
}) | ||
const showFamilyFriendlyOnly = computed(() => { | ||
return store.getters.getShowFamilyFriendlyOnly | ||
}) | ||
/** | ||
* @param {boolean} value | ||
*/ | ||
function updateHideSearchBar(value) { | ||
store.dispatch('updateHideSearchBar', value) | ||
} | ||
/** | ||
* @param {boolean} value | ||
*/ | ||
function updateHideUnsubscribeButton(value) { | ||
store.dispatch('updateHideUnsubscribeButton', value) | ||
} | ||
/** | ||
* @param {boolean} value | ||
*/ | ||
function updateShowFamilyFriendlyOnly(value) { | ||
store.dispatch('updateShowFamilyFriendlyOnly', value) | ||
} | ||
</script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.