├── .deepsource.toml ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug-report.yml │ ├── config.yml │ ├── feature-request.yml │ └── question.yml ├── dependabot.yml └── workflows │ └── ci.yml ├── .gitignore ├── LICENSE ├── NUXT ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── assets │ └── variables.scss ├── components │ ├── Comments │ │ ├── authorCommentBadgeRenderer.vue │ │ ├── commentThreadRenderer.vue │ │ ├── commentsHeaderRenderer.vue │ │ ├── mainCommentRenderer.vue │ │ ├── mainCommentReplyRenderer.vue │ │ └── sponsorCommentBadgeRenderer.vue │ ├── CompactRenderers │ │ ├── compactChannelRenderer.vue │ │ └── compactVideoRenderer.vue │ ├── ListRenderers │ │ ├── horizontalListRenderer.vue │ │ ├── sectionListRenderer.vue │ │ └── verticalListRenderer.vue │ ├── Player │ │ ├── captions.vue │ │ ├── close.vue │ │ ├── fscontrols.vue │ │ ├── fullscreen.vue │ │ ├── index.vue │ │ ├── loop.vue │ │ ├── minimize.vue │ │ ├── playpause.vue │ │ ├── progressbar.vue │ │ ├── quality.vue │ │ ├── seekbar.vue │ │ ├── speed.vue │ │ ├── sponsorblock.vue │ │ └── watchtime.vue │ ├── Playlist │ │ ├── playlistAlert.vue │ │ ├── playlistCard.vue │ │ └── playlistVideoCard.vue │ ├── SectionRenderers │ │ ├── itemSectionRenderer.vue │ │ └── shelfRenderer.vue │ ├── Settings │ │ └── language.vue │ ├── UtilRenderers │ │ ├── YtTextFormatter.vue │ │ ├── YtTextFormatterNew.vue │ │ ├── baseVideoRenderer.vue │ │ ├── collapsableText.vue │ │ └── slimVideoDescriptionRenderer.vue │ ├── bottomNavigation.vue │ ├── communityCard.vue │ ├── dialogBase.vue │ ├── gridRenderers │ │ ├── gridVideoRenderer.vue │ │ └── videoWithContextRenderer.vue │ ├── historyCard.vue │ ├── observer.vue │ ├── ryd.vue │ ├── topNavigation.vue │ ├── updateChecker.vue │ └── vidLoadRenderer.vue ├── layouts │ ├── default.vue │ ├── empty.vue │ └── error.vue ├── nuxt.config.js ├── package.json ├── pages │ ├── activities │ │ ├── install.vue │ │ └── update.vue │ ├── channel │ │ ├── about.vue │ │ ├── channels.vue │ │ ├── community.vue │ │ ├── index.vue │ │ ├── playlists.vue │ │ └── videos.vue │ ├── history.vue │ ├── home.vue │ ├── index.vue │ ├── library.vue │ ├── mods │ │ ├── about.vue │ │ ├── developer.vue │ │ ├── general.vue │ │ ├── player.vue │ │ ├── plugins.vue │ │ ├── startup.vue │ │ ├── theme.vue │ │ ├── tweaks.vue │ │ └── updates.vue │ ├── playlist.vue │ ├── search.vue │ ├── settings.vue │ ├── subscriptions.vue │ └── watch.vue ├── plugins │ ├── classes │ │ ├── backHander.js │ │ └── backType.js │ ├── constants.js │ ├── innertube.js │ ├── language.js │ ├── languages │ │ ├── Slovak.js │ │ ├── arabic.js │ │ ├── azerbaijan.js │ │ ├── bengali.js │ │ ├── brazilian-portuguese.js │ │ ├── bulgarian.js │ │ ├── chinese-simplified.js │ │ ├── chinese-traditional.js │ │ ├── czech.js │ │ ├── dutch.js │ │ ├── english.js │ │ ├── estonian.js │ │ ├── finnish.js │ │ ├── french-fr.js │ │ ├── german.js │ │ ├── hindi.js │ │ ├── hungarian.js │ │ ├── indonesian.js │ │ ├── italian.js │ │ ├── japanese.js │ │ ├── korean.js │ │ ├── macedonian.js │ │ ├── malay.js │ │ ├── malayalam.js │ │ ├── marathi.js │ │ ├── polish.js │ │ ├── portuguese.js │ │ ├── readme.md │ │ ├── romanian.js │ │ ├── russian.js │ │ ├── serbian.js │ │ ├── slovenian.js │ │ ├── spanish.js │ │ ├── tamil.js │ │ ├── turkish.js │ │ ├── ukrainian.js │ │ └── vietnamese.js │ ├── renderers.js │ ├── ryd.js │ ├── tempPlugins │ │ └── demoPlugin.js │ ├── thirdPartyPluginLoader.js │ ├── update.js │ ├── utils.js │ ├── vuetube.js │ └── youtube.js ├── static │ ├── chome.svg │ ├── clist.svg │ ├── csubs.svg │ ├── dev.svg │ ├── fhome.svg │ ├── flist.svg │ ├── fsubs.svg │ ├── home.svg │ ├── icon.svg │ ├── list.svg │ └── subs.svg └── store │ ├── README.md │ ├── channel │ └── index.js │ ├── history │ └── index.js │ ├── index.js │ ├── player │ └── index.js │ ├── playlist │ └── index.js │ ├── search │ └── index.js │ └── tweaks │ └── index.js ├── android ├── .gitignore ├── .idea │ ├── .gitignore │ ├── compiler.xml │ ├── gradle.properties │ ├── jarRepositories.xml │ └── misc.xml ├── app │ ├── .gitignore │ ├── build.gradle │ ├── capacitor.build.gradle │ ├── proguard-rules.pro │ ├── release │ │ └── output-metadata.json │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── getcapacitor │ │ │ └── myapp │ │ │ └── ExampleInstrumentedTest.java │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ │ ├── capacitor.config.json │ │ │ └── capacitor.plugins.json │ │ ├── ic_launcher-playstore.png │ │ ├── java │ │ │ └── com │ │ │ │ └── Frontesque │ │ │ │ └── vuetube │ │ │ │ └── MainActivity.java │ │ └── res │ │ │ ├── drawable-land-hdpi │ │ │ └── splash.png │ │ │ ├── drawable-land-mdpi │ │ │ └── splash.png │ │ │ ├── drawable-land-xhdpi │ │ │ └── splash.png │ │ │ ├── drawable-land-xxhdpi │ │ │ └── splash.png │ │ │ ├── drawable-land-xxxhdpi │ │ │ └── splash.png │ │ │ ├── drawable-port-hdpi │ │ │ └── splash.png │ │ │ ├── drawable-port-mdpi │ │ │ └── splash.png │ │ │ ├── drawable-port-xhdpi │ │ │ └── splash.png │ │ │ ├── drawable-port-xxhdpi │ │ │ └── splash.png │ │ │ ├── drawable-port-xxxhdpi │ │ │ └── splash.png │ │ │ ├── drawable-v24 │ │ │ ├── ic_launcher_background.xml │ │ │ ├── ic_launcher_foreground.xml │ │ │ └── ic_launcher_monochrome.xml │ │ │ ├── drawable │ │ │ └── splash.png │ │ │ ├── layout │ │ │ └── activity_main.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_background.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_background.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_background.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_background.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_background.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── values │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ │ └── xml │ │ │ ├── config.xml │ │ │ └── file_paths.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── getcapacitor │ │ └── myapp │ │ └── ExampleUnitTest.java ├── build.gradle ├── capacitor-cordova-android-plugins │ ├── build.gradle │ ├── cordova.variables.gradle │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ ├── .gitkeep │ │ └── cordova │ │ │ └── plugins │ │ │ └── screenorientation │ │ │ └── CDVOrientation.java │ │ └── res │ │ └── .gitkeep ├── capacitor.settings.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── key.jks ├── settings.gradle └── variables.gradle ├── capacitor.config.json ├── ios ├── .gitignore └── App │ ├── App.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata │ ├── App.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ ├── App │ ├── App.entitlements │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── AppIcon-20x20@1x.png │ │ │ ├── AppIcon-20x20@2x-1.png │ │ │ ├── AppIcon-20x20@2x.png │ │ │ ├── AppIcon-20x20@3x.png │ │ │ ├── AppIcon-29x29@1x.png │ │ │ ├── AppIcon-29x29@2x-1.png │ │ │ ├── AppIcon-29x29@2x.png │ │ │ ├── AppIcon-29x29@3x.png │ │ │ ├── AppIcon-40x40@1x.png │ │ │ ├── AppIcon-40x40@2x-1.png │ │ │ ├── AppIcon-40x40@2x.png │ │ │ ├── AppIcon-40x40@3x.png │ │ │ ├── AppIcon-512@2x.png │ │ │ ├── AppIcon-60x60@2x.png │ │ │ ├── AppIcon-60x60@3x.png │ │ │ ├── AppIcon-76x76@1x.png │ │ │ ├── AppIcon-76x76@2x.png │ │ │ ├── AppIcon-83.5x83.5@2x.png │ │ │ └── Contents.json │ │ ├── Contents.json │ │ └── Splash.imageset │ │ │ ├── Contents.json │ │ │ ├── splash-2732x2732-1.png │ │ │ ├── splash-2732x2732-2.png │ │ │ └── splash-2732x2732.png │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ ├── capacitor.config.json │ └── config.xml │ └── Podfile ├── package.json ├── readme.md ├── readme ├── readme.bg.md ├── readme.es.md ├── readme.fr.md ├── readme.he.md ├── readme.hu.md ├── readme.id.md ├── readme.it.md ├── readme.it.md.bak ├── readme.ja.md ├── readme.kr.md ├── readme.md ├── readme.mk.md ├── readme.ms.md ├── readme.nl.md ├── readme.pl.md ├── readme.pt-br.md ├── readme.ro.md ├── readme.ru.md ├── readme.ta.md ├── readme.tr.md ├── readme.ua.md ├── readme.vi.md ├── readme.zh-hans.md └── readme.zh-hant.md ├── resources ├── Features.svg ├── Install.svg ├── Plans.svg ├── PlayIcon.svg ├── Stable.svg ├── VueTube Possible Redesign.afdesign ├── bottom_banner_readme.png ├── getcanary.png ├── getstable.png ├── getunstable.png ├── readme-bg │ ├── Features.bg.svg │ ├── Install.bg.svg │ └── Plans.bg.svg ├── readme-es │ ├── Features.es.svg │ ├── Install.es.svg │ ├── Plans.es.svg │ └── bottom_banner_readme.png ├── readme-fr │ ├── Features.fr.svg │ ├── Install.fr.svg │ └── Plans.fr.svg ├── readme-he │ ├── Features.he.svg │ ├── Install.he.svg │ └── Plans.he.svg ├── readme-hu │ ├── Features.hu.svg │ ├── Install.hu.svg │ ├── Plans.hu.svg │ └── bottom_banner_readme.png ├── readme-id │ ├── Features.id.svg │ ├── Install.id.svg │ ├── Plans.id.svg │ └── bottom_banner_readme_id.png ├── readme-it │ ├── Features.it.svg │ ├── Install.it.svg │ └── Plans.it.svg ├── readme-ja │ ├── Features.ja.svg │ ├── Install.ja.svg │ ├── Plans.ja.svg │ ├── VueTube.ja.dark.svg │ └── VueTube.ja.svg ├── readme-kr │ ├── Features.kr.svg │ ├── Install.kr.svg │ └── Plans.kr.svg ├── readme-mk │ ├── Features.mk.svg │ ├── Install.mk.svg │ └── Plans.mk.svg ├── readme-ms │ ├── Features.ms.svg │ ├── Install.ms.svg │ └── Plans.ms.svg ├── readme-nl │ ├── Features.nl.svg │ ├── Install.nl.svg │ └── Plans.nl.svg ├── readme-pl │ ├── Features.pl.svg │ ├── Install.pl.svg │ └── Plans.pl.svg ├── readme-pt-br │ ├── Features.pt-br.svg │ ├── Install.pt-br.svg │ └── Plans.pt-br.svg ├── readme-ro │ ├── Features.ro.svg │ ├── Install.ro.svg │ └── Plans.ro.svg ├── readme-ru │ ├── Features.ru.svg │ ├── Install.ru.svg │ └── Plans.ru.svg ├── readme-ta │ ├── Features.ta.svg │ ├── Install.ta.svg │ └── Plans.ta.svg ├── readme-vi │ ├── Features.vi.svg │ ├── Install.vi.svg │ └── Plans.vi.svg ├── readme-zh-hans │ ├── Features.zh-hans.svg │ ├── Install.zh-hans.svg │ └── Plans.zh-hans.svg ├── readme-zh-hant │ ├── Features.zh-hant.svg │ ├── Install.zh-hant.svg │ └── Plans.zh-hant.svg ├── readme_icon_acknowledgements.png ├── readme_icon_android.png ├── readme_icon_community.png ├── readme_icon_disclaimer.png ├── readme_icon_donate.png ├── readme_icon_features.png ├── readme_icon_github.png ├── readme_icon_install.png ├── readme_icon_ios.png ├── readme_icon_otherrepos.png ├── readme_icon_plans.png ├── readme_icon_progress.png ├── readme_icon_screenshots.png └── splash.png └── scripts ├── build.ps1 ├── build.sh ├── hot.sh └── install.sh /.deepsource.toml: -------------------------------------------------------------------------------- 1 | version = 1 2 | 3 | [[analyzers]] 4 | name = "javascript" 5 | enabled = true 6 | 7 | [analyzers.meta] 8 | plugins = ["vue"] 9 | 10 | [[transformers]] 11 | name = "prettier" 12 | enabled = true -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | ko_fi: vuetube 2 | github: [frontesque, picklenik, 404-Program-not-found] 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-report.yml: -------------------------------------------------------------------------------- 1 | name: 🐞 Issue Report 2 | description: Report a issue in VueTube 3 | labels: [bug] 4 | body: 5 | 6 | - type: textarea 7 | id: reproduce-steps 8 | attributes: 9 | label: Steps to reproduce 10 | description: Provide an example of the issue. 11 | placeholder: | 12 | Example: 13 | 1. First step 14 | 2. Second step 15 | 3. Issue here 16 | validations: 17 | required: true 18 | 19 | - type: textarea 20 | id: expected-behavior 21 | attributes: 22 | label: Expected behavior 23 | placeholder: | 24 | Example: 25 | "This should happen..." 26 | validations: 27 | required: true 28 | 29 | - type: textarea 30 | id: actual-behavior 31 | attributes: 32 | label: Actual behavior 33 | placeholder: | 34 | Example: 35 | "This happened instead..." 36 | validations: 37 | required: true 38 | 39 | - type: input 40 | id: vuetube-version 41 | attributes: 42 | label: VueTube version 43 | description: | 44 | You can find your VueTube version in **Settings/About** within the app. 45 | placeholder: | 46 | Example: "619c416" 47 | validations: 48 | required: true 49 | 50 | - type: input 51 | id: android-version 52 | attributes: 53 | label: Android version 54 | description: | 55 | You can find this somewhere in your Android settings. 56 | placeholder: | 57 | Example: "Android 12" 58 | validations: 59 | required: true 60 | 61 | - type: input 62 | id: device-type 63 | attributes: 64 | label: Device 65 | description: | 66 | The make and model of your device. 67 | placeholder: | 68 | Example: "Google Pixel 6 Pro" 69 | validations: 70 | required: true 71 | 72 | - type: textarea 73 | id: other-details 74 | attributes: 75 | label: Other details 76 | placeholder: | 77 | Additional details and attachments. 78 | 79 | - type: checkboxes 80 | id: acknowledgements 81 | attributes: 82 | label: Acknowledgements 83 | description: Your issue will be closed if you haven't done these steps. 84 | options: 85 | - label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open issue. 86 | required: true 87 | - label: I have written a short but informative title. 88 | required: true 89 | - label: I have updated the app to unstable version **[Latest](https://vuetube.app/install/)**. 90 | required: true 91 | - label: I will fill out all of the requested information in this form. 92 | required: true 93 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: 💬 Discord 4 | url: https://vuetube.app/discord 5 | about: Join the Discord server to chat and ask questions (recommended) 6 | - name: 💬 Telegram 7 | url: https://t.me/vuetube 8 | about: Join the Telegram group to chat and ask questions 9 | - name: 🌐 VueTube website 10 | url: https://vuetube.app/ 11 | about: For example, to check FAQ before asking frecuently asked questions (wait... then they won't be frequently asked questions?) 12 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.yml: -------------------------------------------------------------------------------- 1 | name: ⭐ Feature request 2 | description: Suggest a feature to improve the app 3 | labels: [feature request] 4 | body: 5 | 6 | - type: textarea 7 | id: feature-description 8 | attributes: 9 | label: Describe your suggested feature 10 | description: How can an existing source be improved? 11 | placeholder: | 12 | Example: 13 | "It should work like this..." 14 | validations: 15 | required: true 16 | 17 | - type: textarea 18 | id: other-details 19 | attributes: 20 | label: Other details 21 | placeholder: | 22 | Additional details and attachments. 23 | 24 | - type: checkboxes 25 | id: acknowledgements 26 | attributes: 27 | label: Acknowledgements 28 | description: Your issue will be closed if you haven't done these steps. 29 | options: 30 | - label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open issue. 31 | required: true 32 | - label: I have written a short but informative title. 33 | required: true 34 | - label: I will fill out all of the requested information in this form. 35 | required: true 36 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.yml: -------------------------------------------------------------------------------- 1 | name: ❓ Question 2 | description: Ask a quesion related to VueTube 3 | labels: [question] 4 | body: 5 | 6 | - type: textarea 7 | id: question 8 | attributes: 9 | label: Ask your question 10 | description: What do you want to know? 11 | placeholder: | 12 | Example: 13 | "How do I add a plugin?" 14 | validations: 15 | required: true 16 | 17 | - type: textarea 18 | id: aditional-info 19 | attributes: 20 | label: Aditional information 21 | placeholder: | 22 | Additional useful information, for example, a screenshot. 23 | 24 | - type: checkboxes 25 | id: acknowledgements 26 | attributes: 27 | label: Acknowledgements 28 | description: Your question will be closed if you haven't done these steps. 29 | options: 30 | - label: I have searched the existing issues and this is a new question, **NOT** a duplicate or related to another open issue. 31 | required: true 32 | - label: I have written a short but informative title. 33 | required: true 34 | - label: I will fill out all of the requested information in this form. 35 | required: true 36 | - label: My question isn't asked in FAQ (Frequently Asked Questions). 37 | required: true 38 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 2 | 3 | version: 2 4 | updates: 5 | - package-ecosystem: "npm" 6 | directory: "/" 7 | schedule: 8 | interval: "weekly" 9 | ignore: 10 | - dependency-name: "*" 11 | update-types: ["version-update:semver-major"] 12 | - package-ecosystem: "npm" 13 | directory: "/NUXT/" 14 | schedule: 15 | interval: "weekly" 16 | ignore: 17 | - dependency-name: "*" 18 | update-types: ["version-update:semver-major"] 19 | - package-ecosystem: "github-actions" 20 | directory: "/" 21 | schedule: 22 | interval: "weekly" 23 | ignore: 24 | - dependency-name: "*" 25 | update-types: ["version-update:semver-major"] 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | nuxt/dist 4 | dist 5 | package-lock.json 6 | temp.js 7 | temp.json 8 | .vscode/settings.json 9 | .idea 10 | 11 | # Capacitor Splash Screens 12 | resources/android 13 | resources/ios -------------------------------------------------------------------------------- /NUXT/.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /NUXT/.eslintignore: -------------------------------------------------------------------------------- 1 | # js vendor file with import/require 2 | assets/vendor/** 3 | # static vendor file . use with nuxt.config.js script 4 | static/** 5 | # dependencies 6 | node_modules 7 | # Nuxt build 8 | .nuxt 9 | # Nuxt generate 10 | dist 11 | -------------------------------------------------------------------------------- /NUXT/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true, 5 | browser: true, 6 | }, 7 | parserOptions: { 8 | parser: "babel-eslint", 9 | }, 10 | extends: [ 11 | "prettier", 12 | "eslint:recommended", 13 | "plugin:vue/recommended", 14 | "plugin:prettier/recommended", 15 | ], 16 | plugins: ["vue"], 17 | rules: { 18 | "vue/multi-word-component-names": 0, 19 | "no-console": process.env.NODE_ENV === "production" ? "warn" : "off", 20 | "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off", 21 | "prettier/prettier": ["error", {endOfLine: "auto"}] 22 | // 'prettier/prettier': ['error', { semi: false }], 23 | // semi: [2, 'never'], 24 | }, 25 | }; 26 | -------------------------------------------------------------------------------- /NUXT/.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /NUXT/.gitignore: -------------------------------------------------------------------------------- 1 | #IDEs 2 | .vscode 3 | # Logs 4 | logs 5 | *.log 6 | npm-debug.log* 7 | yarn-debug.log* 8 | yarn-error.log* 9 | 10 | # Runtime data 11 | pids 12 | *.pid 13 | *.seed 14 | *.pid.lock 15 | 16 | # Directory for instrumented libs generated by jscoverage/JSCover 17 | lib-cov 18 | 19 | # Coverage directory used by tools like istanbul 20 | coverage 21 | 22 | # nyc test coverage 23 | .nyc_output 24 | 25 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 26 | .grunt 27 | 28 | # Bower dependency directory (https://bower.io/) 29 | bower_components 30 | 31 | # node-waf configuration 32 | .lock-wscript 33 | 34 | # Compiled binary addons (https://nodejs.org/api/addons.html) 35 | build/Release 36 | 37 | # Dependency directories 38 | node_modules/ 39 | jspm_packages/ 40 | 41 | # TypeScript v1 declaration files 42 | typings/ 43 | 44 | # Optional npm cache directory 45 | .npm 46 | 47 | # Optional eslint cache 48 | .eslintcache 49 | 50 | # Optional REPL history 51 | .node_repl_history 52 | 53 | # Output of 'npm pack' 54 | *.tgz 55 | 56 | # Yarn Integrity file 57 | .yarn-integrity 58 | 59 | # dotenv environment variables file 60 | .env 61 | 62 | # parcel-bundler cache (https://parceljs.org/) 63 | .cache 64 | 65 | # next.js build output 66 | .next 67 | 68 | # nuxt.js build output 69 | .nuxt 70 | 71 | # vuepress build output 72 | .vuepress/dist 73 | 74 | # Serverless directories 75 | .serverless 76 | 77 | # FuseBox cache 78 | .fusebox/ 79 | -------------------------------------------------------------------------------- /NUXT/assets/variables.scss: -------------------------------------------------------------------------------- 1 | // Ref: https://github.com/nuxt-community/vuetify-module#customvariables 2 | // 3 | // The variables you want to modify 4 | // $font-size-root: 20px; 5 | -------------------------------------------------------------------------------- /NUXT/components/Comments/authorCommentBadgeRenderer.vue: -------------------------------------------------------------------------------- 1 | 16 | 34 | 35 | 42 | -------------------------------------------------------------------------------- /NUXT/components/Comments/commentsHeaderRenderer.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 40 | 41 | 62 | -------------------------------------------------------------------------------- /NUXT/components/Comments/mainCommentReplyRenderer.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 47 | -------------------------------------------------------------------------------- /NUXT/components/Comments/sponsorCommentBadgeRenderer.vue: -------------------------------------------------------------------------------- 1 | 20 | 30 | 31 | 44 | -------------------------------------------------------------------------------- /NUXT/components/CompactRenderers/compactVideoRenderer.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 50 | -------------------------------------------------------------------------------- /NUXT/components/ListRenderers/horizontalListRenderer.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 40 | -------------------------------------------------------------------------------- /NUXT/components/ListRenderers/sectionListRenderer.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 36 | -------------------------------------------------------------------------------- /NUXT/components/ListRenderers/verticalListRenderer.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 36 | -------------------------------------------------------------------------------- /NUXT/components/Player/captions.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /NUXT/components/Player/close.vue: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /NUXT/components/Player/fscontrols.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 64 | -------------------------------------------------------------------------------- /NUXT/components/Player/fullscreen.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 20 | -------------------------------------------------------------------------------- /NUXT/components/Player/loop.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 23 | -------------------------------------------------------------------------------- /NUXT/components/Player/minimize.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /NUXT/components/Player/playpause.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 33 | -------------------------------------------------------------------------------- /NUXT/components/Player/progressbar.vue: -------------------------------------------------------------------------------- 1 | 22 | 49 | -------------------------------------------------------------------------------- /NUXT/components/Player/speed.vue: -------------------------------------------------------------------------------- 1 | 60 | 61 | 76 | -------------------------------------------------------------------------------- /NUXT/components/Player/sponsorblock.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 64 | -------------------------------------------------------------------------------- /NUXT/components/Player/watchtime.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 30 | -------------------------------------------------------------------------------- /NUXT/components/Playlist/playlistAlert.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 42 | -------------------------------------------------------------------------------- /NUXT/components/SectionRenderers/itemSectionRenderer.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 34 | 35 | 57 | -------------------------------------------------------------------------------- /NUXT/components/SectionRenderers/shelfRenderer.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 52 | 53 | 59 | -------------------------------------------------------------------------------- /NUXT/components/Settings/language.vue: -------------------------------------------------------------------------------- 1 | 41 | 42 | 94 | -------------------------------------------------------------------------------- /NUXT/components/UtilRenderers/YtTextFormatter.vue: -------------------------------------------------------------------------------- 1 | 44 | 45 | 63 | -------------------------------------------------------------------------------- /NUXT/components/UtilRenderers/collapsableText.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 75 | 76 | 101 | -------------------------------------------------------------------------------- /NUXT/components/UtilRenderers/slimVideoDescriptionRenderer.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 18 | 19 | 25 | -------------------------------------------------------------------------------- /NUXT/components/communityCard.vue: -------------------------------------------------------------------------------- 1 | 72 | -------------------------------------------------------------------------------- /NUXT/components/dialogBase.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 31 | -------------------------------------------------------------------------------- /NUXT/components/gridRenderers/gridVideoRenderer.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 52 | -------------------------------------------------------------------------------- /NUXT/components/gridRenderers/videoWithContextRenderer.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 63 | -------------------------------------------------------------------------------- /NUXT/components/historyCard.vue: -------------------------------------------------------------------------------- 1 | 86 | 87 | 102 | -------------------------------------------------------------------------------- /NUXT/components/observer.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 26 | -------------------------------------------------------------------------------- /NUXT/components/updateChecker.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 24 | 25 | 45 | -------------------------------------------------------------------------------- /NUXT/components/vidLoadRenderer.vue: -------------------------------------------------------------------------------- 1 | // this is an loading animation for videos 2 | 9 | 10 | 15 | -------------------------------------------------------------------------------- /NUXT/layouts/empty.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /NUXT/layouts/error.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 37 | -------------------------------------------------------------------------------- /NUXT/nuxt.config.js: -------------------------------------------------------------------------------- 1 | /**** Front's Notes / Don't Remove **** 2 | * Data Storage: 3 | * localStorage.setItem("key", data) 4 | * localStorage.getItem('key') 5 | * this.$router.push("PageName"); 6 | */ 7 | 8 | export default { 9 | //--- VueTube Stuff ---// 10 | env: { 11 | channel: "Unstable", 12 | version: "dev-local", 13 | }, 14 | 15 | target: "static", 16 | ssr: false, 17 | 18 | plugins: [ 19 | { src: "~/plugins/youtube", mode: "client" }, 20 | { src: "~/plugins/vuetube", mode: "client" }, 21 | { src: "~/plugins/ryd", mode: "client" }, 22 | { src: "~/plugins/thirdPartyPluginLoader", mode: "client" }, 23 | { src: "~/plugins/language", mode: "client" }, 24 | { src: "~/plugins/update", mode: "client" }, 25 | ], 26 | generate: { 27 | dir: "../dist", 28 | }, 29 | 30 | //--- VueTube Debugging ---// 31 | server: { 32 | port: 3000, // default: 3000 (Note: Running on ports below 1024 requires root privileges!) 33 | host: "localhost", // default: localhost, 34 | timing: false, 35 | }, 36 | 37 | //--- Default NUXT Stuff ---// 38 | head: { 39 | title: "VueTube", 40 | htmlAttrs: { 41 | lang: "en", 42 | }, 43 | meta: [ 44 | { charset: "utf-8" }, 45 | { 46 | name: "viewport", 47 | content: 48 | "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover", 49 | }, 50 | { name: "format-detection", content: "telephone=no" }, 51 | ], 52 | }, 53 | 54 | css: [], 55 | components: true, 56 | 57 | buildModules: ["@nuxtjs/vuetify"], 58 | modules: [], 59 | 60 | vuetify: { 61 | customVariables: ["~/assets/variables.scss"], 62 | treeShake: true, 63 | theme: { 64 | dark: true, 65 | options: { 66 | customProperties: true, 67 | }, 68 | themes: { 69 | light: { 70 | primary: "#136458", 71 | background: "#ffffff", 72 | }, 73 | dark: { 74 | primary: "#00d7cd", 75 | background: "#000000", 76 | }, 77 | }, 78 | }, 79 | }, 80 | }; 81 | -------------------------------------------------------------------------------- /NUXT/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vuetube", 3 | "version": "1.0.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "nuxt", 7 | "start": "nuxt generate", 8 | "build": "nuxt generate", 9 | "generate": "nuxt generate", 10 | "lint": "eslint --fix --ext .js,.vue --ignore-path .eslintignore ." 11 | }, 12 | "dependencies": { 13 | "@capacitor/splash-screen": "^1.2.2", 14 | "@capacitor/status-bar": "^1.0.8", 15 | "core-js": "^3.25.0", 16 | "nuxt": "^2.15.8", 17 | "uuid": "^9.0.0", 18 | "vue": "^2.7.10", 19 | "vue-server-renderer": "^2.7.10", 20 | "vue-template-compiler": "^2.7.10", 21 | "vuetify": "^2.6.9", 22 | "webpack": "^4.46.0" 23 | }, 24 | "devDependencies": { 25 | "@nuxtjs/vuetify": "^1.12.3", 26 | "babel-eslint": "^10.1.0", 27 | "eslint": "^7.32.0", 28 | "eslint-config-prettier": "^8.3.0", 29 | "eslint-loader": "^4.0.2", 30 | "eslint-plugin-prettier": "^4.2.1", 31 | "eslint-plugin-vue": "^8.2.0", 32 | "prettier": "^2.5.1" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /NUXT/pages/activities/update.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 24 | 25 | 53 | -------------------------------------------------------------------------------- /NUXT/pages/channel/about.vue: -------------------------------------------------------------------------------- 1 | 24 | -------------------------------------------------------------------------------- /NUXT/pages/channel/channels.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 22 | -------------------------------------------------------------------------------- /NUXT/pages/channel/community.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 23 | -------------------------------------------------------------------------------- /NUXT/pages/channel/index.vue: -------------------------------------------------------------------------------- 1 | 46 | -------------------------------------------------------------------------------- /NUXT/pages/channel/playlists.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /NUXT/pages/channel/videos.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /NUXT/pages/history.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | -------------------------------------------------------------------------------- /NUXT/pages/home.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 78 | 83 | -------------------------------------------------------------------------------- /NUXT/pages/mods/plugins.vue: -------------------------------------------------------------------------------- 1 | 32 | 33 | 39 | 40 | 79 | -------------------------------------------------------------------------------- /NUXT/pages/mods/startup.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 69 | 70 | 79 | -------------------------------------------------------------------------------- /NUXT/pages/playlist.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 31 | -------------------------------------------------------------------------------- /NUXT/pages/search.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 49 | 50 | 63 | -------------------------------------------------------------------------------- /NUXT/pages/subscriptions.vue: -------------------------------------------------------------------------------- 1 | 22 | -------------------------------------------------------------------------------- /NUXT/plugins/classes/backHander.js: -------------------------------------------------------------------------------- 1 | import { App as CapacitorApp } from "@capacitor/app"; 2 | import { Capacitor } from "@capacitor/core"; 3 | import backType from "./backType"; 4 | export default class backHandler { 5 | constructor() { 6 | this.backStack = []; // This should only contain instances of backType. Any other type will be ignored. 7 | if (Capacitor.getPlatform() != "web") this.startUp(); // Only run on native platforms. 8 | } 9 | 10 | startUp() { 11 | this.reset(); 12 | 13 | // Add a listener for the back button. 14 | this.backHandler = CapacitorApp.addListener("backButton", (context) => { 15 | this.back(context); 16 | }); 17 | 18 | // Start garbage collection. Run every 5 minutes. 19 | setInterval(() => { 20 | () => { 21 | this.garbageCollect; 22 | }; 23 | }, 5 * 60 * 1000); 24 | } 25 | 26 | reset() { 27 | this.backStack = []; 28 | } 29 | 30 | back({ canGoBack }) { 31 | console.log("backStack", this.backStack); 32 | // Check if backStack contains any backType objects. If so, call the goBack() function. 33 | if (this.backStack.length > 0) { 34 | // Loop through the backStack array. 35 | let lastResult = false; 36 | while (!lastResult && this.backStack.length > 0) { 37 | const backAction = this.backStack.pop(); 38 | lastResult = backAction.goBack(); 39 | } 40 | // Since a function was successfully called, no need to continue. 41 | if (lastResult) return; 42 | } 43 | if (!canGoBack) { 44 | // If we can't go back, then we should exit the app. 45 | CapacitorApp.exitApp(); 46 | } else { 47 | // If we can go back, then we should go back. 48 | window.history.back(); 49 | } 50 | } 51 | 52 | addAction(callback) { 53 | if (callback instanceof backType) { 54 | this.backStack.push(callback); 55 | } else { 56 | throw new TypeError("backType object expected"); 57 | } 58 | } 59 | 60 | // Loops through the backStack array if array larger than 10. If backType.check() returns false, then remove it from the backStack array. 61 | garbageCollect() { 62 | if (this.backStack.length > 10) { 63 | this.backStack = this.backStack.filter((backType) => backType.check()); 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /NUXT/plugins/classes/backType.js: -------------------------------------------------------------------------------- 1 | // This is the class that populates the backStack array in the backHandler class. 2 | export default class backType { 3 | constructor(callback, check) { 4 | this.callback = callback; 5 | this.check = check || (() => true); 6 | } 7 | 8 | goBack() { 9 | if (this.check()) { 10 | this.callback(); 11 | return true; 12 | } else { 13 | return false; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /NUXT/plugins/language.js: -------------------------------------------------------------------------------- 1 | const packs = { 2 | arabic: require("./languages/arabic"), 3 | azerbaijan: require("./languages/azerbaijan"), 4 | bengali: require("./languages/bengali"), 5 | "brazilian-portuguese": require("./languages/brazilian-portuguese"), 6 | bulgarian: require("./languages/bulgarian"), 7 | "chinese-simplified": require("./languages/chinese-simplified"), 8 | "chinese-traditional": require("./languages/chinese-traditional"), 9 | czech: require("./languages/czech"), 10 | dutch: require("./languages/dutch"), 11 | english: require("./languages/english"), 12 | estonian: require("./languages/estonian"), 13 | "french-fr": require("./languages/french-fr"), 14 | german: require("./languages/german"), 15 | hindi: require("./languages/hindi"), 16 | marathi: require("./languages/marathi"), 17 | hungarian: require("./languages/hungarian"), 18 | indonesian: require("./languages/indonesian"), 19 | italian: require("./languages/italian"), 20 | japanese: require("./languages/japanese"), 21 | korean: require("./languages/korean"), 22 | macedonian: require("./languages/macedonian"), 23 | malay: require("./languages/malay"), 24 | polish: require("./languages/polish"), 25 | romanian: require("./languages/romanian"), 26 | russian: require("./languages/russian"), 27 | serbian: require("./languages/serbian"), 28 | slovenian: require("./languages/slovenian"), 29 | spanish: require("./languages/spanish"), 30 | tamil: require("./languages/tamil"), 31 | turkish: require("./languages/turkish"), 32 | ukrainian: require("./languages/ukrainian"), 33 | vietnamese: require("./languages/vietnamese"), 34 | }; 35 | 36 | function module(subPack, listPacks) { 37 | //--- List All Packs ---// 38 | if (listPacks === true) return packs; 39 | 40 | //--- Return Language Pack ---// 41 | const selectedLanguage = localStorage.getItem("language") || "english"; 42 | const languagePack = packs[selectedLanguage]; 43 | 44 | //--- Send Full Language Pack ---// 45 | if (!subPack) return languagePack; 46 | //--- Allow Subpack Fallback ---// 47 | let builtSubPack = new Object(); 48 | for (const i in packs.english[subPack]) { 49 | const englishEntry = packs.english[subPack][i]; 50 | const entry = languagePack[subPack][i]; 51 | 52 | if (!entry) { 53 | builtSubPack[i] = englishEntry; 54 | } else { 55 | builtSubPack[i] = entry; 56 | } 57 | 58 | 59 | } 60 | //--- Return Built Subpack ---// 61 | console.log("RETURNING:",builtSubPack) 62 | return builtSubPack; 63 | } 64 | 65 | export default ({ app }, inject) => { 66 | inject("lang", module); 67 | }; 68 | -------------------------------------------------------------------------------- /NUXT/plugins/languages/Slovak.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "Slovenština", 3 | 4 | global: { 5 | home: "Domov", 6 | subscriptions: "Odbery", 7 | library: "Knižnica", 8 | restart: "Reštartovať", 9 | later: "neskôr", 10 | settingRestart: "Úpravy týchto nastavení vyžaduje reštart aplikácie pre prevedenie zmien." 11 | }, 12 | 13 | index: { 14 | connecting: "Pripojovanie", 15 | plugins: "Načítanie doplnkov", 16 | launching: "Spúšťanie", 17 | }, 18 | 19 | settings: { 20 | general: "Obecne", 21 | theme: "Téma", 22 | player: "Prehrávač", 23 | uitweaker: "Rozhranie", 24 | startupoptions: "Možnosti spustenie", 25 | plugins: "Doplnky", 26 | updates: "Aktualizácie", 27 | logs: "Protokol", 28 | about: "O aplikácii", 29 | devmode: "Editor registrov", 30 | }, 31 | 32 | mods: { 33 | general: { 34 | language: "Jazyk", 35 | }, 36 | theme: { 37 | normal: "Normálne", 38 | adaptive: "Adaptívne", 39 | custom: "Vlastné", 40 | dark: "Tmavé", 41 | black: "Čierne", 42 | darkmode: "Tmavý režim", 43 | darkmodetagline: "Bravo Six, Going Dark.", 44 | }, 45 | tweaks: { 46 | fullscreen: "Celá obrazovka", 47 | navbarblur: "Rozmazať navigačnú lištu", 48 | roundedcorners: "Zakulatené rohy", 49 | roundthumbnails: "Zakulatené Náhledy", 50 | roundwatchpagecomponents: "Zakulatené komponenty stránky sledovanie", 51 | radius: "Polomer", 52 | }, 53 | startup: { 54 | defaultpage: "Výchozia stránka", 55 | }, 56 | updates: { 57 | install: "Inštalovať", 58 | view: "Zobraziť", 59 | latest: "Najnovšie", 60 | installed: "Nainštalované", 61 | }, 62 | logs: { 63 | more: "Viac", 64 | }, 65 | about: { 66 | appinformation: "Informácie o aplikácii", 67 | appversion: "Verzia aplikácie", 68 | deviceinformation: "Informácie o zariadení", 69 | platform: "Platforma", 70 | os: "Operačný systém", 71 | model: "Model", 72 | manufacturer: "Výrobca", 73 | emulator: "Emulátor", 74 | github: "GitHub", 75 | discord: "Discord", 76 | }, 77 | }, 78 | 79 | events: { 80 | welcome: "Vitajte vo VueTube", 81 | tagline: "Budúcnosti streamovania videí", 82 | next: "Ďalší", 83 | updated: "VueTube bol aktualizován!", 84 | awesome: "Úžasne!", 85 | langsetup: "Poďme si vybrať jazyk!", 86 | featuresetup: "Vyberťe si pár funkcií", 87 | enableryd: "Povoliť Return YouTube Dislike", 88 | enablespb: "Povoliť SponsorBlock", 89 | thanks: "Ďakujeme za používanie VueTube", 90 | enjoy: "Dúfame, že sa vám aplikácie bude ľúbiť", 91 | packageinstaller: "Vyberte balíček ku sťaženie" 92 | }, 93 | }; 94 | -------------------------------------------------------------------------------- /NUXT/plugins/languages/arabic.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "Arabic", 3 | 4 | global: { 5 | home: "الصفحة الرئيسية", 6 | subscriptions: "الاشتراكات", 7 | library: "المكتبة", 8 | restart: "إعادة", 9 | later: "لاحقًا", 10 | settingRestart: "تعديل هذا الخيار يُلزم التطبيق بأن يعاد تشغيله لتطبيق التغيرات" 11 | }, 12 | 13 | index: { 14 | connecting: "جاري الاتصال", 15 | plugins: "يتم تحميل الإضافات", 16 | launching: "جاري التشغيل", 17 | }, 18 | 19 | settings: { 20 | general: "عام", 21 | theme: "الثيمات", 22 | player: "المشغل", 23 | uitweaker: "معدِّل الواجهة", 24 | startupoptions: "خيارات التشغيل", 25 | plugins: "الإضافات", 26 | updates: "التحديثات", 27 | logs: "السجلات", 28 | about: "حول", 29 | devmode: "معدِّل السجلات", 30 | }, 31 | 32 | mods: { 33 | general: { 34 | language: "اللغة", 35 | }, 36 | theme: { 37 | normal: "عادي", 38 | adaptive: "متكيف", 39 | custom: "مخصص", 40 | dark: "داكن", 41 | black: "أسود", 42 | darkmode: "الوضع الداكن", 43 | darkmodetagline: "احسنت ، يتم التغيير للوضع الداكن", 44 | }, 45 | tweaks: { 46 | fullscreen: "شاشة كاملة", 47 | navbarblur: "ضبابية شريط التنقل", 48 | roundedcorners: "حواف مدورة", 49 | roundthumbnails: "صور مصغرة مدورة", 50 | roundwatchpagecomponents: "موارد صفحة المشاهدة مدورة", 51 | radius: "كمية التدوير", 52 | }, 53 | startup: { 54 | defaultpage: "الصفحة الافتراضية", 55 | }, 56 | updates: { 57 | checking: "يتم التحقق من التحديثات", 58 | available: "تحديث متوفر", 59 | noupdate: "لا يتوفر تحديثات", 60 | noupdatemessage: "أنت تستخدم أحدث إصدار من فيوتيوب ، تحقق من التحديثات لاحقا", 61 | 62 | installed: "النسخة المثبتة", 63 | latest: "أحدث نسخة", 64 | 65 | okay: "حسنا", 66 | update: "تحديث", 67 | later: "لاحقا", 68 | }, 69 | logs: { 70 | more: "المزيد", 71 | }, 72 | about: { 73 | appinformation: "معلومات التطبيق", 74 | appversion: "إصدار التطبيق", 75 | deviceinformation: "معلومات الجهاز", 76 | platform: "المنصة", 77 | os: "نظام التشغيل", 78 | model: "الموديل", 79 | manufacturer: "الشركة المصنعة", 80 | emulator: "المحاكي", 81 | github: "جيتهب", 82 | discord: "ديسكورد", 83 | }, 84 | }, 85 | 86 | events: { 87 | welcome: "أهلا بك إلى فيوتيوب", 88 | tagline: "مستقبل بث الفيديوهات", 89 | next: "التالي", 90 | updated: "فيوتيوب كان محدثا", 91 | awesome: "رائع", 92 | langsetup: "لنختار اللغة", 93 | featuresetup: "لنختار بعض الميزات", 94 | enableryd: "تفعيل ReuturnYoutubeDislikes", 95 | enablespb: "تفعيل sponsorblock", 96 | thanks: "شكرا لاستخدامك فيوتيوب", 97 | enjoy: "نتمنى لك تجربة ممتازة", 98 | packageinstaller: "اختر حزمة للتحميل" 99 | }, 100 | }; 101 | -------------------------------------------------------------------------------- /NUXT/plugins/languages/brazilian-portuguese.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "Português Brasileiro", 3 | 4 | global: { 5 | home: "Início", 6 | subscriptions: "Inscrições", 7 | library: "Biblioteca", 8 | }, 9 | 10 | index: { 11 | connecting: "Conectando", 12 | launching: "Iniciando", 13 | }, 14 | 15 | settings: { 16 | general: "Geral", 17 | theme: "Tema", 18 | player: "Reprodutor", 19 | uitweaker: "Interface", 20 | startupoptions: "Opções de início", 21 | plugins: "Plugins", 22 | updates: "Atualizações", 23 | logs: "Logs", 24 | about: "Sobre", 25 | devmode: "Editor de registro", 26 | }, 27 | 28 | mods: { 29 | general: { 30 | language: "Idioma", 31 | }, 32 | theme: { 33 | normal: "Normal", 34 | adaptive: "Adaptado", 35 | custom: "Customizado", 36 | dark: "Escuro", 37 | black: "Preto", 38 | darkmode: "Modo Escuro", 39 | darkmodetagline: "Bravo Six, Escurecendo.", 40 | }, 41 | tweaks: { 42 | fullscreen: "Tela Cheia", 43 | navbarblur: "Desfoque da Barra De Nav", 44 | roundedcorners: "Bordas Arredondadas", 45 | roundthumbnails: "Arredondar Thumbnails", 46 | roundwatchpagecomponents: "Arredondar elementos da tela de reprodução", 47 | radius: "Grau", 48 | }, 49 | startup: { 50 | defaultpage: "Página Padrão", 51 | }, 52 | updates: { 53 | install: "Instalar", 54 | view: "Ver", 55 | latest: "Última", 56 | installed: "Instalado", 57 | }, 58 | logs: { 59 | more: "Mais", 60 | }, 61 | about: { 62 | appinformation: "Informação do App", 63 | appversion: "Versão", 64 | deviceinformation: "Informação do Dispositivo", 65 | platform: "Plataforma", 66 | os: "Sistema Operacional", 67 | model: "Modelo", 68 | manufacturer: "Fabricante", 69 | emulator: "Emulador", 70 | github: "GitHub", 71 | discord: "Discord", 72 | }, 73 | }, 74 | 75 | events: { 76 | welcome: "Bem vindo ao VueTube", 77 | tagline: "O futuro de streaming de video", 78 | next: "Próximo", 79 | updated: "VueTube atualizado com sucesso!", 80 | awesome: "Incrível!", 81 | }, 82 | }; 83 | -------------------------------------------------------------------------------- /NUXT/plugins/languages/bulgarian.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "Български", 3 | 4 | global: { 5 | home: "Начална Страница", 6 | subscriptions: "Абонаменти", 7 | library: "Библиотека", 8 | }, 9 | 10 | index: { 11 | connecting: "Свързване", 12 | launching: "Стартиране", 13 | }, 14 | 15 | settings: { 16 | general: "Основни", 17 | theme: "Теми", 18 | player: "Плейър", 19 | uitweaker: "Опции За ПИ", 20 | startupoptions: "Опции За Стартиране", 21 | plugins: "Разширения", 22 | updates: "Актуализации", 23 | logs: "Дневници", 24 | about: "Относно VueTube", 25 | devmode: "Редактор На Регистъра", 26 | }, 27 | 28 | mods: { 29 | general: { 30 | language: "Език", 31 | }, 32 | theme: { 33 | normal: "Нормална", 34 | adaptive: "Адаптивна", 35 | custom: "Персонализирана", 36 | dark: "Тъмна", 37 | black: "Черна", 38 | darkmode: "Тъмен Режим", 39 | darkmodetagline: "Браво Шест, Навлизаме В Мрака.", 40 | }, 41 | tweaks: { 42 | fullscreen: "Цял Екран", 43 | navbarblur: "Замъгляване На Лентата", 44 | roundedcorners: "Заоблени Ъгли", 45 | roundthumbnails: "Заоблени Снимки", 46 | roundwatchpagecomponents: "Заоблени Компоненти На Страницата За Гледане", 47 | radius: "Радиус", 48 | }, 49 | startup: { 50 | defaultpage: "Страница По Подразбиране", 51 | }, 52 | updates: { 53 | install: "Инсталиране", 54 | view: "Преглед", 55 | latest: "Най-Нови", 56 | installed: "Инсталирана", 57 | }, 58 | logs: { 59 | more: "Още", 60 | }, 61 | about: { 62 | appinformation: "Информация За Приложението", 63 | appversion: "Версия На Приложението", 64 | deviceinformation: "Информация За Устройството", 65 | platform: "Платформа", 66 | os: "Операционна Система", 67 | model: "Модел", 68 | manufacturer: "Производител", 69 | emulator: "Емулатор", 70 | github: "GitHub", 71 | discord: "Discord", 72 | }, 73 | }, 74 | 75 | events: { 76 | welcome: "Добре Дошли Във VueTube", 77 | tagline: "Бъдещето На Видеострийминга", 78 | next: "Следващ", 79 | updated: "VueTube Беше Актуализиран!", 80 | awesome: "Поздравления!", 81 | }, 82 | }; 83 | -------------------------------------------------------------------------------- /NUXT/plugins/languages/czech.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "Čeština", 3 | 4 | global: { 5 | home: "Domů", 6 | subscriptions: "Odběry", 7 | library: "Knihovna", 8 | restart: "Restartovat", 9 | later: "Později", 10 | settingRestart: "Úprava tohoto nastavení vyžaduje restartování aplikace pro provedení změn." 11 | }, 12 | 13 | index: { 14 | connecting: "Připojování", 15 | plugins: "Načítání doplňků", 16 | launching: "Spouštění", 17 | }, 18 | 19 | settings: { 20 | general: "Obecné", 21 | theme: "Téma", 22 | player: "Přehrávač", 23 | uitweaker: "Rozhraní", 24 | startupoptions: "Možnosti spuštění", 25 | plugins: "Doplňky", 26 | updates: "Aktualizace", 27 | logs: "Protokol", 28 | about: "O aplikaci", 29 | devmode: "Editor registrů", 30 | }, 31 | 32 | mods: { 33 | general: { 34 | language: "Jazyk", 35 | }, 36 | theme: { 37 | normal: "Normální", 38 | adaptive: "Adaptivní", 39 | custom: "Vlastní", 40 | dark: "Tmavé", 41 | black: "Černé", 42 | darkmode: "Tmavý režim", 43 | darkmodetagline: "Bravo Six, Going Dark.", 44 | }, 45 | tweaks: { 46 | fullscreen: "Celá obrazovka", 47 | navbarblur: "Rozmazat navigační lištu", 48 | roundedcorners: "Zakulacené rohy", 49 | roundthumbnails: "Zakulacené náhledy", 50 | roundwatchpagecomponents: "Zakulacené komponenty stránky sledování", 51 | radius: "Poloměr", 52 | }, 53 | startup: { 54 | defaultpage: "Výchozí stránka", 55 | }, 56 | updates: { 57 | install: "Instalovat", 58 | view: "Zobrazit", 59 | latest: "Nejnovější", 60 | installed: "Nainstalováno", 61 | }, 62 | logs: { 63 | more: "Více", 64 | }, 65 | about: { 66 | appinformation: "Informace o aplikaci", 67 | appversion: "Verze aplikace", 68 | deviceinformation: "Informace o zařízení", 69 | platform: "Platforma", 70 | os: "Operační systém", 71 | model: "Model", 72 | manufacturer: "Výrobce", 73 | emulator: "Emulátor", 74 | github: "GitHub", 75 | discord: "Discord", 76 | }, 77 | }, 78 | 79 | events: { 80 | welcome: "Vítejte ve VueTube", 81 | tagline: "Budoucnosti streamování videa", 82 | next: "Další", 83 | updated: "VueTube byl aktualizován!", 84 | awesome: "Úžasné!", 85 | langsetup: "Pojďme si vybrat jazyk!", 86 | featuresetup: "Vyberte si pár funkcí", 87 | enableryd: "Povolit Return YouTube Dislike", 88 | enablespb: "Povolit SponsorBlock", 89 | thanks: "Děkujeme za používání VueTube", 90 | enjoy: "Doufáme, že se vám aplikace bude líbit", 91 | packageinstaller: "Vyberte balíček ke stažení" 92 | }, 93 | }; 94 | -------------------------------------------------------------------------------- /NUXT/plugins/languages/dutch.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "Nederlands", 3 | 4 | global: { 5 | home: "Home", 6 | subscriptions: "Abonnementen", 7 | library: "Bibliotheek", 8 | restart: "Start nu opnieuw op", 9 | later: "Later", 10 | settingRestart: "Het wijzigen van deze instelling vereist dat de app opnieuw wordt opgestart om de instellingen toe te passen." 11 | }, 12 | 13 | index: { 14 | connecting: "Verbinden", 15 | plugins: "Plugins Laden", 16 | launching: "Opstarten" 17 | }, 18 | 19 | settings: { 20 | general: "Algemeen", 21 | theme: "Thema", 22 | player: "Videospeler", 23 | uitweaker: "Gebruikersinterface", 24 | startupoptions: "Opstartopties", 25 | plugins: "Plugins", 26 | updates: "Updates", 27 | logs: "Logboeken", 28 | about: "Over", 29 | devmode: "Register bewerken" 30 | }, 31 | 32 | mods: { 33 | general: { 34 | language: "Taal" 35 | }, 36 | theme: { 37 | normal: "Normaal", 38 | adaptive: "Adaptief", 39 | custom: "Aangepast", 40 | dark: "Donker", 41 | black: "Zwart", 42 | darkmode: "Donkere modus", 43 | darkmodetagline: "Bravo Six, Going Dark." 44 | }, 45 | tweaks: { 46 | fullscreen: "Volledig Scherm", 47 | navbarblur: "Vervaging Navigatiebalk", 48 | roundedcorners: "Afgeronde Hoeken", 49 | roundthumbnails: "Ronde Hoeken In Video Miniaturen", 50 | roundwatchpagecomponents: "Ronde Hoeken In Video Speler Componenten", 51 | radius: "Straal" 52 | }, 53 | startup: { 54 | defaultpage: "Standaard Pagina" 55 | }, 56 | updates: { 57 | install: "Installeer", 58 | view: "Bekijk", 59 | latest: "Laatste", 60 | installed: "Geïnstalleerd" 61 | }, 62 | logs: { 63 | more: "Meer" 64 | }, 65 | about: { 66 | appinformation: "Applicatieinformatie", 67 | appversion: "Applicatieversie", 68 | deviceinformation: "Apparaatinformatie", 69 | platform: "Platform", 70 | os: "Besturingssysteem", 71 | model: "Model", 72 | manufacturer: "Fabrikant", 73 | emulator: "Emulator", 74 | github: "GitHub", 75 | discord: "Discord" 76 | }, 77 | }, 78 | 79 | events: { 80 | welcome: "Welkom bij VueTube", 81 | tagline: "De toekomst van videostreaming", 82 | next: "Volgende", 83 | updated: "VueTube is bijgewerkt!", 84 | awesome: "Geweldig!", 85 | langsetup: "Laten we een taal kiezen!", 86 | featuresetup: "Laten we wat functies kiezen!", 87 | enableryd: "Return YouTube Dislike aanzetten", 88 | enablespb: "SponsorBlock aanzetten", 89 | thanks: "Bedankt dat je VueTube gebruikt", 90 | enjoy: "We hopen dat je een geweldige ervaring hebt", 91 | packageinstaller: "Selecteer een bestand om te downloaden" 92 | }, 93 | }; -------------------------------------------------------------------------------- /NUXT/plugins/languages/estonian.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "eesti", 3 | 4 | global: { 5 | home: "Avaleht", 6 | subscriptions: "Tellimused", 7 | library: "Kogu", 8 | restart: "Restart", 9 | later: "Hiljem", 10 | settingRestart: "Selle sätte muutmiseks on vaja rakendus taaskäivitada.", 11 | }, 12 | 13 | index: { 14 | connecting: "Ühendamine", 15 | plugins: "Laeb Pluginaid", 16 | launching: "Käivitamine", 17 | }, 18 | 19 | settings: { 20 | general: "Üldine", 21 | theme: "Teema", 22 | player: "Pleier", 23 | uitweaker: "UI Modifitseeria", 24 | startupoptions: "Käivitamise Valikud", 25 | plugins: "Pluginad", 26 | updates: "Värskendused", 27 | logs: "Logid", 28 | about: "Meist", 29 | devmode: "Registry Editor", 30 | }, 31 | 32 | mods: { 33 | general: { 34 | language: "Keel", 35 | }, 36 | theme: { 37 | normal: "Normaalne", 38 | adaptive: "Adaptiivne", 39 | custom: "Kohandatav", 40 | dark: "Tume", 41 | black: "Must", 42 | darkmode: "Tume teema", 43 | darkmodetagline: "Bravo Six, Going Dark.", 44 | }, 45 | tweaks: { 46 | fullscreen: "Täisekraan", 47 | navbarblur: "Navbar hägustamine", 48 | roundedcorners: "Ümarad Nurgad", 49 | roundthumbnails: "Ümarad pisipildid", 50 | roundwatchpagecomponents: "Ümarad Watch Page Komponendid", 51 | radius: "Raadius", 52 | }, 53 | startup: { 54 | defaultpage: "Vaikimisi Leht", 55 | }, 56 | updates: { 57 | install: "Installi", 58 | view: "Vaata", 59 | latest: "Uued", 60 | installed: "Installitud", 61 | }, 62 | logs: { 63 | more: "Veel", 64 | }, 65 | about: { 66 | appinformation: "Rakenduse Info", 67 | appversion: "Rakenduse Versioon", 68 | deviceinformation: "Seadme Ino", 69 | platform: "Platvirm", 70 | os: "Operatsioonisüsteem", 71 | model: "Mudel", 72 | manufacturer: "Tootja", 73 | emulator: "Emulaator", 74 | github: "GitHub", 75 | discord: "Discord", 76 | }, 77 | }, 78 | 79 | events: { 80 | welcome: "Tere tulemast VueTube'i", 81 | tagline: "Videode voogedastude tulevik", 82 | next: "Järgmine", 83 | updated: "VueTube Värskendatud!", 84 | awesome: "Lahe!", 85 | langsetup: "Valime Keele!", 86 | featuresetup: "Valime Nüüd Mõned Funktsioonid!", 87 | enableryd: "Luba Return YouTube Dislike", 88 | enablespb: "Luba SponsorBlock", 89 | thanks: "Täname, et kasutate VueTube'i", 90 | enjoy: "Me loodame, et naudite seda kogemust", 91 | packageinstaller: "Valige Allalaadimise Versioon", 92 | }, 93 | }; 94 | -------------------------------------------------------------------------------- /NUXT/plugins/languages/german.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "Deutsch", 3 | 4 | global: { 5 | home: "Start", 6 | subscriptions: "Abos", 7 | library: "Mediathek", 8 | restart: "Neustart", 9 | later: "Later", 10 | settingRestart: "Neustart erforderlich, damit Änderungen an diesen Einstellungen aktiv werden." 11 | }, 12 | 13 | index: { 14 | connecting: "Verbinden", 15 | plugins: "Plugins werden geladen", 16 | launching: "Starten", 17 | }, 18 | 19 | settings: { 20 | general: "Allgemein", 21 | theme: "Theme", 22 | player: "Videoplayer", 23 | uitweaker: "UI Tweaker", 24 | startupoptions: "Startoptionen", 25 | plugins: "Plugins", 26 | updates: "Updates", 27 | logs: "Logs", 28 | about: "Über", 29 | devmode: "Entwicklermodus", 30 | }, 31 | 32 | mods: { 33 | general: { 34 | language: "Sprache", 35 | }, 36 | theme: { 37 | normal: "Normal", 38 | adaptive: "Adaptiv", 39 | custom: "Individuell", 40 | dark: "Dunkel", 41 | black: "Schwarz", 42 | darkmode: "Dunkler Modus", 43 | darkmodetagline: "Bravo Sechs, Lichter aus.", 44 | }, 45 | tweaks: { 46 | fullscreen: "Vollbild", 47 | navbarblur: "Navigationsleiste unscharf", 48 | roundedcorners: "Runde Ecken", 49 | roundthumbnails: "Runde Thumbnails", 50 | roundwatchpagecomponents: "Runde Startseiten Komponenten", 51 | radius: "Radius", 52 | }, 53 | startup: { 54 | defaultpage: "Standard Seite", 55 | }, 56 | updates: { 57 | install: "Installieren", 58 | view: "Anschauen", 59 | latest: "Neuste", 60 | installed: "Installiert", 61 | }, 62 | logs: { 63 | more: "Mehr", 64 | }, 65 | about: { 66 | appinformation: "App Informationen", 67 | appversion: "App Version", 68 | deviceinformation: "Geräteinformationen", 69 | platform: "Plattform", 70 | os: "Betriebssystem", 71 | model: "Modell", 72 | manufacturer: "Hersteller", 73 | emulator: "Emulator", 74 | github: "GitHub", 75 | discord: "Discord", 76 | }, 77 | }, 78 | 79 | events: { 80 | welcome: "Wilkommen bei VueTube", 81 | tagline: "Die Zukunft des Videostreamings", 82 | next: "Weiter", 83 | updated: "VueTube wurde aktualisiert!", 84 | awesome: "Cool!", 85 | langsetup: "Lass uns eine Sprache aussuchen!", 86 | featuresetup: "Lass uns ein paar Funktionen aussuchen!", 87 | enableryd: "Return Youtube Dislike aktivieren", 88 | enablespb: "SponsorBlock aktivieren", 89 | thanks: "Danke, dass du VueTube nutzt.", 90 | enjoy: "Wir hoffen, es gefällt dir", 91 | packageinstaller: "Package zum Download auswählen", 92 | }, 93 | }; 94 | -------------------------------------------------------------------------------- /NUXT/plugins/languages/macedonian.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "Македонски", 3 | 4 | global: { 5 | home: "Почетна", 6 | subscriptions: "Претплати", 7 | library: "Библиотека", 8 | }, 9 | 10 | index: { 11 | connecting: "Поврзување", 12 | launching: "Лансирање", 13 | }, 14 | 15 | settings: { 16 | general: "Општо", 17 | theme: "Изглед", 18 | player: "Плеер", 19 | uitweaker: "Интерфејс Твикер", 20 | startupoptions: "Опции за стартување", 21 | plugins: "Додатоци", 22 | updates: "Ажурирања", 23 | logs: "Дневници", 24 | about: "За VueTube", 25 | devmode: "Уредувач на регистар", 26 | }, 27 | 28 | mods: { 29 | general: { 30 | language: "Јазик", 31 | }, 32 | theme: { 33 | normal: "Нормален", 34 | adaptive: "Адаптивен", 35 | custom: "Прилагоден", 36 | dark: "Темен", 37 | black: "Црн", 38 | darkmode: "Темен Пежим", 39 | darkmodetagline: "Браво Шес, Идеме Темно.", 40 | }, 41 | tweaks: { 42 | fullscreen: "Цел Екран", 43 | navbarblur: "Замаглување на лентата", 44 | roundedcorners: "Заоблени агли", 45 | roundthumbnails: "Заоблени слики", 46 | roundwatchpagecomponents: "Заоблени компоненти на страницата за гледање", 47 | radius: "Радиус", 48 | }, 49 | startup: { 50 | defaultpage: "Стандардна страница", 51 | }, 52 | updates: { 53 | install: "Инстал", 54 | view: "Погледај", 55 | latest: "Нај нова", 56 | installed: "Инсталирана", 57 | }, 58 | logs: { 59 | more: "Повеќе", 60 | }, 61 | about: { 62 | appinformation: "Информации за апликацијата", 63 | appversion: "Верзија на апликацијата", 64 | deviceinformation: "Информации за уредод", 65 | platform: "Платформа", 66 | os: "Оперативен Систем", 67 | model: "Модел", 68 | manufacturer: "Производител", 69 | emulator: "Емулатор", 70 | github: "GitHub", 71 | discord: "Discord", 72 | }, 73 | }, 74 | 75 | events: { 76 | welcome: "Добредојдовте во VueTube", 77 | tagline: "Иднината на видео стриминг", 78 | next: "Следно", 79 | updated: "VueTube беше ажуриран!", 80 | awesome: "Прекрасно!", 81 | }, 82 | }; 83 | -------------------------------------------------------------------------------- /NUXT/plugins/languages/portuguese.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "Português", 3 | 4 | global: { 5 | home: "Início", 6 | subscriptions: "Subscrições", 7 | library: "Biblioteca", 8 | }, 9 | 10 | index: { 11 | connecting: "A ligar", 12 | launching: "A iniciar", 13 | }, 14 | 15 | settings: { 16 | general: "Geral", 17 | theme: "Tema", 18 | player: "Leitor", 19 | uitweaker: "Interface", 20 | startupoptions: "Opções de arranque", 21 | plugins: "Plugins", 22 | updates: "Atualizações", 23 | logs: "Logs", 24 | about: "Sobre", 25 | devmode: "Modo programador", 26 | }, 27 | 28 | mods: { 29 | general: { 30 | language: "Idioma", 31 | }, 32 | theme: { 33 | normal: "Normal", 34 | adaptive: "Adaptado", 35 | custom: "Customizado", 36 | dark: "Escuro", 37 | black: "Preto", 38 | darkmode: "Modo Escuro", 39 | darkmodetagline: "Bravo Six, Escurecendo.", 40 | }, 41 | tweaks: { 42 | fullscreen: "Ecrã completo", 43 | navbarblur: "Desfoque da Barra De Nav", 44 | roundedcorners: "Bordas Redondas", 45 | roundthumbnails: "Thumbnails Redondas", 46 | roundwatchpagecomponents: "Elementos do leitor de video Redondos", 47 | radius: "Graus", 48 | }, 49 | startup: { 50 | defaultpage: "Página Padrão", 51 | }, 52 | updates: { 53 | install: "Instalar", 54 | view: "Ver", 55 | latest: "Última", 56 | installed: "Instalado", 57 | }, 58 | logs: { 59 | more: "Mais", 60 | }, 61 | about: { 62 | appinformation: "Informação da App", 63 | appversion: "Versão", 64 | deviceinformation: "Informação do Dispositivo", 65 | platform: "Plataforma", 66 | os: "Sistema Operacional", 67 | model: "Modelo", 68 | manufacturer: "Fabricante", 69 | emulator: "Emulador", 70 | github: "GitHub", 71 | discord: "Discord", 72 | }, 73 | }, 74 | 75 | events: { 76 | welcome: "Bem vindo ao VueTube", 77 | tagline: "O futuro do streaming de video", 78 | next: "Próximo", 79 | updated: "VueTube atualizado com sucesso!", 80 | awesome: "Incrível!", 81 | }, 82 | }; 83 | -------------------------------------------------------------------------------- /NUXT/plugins/languages/russian.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "Русский", 3 | 4 | global: { 5 | home: "Главная", 6 | subscriptions: "Подписки", 7 | library: "Библиотека", 8 | restart: "Перезагрузить", 9 | later: "Позже", 10 | settingRestart: 11 | "Изменение этих параметров требует перезапуска приложения, чтобы изменения вступили в силу.", 12 | }, 13 | 14 | index: { 15 | connecting: "Подключение", 16 | plugins: "Загрузка плагинов", 17 | launching: "Загрузка", 18 | }, 19 | 20 | settings: { 21 | general: "Общие", 22 | theme: "Тема", 23 | player: "Плеер", 24 | uitweaker: "Модификация интерфейса", 25 | startupoptions: "Параметры запуска", 26 | plugins: "Плагины", 27 | updates: "Обновления", 28 | logs: "Логи", 29 | about: "О программе", 30 | devmode: "Редактор реестра", 31 | }, 32 | 33 | mods: { 34 | general: { 35 | language: "Язык", 36 | }, 37 | theme: { 38 | normal: "Обычная", 39 | adaptive: "Адаптивная", 40 | custom: "Пользоватская", 41 | dark: "Тёмная", 42 | black: "Чёрная", 43 | darkmode: "Тёмный режим", 44 | darkmodetagline: "Браво Six, Наступает Тьма.", 45 | }, 46 | tweaks: { 47 | fullscreen: "Полный экран", 48 | navbarblur: "Размытие навигационной панели", 49 | roundedcorners: "Закругленные углы", 50 | roundthumbnails: "Круглые миниатюры", 51 | roundwatchpagecomponents: "Круглые компоненты страницы просмотра", 52 | radius: "Радиус", 53 | }, 54 | startup: { 55 | defaultpage: "Страница по умолчанию", 56 | }, 57 | updates: { 58 | install: "Установить", 59 | view: "Просмотр", 60 | latest: "Последнее", 61 | installed: "Установлено", 62 | }, 63 | logs: { 64 | more: "Подробнее", 65 | }, 66 | about: { 67 | appinformation: "Информация о приложении", 68 | appversion: "Версия приложения", 69 | deviceinformation: "Информация об устройстве", 70 | platform: "Платформа", 71 | os: "Операционная система", 72 | model: "Модель", 73 | manufacturer: "Произовдитель", 74 | emulator: "Эмулятор", 75 | github: "GitHub", 76 | discord: "Discord", 77 | }, 78 | }, 79 | 80 | events: { 81 | welcome: "Добро пожаловать в VueTube", 82 | tagline: "Это будущее видео потока", 83 | next: "Далее", 84 | updated: "VueTube был обновлен!", 85 | awesome: "Отлично!", 86 | langsetup: "Давайте выберем язык!", 87 | featuresetup: "Давайте выберем некоторые функции!", 88 | enableryd: "Выключить Return YouTube Dislike", 89 | enablespb: "Выключить SponsorBlock", 90 | thanks: "Спасибо за использование VueTube", 91 | enjoy: "Мы надеемся, что у вас будет удивительный опыт", 92 | packageinstaller: "Выберите пакет для загрузки", 93 | }, 94 | }; 95 | -------------------------------------------------------------------------------- /NUXT/plugins/languages/tamil.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "தமிழ்", 3 | 4 | global: { 5 | home: "ஹோம்", 6 | subscriptions: "ஸப்ஸ்க்ரிப்ஶந", 7 | library: "லாஇப்ரேரீ", 8 | restart: "இப்போது மறுதொடக்கம்", 9 | later: "பிறகு", 10 | settingRestart: "இந்த அமைப்பை மாற்ற, அமைப்புகளைப் பயன்படுத்த, ஆப்ஸ மறுதொடக்கம் செய்ய வேண்டும்" 11 | }, 12 | 13 | index: { 14 | connecting: "இணைக்கிறது", 15 | launching: "திறக்கிறது", 16 | }, 17 | 18 | settings: { 19 | general: "பொது", 20 | theme: "தீம்", 21 | player: "காணொலி இயக்கி ", 22 | uitweaker: "இடைமுகம்", 23 | startupoptions: "தொடக்க விருப்பங்கள்", 24 | plugins: "செருகுநிரல்கள்", 25 | updates: "மேம்படுத்தல்கள்", 26 | logs: "பதிவுகள்", 27 | about: "பற்றி", 28 | devmode: "டெவலப்பர்", 29 | }, 30 | 31 | mods: { 32 | general: { 33 | language: "மொழி", 34 | }, 35 | theme: { 36 | normal: "சாதாரண", 37 | adaptive: "தகவமைப்பு ", 38 | custom: "கஸ்டம் ", 39 | dark: "இருள்", 40 | black: "கருப்பு", 41 | darkmode: "இருள் அமைப்பு", 42 | darkmodetagline: "நீங்கள் இருளில் செல்கிறீர்கள்..", 43 | }, 44 | tweaks: { 45 | fullscreen: "முழு பார்வை", 46 | navbarblur: "மங்கலான பார்", 47 | roundedcorners: "சுற்று மூலைகள்", 48 | roundthumbnails: "சுற்று சிறு உருவங்கள்", 49 | roundwatchpagecomponents: "சுற்று கண்காணிப்பு பக்க கூறுகள்", 50 | radius: "ஆரம்", 51 | }, 52 | startup: { 53 | defaultpage: "இயல்புநிலை பக்கம்", 54 | }, 55 | updates: { 56 | install: "நிறுவு", 57 | view: "பார்", 58 | latest: "புதியது", 59 | installed: "நிறுவப்பட்டுள்ளது", 60 | }, 61 | logs: { 62 | more: "மேலும்", 63 | }, 64 | about: { 65 | appinformation: "விண்ணப்ப தகவல்", 66 | appversion: "விண்ணப்ப பதிப்பு", 67 | deviceinformation: "தொலைபேசி தகவல்", 68 | platform: "ப்லைட்பார்ம", 69 | os: "os", 70 | model: "மாடல்", 71 | manufacturer: "உற்பத்தியாளர்", 72 | emulator: "எமுலேடர்", 73 | github: "GitHub", 74 | discord: "Discord", 75 | }, 76 | }, 77 | 78 | events: { 79 | welcome: "VueTube க்கு வணக்கம்", 80 | tagline: "வீடியோ ஸ்ட்ரீமிங்கின் எதிர்காலம்", 81 | next: "அடுத்தது", 82 | updated: "VueTube புதுப்பிக்கப்பட்டது!", 83 | awesome: "செம்ம!", 84 | langsetup: "மொழி அமைப்பு", 85 | featuresetup: "அம்சங்கள் அமைப்பு", 86 | enableryd: "Return YouTube Dislike ஐ இயக்கு", 87 | enablespb: "SponsorBlock ஐ இயக்கு", 88 | thanks: "VueTube ஐப் பயன்படுத்தியதற்கு நன்றி!", 89 | enjoy: "மகிழுங்கள்!", 90 | }, 91 | }; 92 | -------------------------------------------------------------------------------- /NUXT/plugins/languages/turkish.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "Turkish", 3 | 4 | global: { 5 | home: "Ana Sayfa", 6 | subscriptions: "Abonelikler", 7 | library: "Kitaplık", 8 | restart: "Yeniden Başlat", 9 | later: "Daha sonra", 10 | settingRestart: "Bu ayarın değiştirilmesi, değişikliklerin uygulanabilmesi için uygulamanın yeniden başlatılmasını gerektirir." 11 | }, 12 | 13 | index: { 14 | connecting: "Bağlanıyor", 15 | plugins: "Eklentiler Yükleniyor", 16 | launching: "Başlatılıyor", 17 | }, 18 | 19 | settings: { 20 | general: "Genel", 21 | theme: "Tema", 22 | player: "Oynatıcı", 23 | uitweaker: "UI Düzenleyici", 24 | startupoptions: "Başlangıç Seçenekleri", 25 | plugins: "Eklentiler", 26 | updates: "Güncellemeler", 27 | logs: "Günlükler", 28 | about: "Hakkında", 29 | devmode: "Kayıt Düzenleyici", 30 | }, 31 | 32 | mods: { 33 | general: { 34 | language: "Dil", 35 | }, 36 | theme: { 37 | normal: "Normal", 38 | adaptive: "Uyarlamalı", 39 | custom: "Özel", 40 | dark: "Karanlık", 41 | black: "Siyah", 42 | darkmode: "Karanlık Mod", 43 | darkmodetagline: "Bravo Altı, Karanlık Oluyor.", 44 | }, 45 | tweaks: { 46 | fullscreen: "Tam Ekran", 47 | navbarblur: "Gezinme Çubuğu Bulanıklığı", 48 | roundedcorners: "Yuvarlatılmış Köşeler", 49 | roundthumbnails: "Yuvarlak Küçük Resimler", 50 | roundwatchpagecomponents: "Yuvarlak İzleme Sayfası Bileşenleri", 51 | radius: "Yarıçap", 52 | }, 53 | startup: { 54 | defaultpage: "Varsayılan Sayfa", 55 | }, 56 | updates: { 57 | install: "Yükle", 58 | view: "Görüntüle", 59 | latest: "En son", 60 | installed: "Yüklendi", 61 | }, 62 | logs: { 63 | more: "Daha fazla", 64 | }, 65 | about: { 66 | appinformation: "Uygulama Bilgileri", 67 | appversion: "Uygulama Sürümü", 68 | deviceinformation: "Cihaz Bilgisi", 69 | platform: "Platformu", 70 | os: "İşletim Sistemi", 71 | model: "Modeli", 72 | manufacturer: "Üretici Firma", 73 | emulator: "Emulatör", 74 | github: "GitHub", 75 | discord: "Discord", 76 | }, 77 | }, 78 | 79 | events: { 80 | welcome: "VueTube'a Hoş Geldiniz", 81 | tagline: "Video akışının geleceği", 82 | next: "Sonraki", 83 | updated: "VueTube Güncellendi!", 84 | awesome: "Harika!", 85 | langsetup: "Bir Dil Seçelim!", 86 | featuresetup: "Bazı Özellikleri Seçelim!", 87 | enableryd: "Return YouTube Dislike'ı Etkinleştir", 88 | enablespb: "SponsorBlock'u Etkinleştir", 89 | thanks: "VueTube'u kullandığınız için teşekkürler", 90 | enjoy: "Umarız harika bir deneyim yaşarsınız", 91 | packageinstaller: "İndirilecek Paketi Seçin" 92 | }, 93 | }; 94 | -------------------------------------------------------------------------------- /NUXT/plugins/languages/vietnamese.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "Tiếng Việt", 3 | 4 | global: { 5 | home: "Home", 6 | subscriptions: "Đăng ký", 7 | library: "Thư viện", 8 | restart: "Khởi động lại", 9 | later: "Để sau", 10 | settingRestart: "Thay đổi cài đặt này yêu cầu khởi động lại để áp dụng các thay đổi." 11 | }, 12 | 13 | index: { 14 | connecting: "Đang kết nối", 15 | plugins: "Đang tải plugins", 16 | launching: "Đang khởi chạy", 17 | }, 18 | 19 | settings: { 20 | general: "Chung", 21 | theme: "Chủ đề", 22 | player: "Player", 23 | uitweaker: "Tùy chỉnh UI", 24 | startupoptions: "Tùy chọn khởi động", 25 | plugins: "Plugins", 26 | updates: "Cập nhật", 27 | logs: "Nhật kí", 28 | about: "Về", 29 | devmode: "Chỉnh sửa Registry", 30 | }, 31 | 32 | mods: { 33 | general: { 34 | language: "Ngôn ngữ", 35 | }, 36 | theme: { 37 | normal: "Bình thường", 38 | adaptive: "Tương thích", 39 | custom: "Tùy chỉnh", 40 | dark: "Tối", 41 | black: "Đen", 42 | darkmode: "Chế độ tối", 43 | darkmodetagline: "Tắt đèn thôi", 44 | }, 45 | tweaks: { 46 | fullscreen: "Toàn màn hình", 47 | navbarblur: "Làm mờ thanh điều hướng", 48 | roundedcorners: "Bo góc", 49 | roundthumbnails: "Bo góc hình thu nhỏ", 50 | roundwatchpagecomponents: "Bo góc các mục trang xem video", 51 | radius: "Mức độ bo", 52 | }, 53 | startup: { 54 | defaultpage: "Trang mặc định", 55 | }, 56 | updates: { 57 | install: "Cài đặt", 58 | view: "Xem", 59 | latest: "Mới nhất", 60 | installed: "Đã cài đặt", 61 | }, 62 | logs: { 63 | more: "Nhiều hơn", 64 | }, 65 | about: { 66 | appinformation: "Thông tin ứng dụng", 67 | appversion: "Phiên bản ứng dụng", 68 | deviceinformation: "Thông tin thiết bị", 69 | platform: "Nền tảng", 70 | os: "Hệ điều hành", 71 | model: "Mã", 72 | manufacturer: "Nhà sản xuất", 73 | emulator: "Máy ảo", 74 | github: "GitHub", 75 | discord: "Discord", 76 | }, 77 | }, 78 | 79 | events: { 80 | welcome: "Chào mừng to VueTube", 81 | tagline: "Tương lai của video streaming", 82 | next: "Tiếp", 83 | updated: "VueTube đã được cập nhật!", 84 | awesome: "Tuyệt vời!", 85 | langsetup: "Chọn một ngôn ngữ!", 86 | featuresetup: "Chọn một số tính năng!", 87 | enableryd: "Bật Return YouTube Dislike", 88 | enablespb: "Bật SponsorBlock", 89 | thanks: "Cảm on đã sủ dụng VueTube", 90 | enjoy: "Chúng mình hi vọng bạn sẽ có một trải nghiệm tuyệt vời", 91 | packageinstaller: "Chọn một phiên bản để tải về" 92 | }, 93 | }; -------------------------------------------------------------------------------- /NUXT/plugins/renderers.js: -------------------------------------------------------------------------------- 1 | // General utility functions for the renderers 2 | class rendererUtils { 3 | static getNavigationEndpoints(base) { 4 | if (!base) return; 5 | if (base.urlEndpoint) { 6 | const params = new Proxy(new URLSearchParams(base.urlEndpoint.url), { 7 | get: (searchParams, prop) => searchParams.get(prop), 8 | }); 9 | if (params.q) return decodeURI(params.q); 10 | else return new URL(base.urlEndpoint.url).pathname; 11 | } else if (base.browseEndpoint) { 12 | return base.browseEndpoint.canonicalBaseUrl; 13 | } else if (base.watchEndpoint) { 14 | return `/watch?v=${base.watchEndpoint.videoId}`; 15 | } else if (base.navigationEndpoint) { 16 | return base.navigationEndpoint.browseEndpoint.canonicalBaseUrl; //for now 17 | } else if (base.searchEndpoint) { 18 | return `/search?q=${encodeURI(base.searchEndpoint.query)}`; 19 | } 20 | } 21 | 22 | static checkInternal(base) { 23 | const tmp = document.createElement("a"); 24 | tmp.href = this.getNavigationEndpoints(base); 25 | if (tmp.host !== window.location.host || !base.navigationEndpoint) { 26 | return false; 27 | } else { 28 | return true; 29 | } 30 | } 31 | } 32 | 33 | export default rendererUtils; 34 | -------------------------------------------------------------------------------- /NUXT/plugins/ryd.js: -------------------------------------------------------------------------------- 1 | //--- Modules/Imports ---// 2 | import { Http } from "@capacitor-community/http"; 3 | import constants from "./constants"; 4 | 5 | function generateUserID(length = 36) { 6 | const charset = 7 | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; 8 | let result = ""; 9 | if (crypto && crypto.getRandomValues) { 10 | const values = new Uint32Array(length); 11 | crypto.getRandomValues(values); 12 | for (let i = 0; i < length; i++) { 13 | result += charset[values[i] % charset.length]; 14 | } 15 | return result; 16 | } else { 17 | for (let i = 0; i < length; i++) { 18 | result += charset[Math.floor(Math.random() * charset.length)]; 19 | } 20 | return result; 21 | } 22 | } 23 | 24 | function countLeadingZeroes(uInt8View, limit) { 25 | let zeroes = 0; 26 | let value = 0; 27 | for (let i = 0; i < uInt8View.length; i++) { 28 | value = uInt8View[i]; 29 | if (value === 0) { 30 | zeroes += 8; 31 | } else { 32 | let count = 1; 33 | if (value >>> 4 === 0) { 34 | count += 4; 35 | value <<= 4; 36 | } 37 | if (value >>> 6 === 0) { 38 | count += 2; 39 | value <<= 2; 40 | } 41 | zeroes += count - (value >>> 7); 42 | break; 43 | } 44 | if (zeroes >= limit) { 45 | break; 46 | } 47 | } 48 | return zeroes; 49 | } 50 | 51 | //--- Puzzle Solver from Anarios --// 52 | async function solvePuzzle(puzzle) { 53 | let challenge = Uint8Array.from(atob(puzzle.challenge), (c) => 54 | c.charCodeAt(0) 55 | ); 56 | let buffer = new ArrayBuffer(20); 57 | let uInt8View = new Uint8Array(buffer); 58 | let uInt32View = new Uint32Array(buffer); 59 | let maxCount = Math.pow(2, puzzle.difficulty) * 5; 60 | for (let i = 4; i < 20; i++) { 61 | uInt8View[i] = challenge[i - 4]; 62 | } 63 | 64 | for (let i = 0; i < maxCount; i++) { 65 | uInt32View[0] = i; 66 | let hash = await crypto.subtle.digest("SHA-512", buffer); 67 | let hashUint8 = new Uint8Array(hash); 68 | if (countLeadingZeroes(hashUint8) >= puzzle.difficulty) { 69 | return { 70 | solution: btoa(String.fromCharCode.apply(null, uInt8View.slice(0, 4))), 71 | }; 72 | } 73 | } 74 | } 75 | 76 | const rydModule = { 77 | logs: new Array(), 78 | 79 | //--- Get Dislikes ---// 80 | getDislikes(id, callback) { 81 | console.log("fetching ryd"); 82 | Http.request({ 83 | method: "GET", 84 | url: `https://returnyoutubedislikeapi.com/votes`, 85 | params: { videoId: id }, 86 | }) 87 | .then((res) => { 88 | callback(res.data); 89 | }) 90 | .catch((err) => { 91 | callback(err); 92 | }); 93 | }, 94 | }; 95 | 96 | //--- Start ---// 97 | export default ({ app }, inject) => { 98 | inject("ryd", { ...rydModule }); 99 | }; 100 | -------------------------------------------------------------------------------- /NUXT/plugins/tempPlugins/demoPlugin.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | manifest: { 3 | name: "Test plugin", // Required 4 | vuetube: "*", 5 | version: "1.0", // Required 6 | author: "Frontesque", // Required 7 | description: 8 | "A plugin to test how vuetube handles plugins // Add 'Hello, World!' to the home page.", // Required 9 | homepage: "https://github.com/Frontesque/VueTube-Example-Plugin", 10 | license: "GPL-3.0", // Required 11 | }, 12 | 13 | /************************* 14 | * Execute code on ALL VueTube pages 15 | ************************/ 16 | global: function () { 17 | console.log( 18 | "This code is now executed when ALL vuetube pages (including settings) are loaded." 19 | ); 20 | }, 21 | 22 | /************************* 23 | * Execute code on SPECIFIC VueTube pages 24 | * 25 | * You can view what page you intend to inject code into by looking at `~/NUXT/pages/` in the main VueTube repo 26 | ************************/ 27 | pages: { 28 | home: function () { 29 | // Execute code on JUST the home page 30 | }, 31 | }, 32 | }; 33 | -------------------------------------------------------------------------------- /NUXT/plugins/thirdPartyPluginLoader.js: -------------------------------------------------------------------------------- 1 | //--- Modules/Imports ---// 2 | import { Filesystem, Directory, Encoding } from "@capacitor/filesystem"; 3 | import { fs } from "./constants"; 4 | 5 | //--- Set Up App Directory ---// 6 | const APP_DIRECTORY = Directory.Data; 7 | 8 | //--- Ensure Plugins Folder ---// 9 | const ensureStructure = new Promise(async (resolve, reject) => { 10 | try { 11 | await Filesystem.mkdir({ 12 | directory: APP_DIRECTORY, 13 | recursive: true, 14 | path: fs.plugins, 15 | }); 16 | } catch (e) { 17 | /* Exists */ 18 | } 19 | 20 | resolve(); 21 | }); 22 | 23 | const module = { 24 | //--- List Plugins ---// 25 | list: new Promise(async (resolve, reject) => { 26 | await ensureStructure; 27 | 28 | Filesystem.readdir({ 29 | path: fs.plugins, 30 | directory: APP_DIRECTORY, 31 | }) 32 | .then(res => { 33 | resolve(res); 34 | }) 35 | .catch(err => { 36 | reject(err); 37 | }); 38 | 39 | 40 | }), 41 | 42 | async addPlugin(content) { 43 | await ensureStructure; 44 | new Promise(async (resolve, reject) => { 45 | const fileName = require("./utils").getCpn(); // Im not sure what this is actually meant for but im using it as a random string generator 46 | console.log("Saving Plugin As" + fileName); 47 | await Filesystem.writeFile({ 48 | path: fs.plugins + fileName + ".js", 49 | directory: APP_DIRECTORY, 50 | data: content, 51 | encoding: Encoding.UTF8, 52 | }); 53 | resolve(); 54 | }); 55 | }, 56 | 57 | async removePlugin(name) { 58 | await ensureStructure; 59 | new Promise(async (resolve, reject) => { 60 | await Filesystem.deleteFile({ 61 | path: fs.plugins + name, 62 | directory: APP_DIRECTORY, 63 | }); 64 | resolve(); 65 | }); 66 | }, 67 | 68 | }; 69 | 70 | //--- Start ---// 71 | export default ({ app }, inject) => { 72 | inject("tppl", module); 73 | }; 74 | -------------------------------------------------------------------------------- /NUXT/plugins/update.js: -------------------------------------------------------------------------------- 1 | //--- Modules/Imports ---// 2 | import { Http } from "@capacitor-community/http"; 3 | import { Filesystem, Directory, Encoding } from "@capacitor/filesystem"; 4 | 5 | module = (url) => { 6 | return new Promise(async (resolve, reject) => { 7 | 8 | //--- Download File From GitHub & Save to Memory/RAM ---// 9 | const data = await Http.get({ 10 | url: url, 11 | responseType: "blob", 12 | observe: "events" 13 | }).catch(err => { return reject(err); }); 14 | 15 | //--- Write File From Memory to Local Storage ---// 16 | const fileData = data.data.toString('utf8'); 17 | const app = await Filesystem.writeFile({ 18 | path: "vuetube-update.apk", 19 | directory: Directory.Documents, 20 | data: fileData 21 | }).catch(err => { return reject(err); }); 22 | 23 | //--- Open Written File ---// 24 | console.log(app.uri) 25 | window.open(app.uri, "_blank"); 26 | 27 | }) 28 | } 29 | 30 | //--- Start ---// 31 | export default ({ app }, inject) => { 32 | inject("update", module); 33 | }; 34 | -------------------------------------------------------------------------------- /NUXT/plugins/utils.js: -------------------------------------------------------------------------------- 1 | // Collection of functions that are useful but non-specific to any particular files 2 | 3 | function getBetweenStrings(data, start_string, end_string) { 4 | const regex = new RegExp( 5 | `${escapeRegExp(start_string)}(.*?)${escapeRegExp(end_string)}`, 6 | "s" 7 | ); 8 | const match = data.match(regex); 9 | return match ? match[1] : undefined; 10 | } 11 | 12 | function escapeRegExp(string) { 13 | return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); 14 | } 15 | 16 | function hexToRgb(hex) { 17 | var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); 18 | return result 19 | ? { 20 | r: parseInt(result[1], 16), 21 | g: parseInt(result[2], 16), 22 | b: parseInt(result[3], 16), 23 | } 24 | : null; 25 | } 26 | 27 | function rgbToHex(r, g, b) { 28 | return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); 29 | } 30 | 31 | function getCpn() { 32 | const chars = 33 | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; 34 | let result = ""; 35 | for (let i = 16; i > 0; --i) 36 | result += chars[Math.round(Math.random() * (chars.length - 1))]; 37 | return result; 38 | } 39 | 40 | function getMutationByKey(key, mutations) { 41 | if (!key || !mutations) return undefined; 42 | return mutations.find((mutation) => mutation.entityKey === key).payload; 43 | } 44 | 45 | function setHttp(link) { 46 | if (link.search(/^http[s]?\:\/\//) == -1) { 47 | link = "http://" + link; 48 | } 49 | return link; 50 | } 51 | 52 | // Replace inputted html with tweemoji 53 | function parseEmoji(body) { 54 | if (twemoji) 55 | return twemoji.parse(body, { 56 | folder: "svg", 57 | ext: ".svg", 58 | }); 59 | } 60 | 61 | function linkParser(url) { 62 | let result; 63 | if (url) { 64 | try { 65 | const slug = new URL(setHttp(url)); 66 | const host = slug.hostname.toLowerCase().replace(/^(www|m)\./, ""); 67 | if (host == "youtube.com") { 68 | result = slug; 69 | } else if (host == "youtu.be") { 70 | result = new URL("/watch", window.location.origin); 71 | result.searchParams.set("v", slug.pathname.split("/")[1]); 72 | } 73 | } finally { 74 | return result instanceof URL ? result : false; 75 | } 76 | } 77 | } 78 | const delay = (ms) => new Promise((res) => setTimeout(res, ms)); 79 | 80 | function humanFileSize(size) { 81 | var i = Math.floor( Math.log(size) / Math.log(1024) ); 82 | return ( size / Math.pow(1024, i) ).toFixed(2) * 1 + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i]; 83 | }; 84 | 85 | module.exports = { 86 | getBetweenStrings, 87 | hexToRgb, 88 | rgbToHex, 89 | getCpn, 90 | getMutationByKey, 91 | linkParser, 92 | delay, 93 | parseEmoji, 94 | humanFileSize, 95 | }; 96 | -------------------------------------------------------------------------------- /NUXT/static/chome.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /NUXT/static/clist.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /NUXT/static/csubs.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /NUXT/static/fhome.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /NUXT/static/flist.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /NUXT/static/fsubs.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /NUXT/static/home.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /NUXT/static/icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /NUXT/static/list.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /NUXT/static/subs.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /NUXT/store/README.md: -------------------------------------------------------------------------------- 1 | # STORE 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your Vuex Store files. 6 | Vuex Store option is implemented in the Nuxt.js framework. 7 | 8 | Creating a file in this directory automatically activates the option in the framework. 9 | 10 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/vuex-store). 11 | -------------------------------------------------------------------------------- /NUXT/store/history/index.js: -------------------------------------------------------------------------------- 1 | export const state = () => ({ 2 | historyVideos: [], 3 | }); 4 | 5 | export const mutations = { 6 | initHistory(state) { 7 | if (process.client) { 8 | // read local storage and parse the list of objects 9 | state.historyVideos = localStorage 10 | .getItem("historyVideos") 11 | .split(",") 12 | .map((video) => JSON.parse(video)); 13 | } 14 | }, 15 | addHistory(state, video) { 16 | state.historyVideos = state.historyVideos.filter((v) => v.id != video.id); // remove video if it is already in the history list 17 | state.historyVideos.unshift(video); 18 | localStorage.setItem( 19 | "historyVideos", 20 | state.historyVideos.map((video) => JSON.stringify(video)) 21 | ); 22 | }, 23 | removeHistory(state, index) { 24 | state.historyVideos.splice(index, 1); 25 | localStorage.setItem( 26 | "historyVideos", 27 | state.historyVideos.map((video) => JSON.stringify(video)) 28 | ); 29 | }, 30 | clearHistory(state) { 31 | state.historyVideos = []; 32 | localStorage.setItem( 33 | "historyVideos", 34 | state.historyVideos.map((video) => JSON.stringify(video)) 35 | ); 36 | }, 37 | }; 38 | -------------------------------------------------------------------------------- /NUXT/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | 3 | export const state = () => ({ 4 | recommendedVideos: [], 5 | watchTelemetry: null, 6 | }); 7 | 8 | export const mutations = { 9 | initTelemetryPreference(state) { 10 | if (process.client) { 11 | state.watchTelemetry = !( 12 | // false if false, defaults to true 13 | (JSON.parse(localStorage.getItem("watchTelemetry")) === false) 14 | ); 15 | // JSON.parse(localStorage.getItem("watchTelemetry")) === true; // defaults to false 16 | } 17 | }, 18 | setTelemetryPreference(state, payload) { 19 | state.watchTelemetry = payload; 20 | localStorage.setItem("watchTelemetry", payload); 21 | }, 22 | updateRecommendedVideos(state, payload) { 23 | Vue.set(state, "recommendedVideos", payload); 24 | }, 25 | }; 26 | -------------------------------------------------------------------------------- /NUXT/store/player/index.js: -------------------------------------------------------------------------------- 1 | export const state = () => ({ 2 | loop: null, 3 | speed: 1, 4 | speedAutosave: null, 5 | preload: null, 6 | preloadUpTo: 100, 7 | // quality: null, 8 | // qualityAutoSwitch: null, 9 | // shortFullscreen: null, 10 | // autoplay: null, 11 | // shorts: null, 12 | // music: null, 13 | }); 14 | export const mutations = { 15 | initPlayer(state) { 16 | if (process.client) { 17 | state.loop = 18 | localStorage.getItem("loop") !== "undefined" 19 | ? JSON.parse(localStorage.getItem("loop")) 20 | : true; // defaults to false 21 | state.speed = JSON.parse(localStorage.getItem("speed")) || 1; // defaults to 1 22 | state.speedAutosave = !( 23 | // false if false, defaults to true 24 | (JSON.parse(localStorage.getItem("speedAutosave")) === false) 25 | ); 26 | state.preload = JSON.parse(localStorage.getItem("preload")) === true; // defaults to false 27 | state.preloadUpTo = 28 | JSON.parse(localStorage.getItem("preloadUpTo")) || 100; // defaults to 100(percent) 29 | } 30 | }, 31 | setLoop(state, payload) { 32 | state.loop = payload; 33 | localStorage.setItem("loop", payload); 34 | }, 35 | setSpeed(state, payload) { 36 | state.speed = payload; 37 | localStorage.setItem("speed", payload); 38 | }, 39 | setSpeedAutosave(state, payload) { 40 | state.speedAutosave = payload; 41 | localStorage.setItem("speedAutosave", payload); 42 | }, 43 | setPreload(state, payload) { 44 | state.preload = payload; 45 | localStorage.setItem("preload", payload); 46 | }, 47 | setPreloadUpTo(state, payload) { 48 | state.preloadUpTo = payload; 49 | localStorage.setItem("preloadUpTo", payload); 50 | }, 51 | }; 52 | -------------------------------------------------------------------------------- /NUXT/store/playlist/index.js: -------------------------------------------------------------------------------- 1 | export const state = () => ({ 2 | playlists: [], 3 | currentPlaylist: null, 4 | }); 5 | 6 | // Shape of playlists 7 | // [playlist, playlist] 8 | 9 | // Shape of playlist 10 | // {name: string, videos: []} 11 | 12 | // Shape of currentPlaylist 13 | // {index: number, name: string, videos: []} 14 | 15 | export const mutations = { 16 | initPlaylists(state) { 17 | if (process.client) { 18 | // read local storage and parse the list of objects 19 | state.playlists = JSON.parse(localStorage.getItem("playlists")); 20 | } 21 | }, 22 | createPlaylist(state, name) { 23 | state.playlists.push({ name, videos: [] }); 24 | localStorage.setItem("playlists", JSON.stringify(state.playlists)); 25 | }, 26 | removePlaylist(state, index) { 27 | state.playlists.splice(index, 1); 28 | localStorage.setItem("playlists", JSON.stringify(state.playlists)); 29 | }, 30 | addToPlaylist(state, { index, video }) { 31 | state.playlists[index].videos.unshift(video); 32 | localStorage.setItem("playlists", JSON.stringify(state.playlists)); 33 | }, 34 | removeFromPlaylist(state, { playlistIndex, video }) { 35 | const videoIndex = state.playlists[playlistIndex].videos.findIndex( 36 | (playlistVideo) => playlistVideo.id === video.id 37 | ); 38 | if (videoIndex === -1) throw new Error("Unable To Find Video"); 39 | state.playlists[playlistIndex].videos.splice(videoIndex, 1); 40 | localStorage.setItem("playlists", JSON.stringify(state.playlists)); 41 | }, 42 | changeToPlaylist(state, videoIndex) { 43 | state.currentPlaylist = { 44 | index: videoIndex, 45 | ...state.playlists[videoIndex], 46 | }; 47 | }, 48 | exitPlaylist(state) { 49 | state.currentPlaylist = null; 50 | }, 51 | }; 52 | -------------------------------------------------------------------------------- /NUXT/store/search/index.js: -------------------------------------------------------------------------------- 1 | export const state = () => ({ 2 | loading: false, 3 | }); 4 | export const mutations = { 5 | setLoading(state, payload) { 6 | state.loading = payload; 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /NUXT/store/tweaks/index.js: -------------------------------------------------------------------------------- 1 | export const state = () => ({ 2 | roundTweak: null, 3 | roundThumb: null, 4 | roundWatch: null, 5 | launchTheme: null, 6 | launchIconTheme: null, 7 | navigationText: null, 8 | navigationShift: null, 9 | navigationIcons: null, 10 | }); 11 | export const mutations = { 12 | initTweaks(state) { 13 | if (process.client) { 14 | state.roundTweak = JSON.parse(localStorage.getItem("roundTweak")) || 0; // defaults to 0 15 | state.roundThumb = 16 | JSON.parse(localStorage.getItem("roundThumb")) === true; // defaults to false 17 | state.roundWatch = 18 | JSON.parse(localStorage.getItem("roundWatch")) === true; // defaults to false 19 | } 20 | state.launchTheme = JSON.parse(localStorage.getItem("launchTheme")) || 0; // defaults to 0 21 | state.launchIconTheme = 22 | JSON.parse(localStorage.getItem("launchIconTheme")) === true; // defaults to false 23 | 24 | state.navigationText = !( 25 | // false if false, defaults to true 26 | (JSON.parse(localStorage.getItem("navigationText")) === false) 27 | ); 28 | state.navigationShift = !( 29 | // false if false, defaults to true 30 | (JSON.parse(localStorage.getItem("navigationShift")) === false) 31 | ); 32 | state.navigationIcons = 33 | JSON.parse(localStorage.getItem("navigationIcons")) || 0; // defaults to 0 34 | }, 35 | setRoundTweak(state, payload) { 36 | if (!isNaN(payload)) { 37 | state.roundTweak = payload; 38 | localStorage.setItem("roundTweak", payload); 39 | } 40 | }, 41 | setRoundThumb(state, payload) { 42 | state.roundThumb = payload; 43 | localStorage.setItem("roundThumb", payload); 44 | }, 45 | setRoundWatch(state, payload) { 46 | state.roundWatch = payload; 47 | localStorage.setItem("roundWatch", payload); 48 | }, 49 | setLaunchTheme(state, payload) { 50 | state.launchTheme = payload; 51 | localStorage.setItem("launchTheme", payload); 52 | }, 53 | setLaunchIconTheme(state, payload) { 54 | state.launchIconTheme = payload; 55 | localStorage.setItem("launchIconTheme", payload); 56 | }, 57 | setNavigationText(state, payload) { 58 | state.navigationText = payload; 59 | localStorage.setItem("navigationText", payload); 60 | }, 61 | setNavigationShift(state, payload) { 62 | state.navigationShift = payload; 63 | localStorage.setItem("navigationShift", payload); 64 | }, 65 | setNavigationIcons(state, payload) { 66 | state.navigationIcons = payload; 67 | localStorage.setItem("navigationIcons", payload); 68 | }, 69 | }; 70 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | # Using Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore 2 | 3 | # Built application files 4 | *.apk 5 | *.aar 6 | *.ap_ 7 | *.aab 8 | 9 | # Files for the ART/Dalvik VM 10 | *.dex 11 | 12 | # Java class files 13 | *.class 14 | 15 | # Generated files 16 | bin/ 17 | gen/ 18 | out/ 19 | # Uncomment the following line in case you need and you don't have the release build type files in your app 20 | # release/ 21 | 22 | # Gradle files 23 | .gradle/ 24 | build/ 25 | 26 | # Local configuration file (sdk path, etc) 27 | local.properties 28 | 29 | # Proguard folder generated by Eclipse 30 | proguard/ 31 | 32 | # Log Files 33 | *.log 34 | 35 | # Android Studio Navigation editor temp files 36 | .navigation/ 37 | 38 | # Android Studio captures folder 39 | captures/ 40 | 41 | # IntelliJ 42 | *.iml 43 | .idea/workspace.xml 44 | .idea/tasks.xml 45 | .idea/gradle.xml 46 | .idea/assetWizardSettings.xml 47 | .idea/dictionaries 48 | .idea/libraries 49 | # Android Studio 3 in .gitignore file. 50 | .idea/caches 51 | .idea/modules.xml 52 | # Comment next line if keeping position of elements in Navigation Editor is relevant for you 53 | .idea/navEditor.xml 54 | 55 | # Keystore files 56 | # Uncomment the following lines if you do not want to check your keystore files in. 57 | #*.jks 58 | #*.keystore 59 | 60 | # External native build folder generated in Android Studio 2.2 and later 61 | .externalNativeBuild 62 | .cxx/ 63 | 64 | # Google Services (e.g. APIs or Firebase) 65 | # google-services.json 66 | 67 | # Freeline 68 | freeline.py 69 | freeline/ 70 | freeline_project_description.json 71 | 72 | # fastlane 73 | fastlane/report.xml 74 | fastlane/Preview.html 75 | fastlane/screenshots 76 | fastlane/test_output 77 | fastlane/readme.md 78 | 79 | # Version control 80 | vcs.xml 81 | 82 | # lint 83 | lint/intermediates/ 84 | lint/generated/ 85 | lint/outputs/ 86 | lint/tmp/ 87 | # lint/reports/ 88 | 89 | # Android Profiling 90 | *.hprof 91 | 92 | # Cordova plugins for Capacitor 93 | #capacitor-cordova-android-plugins 94 | 95 | # Copied web assets 96 | app/src/main/assets/public 97 | -------------------------------------------------------------------------------- /android/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /android/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/.idea/gradle.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/.idea/gradle.properties -------------------------------------------------------------------------------- /android/.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | 29 | 30 | -------------------------------------------------------------------------------- /android/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build/* 2 | !/build/.npmkeep 3 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion rootProject.ext.compileSdkVersion 5 | defaultConfig { 6 | applicationId "com.Frontesque.vuetube" 7 | minSdkVersion rootProject.ext.minSdkVersion 8 | targetSdkVersion rootProject.ext.targetSdkVersion 9 | versionCode 1 10 | versionName "0.4.2" 11 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 12 | aaptOptions { 13 | // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. 14 | // Default: https://android.googlesource.com/platform/frameworks/base/+/282e181b58cf72b6ca770dc7ca5f91f135444502/tools/aapt/AaptAssets.cpp#61 15 | ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~' 16 | } 17 | } 18 | buildTypes { 19 | release { 20 | minifyEnabled false 21 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 22 | } 23 | } 24 | } 25 | 26 | repositories { 27 | flatDir{ 28 | dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs' 29 | } 30 | } 31 | 32 | dependencies { 33 | implementation fileTree(include: ['*.jar'], dir: 'libs') 34 | implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion" 35 | implementation project(':capacitor-android') 36 | testImplementation "junit:junit:$junitVersion" 37 | androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion" 38 | androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion" 39 | implementation project(':capacitor-cordova-android-plugins') 40 | } 41 | 42 | apply from: 'capacitor.build.gradle' 43 | 44 | try { 45 | def servicesJSON = file('google-services.json') 46 | if (servicesJSON.text) { 47 | apply plugin: 'com.google.gms.google-services' 48 | } 49 | } catch(Exception e) { 50 | logger.info("google-services.json not found, google-services plugin not applied. Push Notifications won't work") 51 | } 52 | -------------------------------------------------------------------------------- /android/app/capacitor.build.gradle: -------------------------------------------------------------------------------- 1 | // DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN 2 | 3 | android { 4 | compileOptions { 5 | sourceCompatibility JavaVersion.VERSION_1_8 6 | targetCompatibility JavaVersion.VERSION_1_8 7 | } 8 | } 9 | 10 | apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" 11 | dependencies { 12 | implementation project(':capacitor-community-http') 13 | implementation project(':capacitor-app') 14 | implementation project(':capacitor-device') 15 | implementation project(':capacitor-filesystem') 16 | implementation project(':capacitor-haptics') 17 | implementation project(':capacitor-share') 18 | implementation project(':capacitor-splash-screen') 19 | implementation project(':capacitor-status-bar') 20 | implementation project(':capacitor-toast') 21 | implementation project(':hugotomazi-capacitor-navigation-bar') 22 | 23 | } 24 | 25 | 26 | if (hasProperty('postBuildExtras')) { 27 | postBuildExtras() 28 | } 29 | -------------------------------------------------------------------------------- /android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /android/app/release/output-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "artifactType": { 4 | "type": "APK", 5 | "kind": "Directory" 6 | }, 7 | "applicationId": "com.Frontesque.vuetube", 8 | "variantName": "release", 9 | "elements": [ 10 | { 11 | "type": "SINGLE", 12 | "filters": [], 13 | "attributes": [], 14 | "versionCode": 1, 15 | "versionName": "0.4.2", 16 | "outputFile": "app-release.apk" 17 | } 18 | ], 19 | "elementType": "File" 20 | } -------------------------------------------------------------------------------- /android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.getcapacitor.myapp; 2 | 3 | import static org.junit.Assert.*; 4 | 5 | import android.content.Context; 6 | import androidx.test.ext.junit.runners.AndroidJUnit4; 7 | import androidx.test.platform.app.InstrumentationRegistry; 8 | import org.junit.Test; 9 | import org.junit.runner.RunWith; 10 | 11 | /** 12 | * Instrumented test, which will execute on an Android device. 13 | * 14 | * @see Testing documentation 15 | */ 16 | @RunWith(AndroidJUnit4.class) 17 | public class ExampleInstrumentedTest { 18 | 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); 23 | 24 | assertEquals("com.getcapacitor.app", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /android/app/src/main/assets/capacitor.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "appId": "com.Frontesque.vuetube", 3 | "appName": "VueTube", 4 | "webDir": "dist", 5 | "bundledWebRuntime": false, 6 | "server": { 7 | "hostname": "youtube.com", 8 | "androidScheme": "https" 9 | }, 10 | "android": { 11 | "backgroundColor": "#000000" 12 | }, 13 | "ios": { 14 | "backgroundColor": "#000000" 15 | }, 16 | "plugins": { 17 | "SplashScreen": { 18 | "launchShowDuration": 0, 19 | "backgroundColor": "#000000", 20 | "splashFullScreen": false, 21 | "splashImmersive": false, 22 | "launchAutoHide": true, 23 | "showSpinner": false 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /android/app/src/main/assets/capacitor.plugins.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "pkg": "@capacitor-community/http", 4 | "classpath": "com.getcapacitor.plugin.http.Http" 5 | }, 6 | { 7 | "pkg": "@capacitor/app", 8 | "classpath": "com.capacitorjs.plugins.app.AppPlugin" 9 | }, 10 | { 11 | "pkg": "@capacitor/device", 12 | "classpath": "com.capacitorjs.plugins.device.DevicePlugin" 13 | }, 14 | { 15 | "pkg": "@capacitor/filesystem", 16 | "classpath": "com.capacitorjs.plugins.filesystem.FilesystemPlugin" 17 | }, 18 | { 19 | "pkg": "@capacitor/haptics", 20 | "classpath": "com.capacitorjs.plugins.haptics.HapticsPlugin" 21 | }, 22 | { 23 | "pkg": "@capacitor/share", 24 | "classpath": "com.capacitorjs.plugins.share.SharePlugin" 25 | }, 26 | { 27 | "pkg": "@capacitor/splash-screen", 28 | "classpath": "com.capacitorjs.plugins.splashscreen.SplashScreenPlugin" 29 | }, 30 | { 31 | "pkg": "@capacitor/status-bar", 32 | "classpath": "com.capacitorjs.plugins.statusbar.StatusBarPlugin" 33 | }, 34 | { 35 | "pkg": "@capacitor/toast", 36 | "classpath": "com.capacitorjs.plugins.toast.ToastPlugin" 37 | }, 38 | { 39 | "pkg": "@hugotomazi/capacitor-navigation-bar", 40 | "classpath": "br.com.tombus.capacitor.plugin.navigationbar.NavigationBarPlugin" 41 | } 42 | ] 43 | -------------------------------------------------------------------------------- /android/app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /android/app/src/main/java/com/Frontesque/vuetube/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.Frontesque.vuetube; 2 | 3 | import com.getcapacitor.BridgeActivity; 4 | 5 | public class MainActivity extends BridgeActivity {} 6 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-land-hdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/drawable-land-hdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-land-mdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/drawable-land-mdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-land-xhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/drawable-land-xhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-land-xxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/drawable-land-xxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-land-xxxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/drawable-land-xxxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-port-hdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/drawable-port-hdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-port-mdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/drawable-port-mdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-port-xhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/drawable-port-xhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-port-xxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/drawable-port-xxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-port-xxxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/drawable-port-xxxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v24/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 7 | 9 | 11 | 12 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 13 | 19 | 22 | 25 | 26 | 27 | 28 | 34 | 35 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v24/ic_launcher_monochrome.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/drawable/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | VueTube 4 | VueTube 5 | com.Frontesque.vuetube 6 | com.Frontesque.vuetube 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 12 | 17 | 18 | 19 | 22 | -------------------------------------------------------------------------------- /android/app/src/main/res/xml/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/xml/file_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.getcapacitor.myapp; 2 | 3 | import static org.junit.Assert.*; 4 | 5 | import org.junit.Test; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | 14 | @Test 15 | public void addition_isCorrect() throws Exception { 16 | assertEquals(4, 2 + 2); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | 5 | repositories { 6 | google() 7 | jcenter() 8 | } 9 | dependencies { 10 | classpath 'com.android.tools.build:gradle:7.2.1' 11 | classpath 'com.google.gms:google-services:4.3.10' 12 | 13 | // NOTE: Do not place your application dependencies here; they belong 14 | // in the individual module build.gradle files 15 | } 16 | } 17 | 18 | apply from: "variables.gradle" 19 | 20 | allprojects { 21 | repositories { 22 | google() 23 | jcenter() 24 | } 25 | } 26 | 27 | task clean(type: Delete) { 28 | delete rootProject.buildDir 29 | } 30 | -------------------------------------------------------------------------------- /android/capacitor-cordova-android-plugins/build.gradle: -------------------------------------------------------------------------------- 1 | ext { 2 | androidxAppCompatVersion = project.hasProperty('androidxAppCompatVersion') ? rootProject.ext.androidxAppCompatVersion : '1.2.0' 3 | cordovaAndroidVersion = project.hasProperty('cordovaAndroidVersion') ? rootProject.ext.cordovaAndroidVersion : '7.0.0' 4 | } 5 | 6 | buildscript { 7 | repositories { 8 | google() 9 | jcenter() 10 | } 11 | dependencies { 12 | classpath 'com.android.tools.build:gradle:4.2.1' 13 | } 14 | } 15 | 16 | apply plugin: 'com.android.library' 17 | 18 | android { 19 | compileSdkVersion project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 30 20 | defaultConfig { 21 | minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 21 22 | targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 30 23 | versionCode 1 24 | versionName "1.0" 25 | } 26 | lintOptions { 27 | abortOnError false 28 | } 29 | compileOptions { 30 | sourceCompatibility JavaVersion.VERSION_1_8 31 | targetCompatibility JavaVersion.VERSION_1_8 32 | } 33 | } 34 | 35 | repositories { 36 | google() 37 | mavenCentral() 38 | jcenter() 39 | flatDir{ 40 | dirs 'src/main/libs', 'libs' 41 | } 42 | } 43 | 44 | dependencies { 45 | implementation fileTree(dir: 'src/main/libs', include: ['*.jar']) 46 | implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion" 47 | implementation "org.apache.cordova:framework:$cordovaAndroidVersion" 48 | // SUB-PROJECT DEPENDENCIES START 49 | 50 | // SUB-PROJECT DEPENDENCIES END 51 | } 52 | 53 | // PLUGIN GRADLE EXTENSIONS START 54 | apply from: "cordova.variables.gradle" 55 | // PLUGIN GRADLE EXTENSIONS END 56 | 57 | for (def func : cdvPluginPostBuildExtras) { 58 | func() 59 | } -------------------------------------------------------------------------------- /android/capacitor-cordova-android-plugins/cordova.variables.gradle: -------------------------------------------------------------------------------- 1 | // DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN 2 | ext { 3 | cdvMinSdkVersion = project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 21 4 | // Plugin gradle extensions can append to this to have code run at the end. 5 | cdvPluginPostBuildExtras = [] 6 | cordovaConfig = [:] 7 | } -------------------------------------------------------------------------------- /android/capacitor-cordova-android-plugins/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/capacitor-cordova-android-plugins/src/main/java/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/capacitor-cordova-android-plugins/src/main/java/.gitkeep -------------------------------------------------------------------------------- /android/capacitor-cordova-android-plugins/src/main/res/.gitkeep: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /android/capacitor.settings.gradle: -------------------------------------------------------------------------------- 1 | // DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN 2 | include ':capacitor-android' 3 | project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor') 4 | 5 | include ':capacitor-community-http' 6 | project(':capacitor-community-http').projectDir = new File('../node_modules/@capacitor-community/http/android') 7 | 8 | include ':capacitor-app' 9 | project(':capacitor-app').projectDir = new File('../node_modules/@capacitor/app/android') 10 | 11 | include ':capacitor-device' 12 | project(':capacitor-device').projectDir = new File('../node_modules/@capacitor/device/android') 13 | 14 | include ':capacitor-filesystem' 15 | project(':capacitor-filesystem').projectDir = new File('../node_modules/@capacitor/filesystem/android') 16 | 17 | include ':capacitor-haptics' 18 | project(':capacitor-haptics').projectDir = new File('../node_modules/@capacitor/haptics/android') 19 | 20 | include ':capacitor-share' 21 | project(':capacitor-share').projectDir = new File('../node_modules/@capacitor/share/android') 22 | 23 | include ':capacitor-splash-screen' 24 | project(':capacitor-splash-screen').projectDir = new File('../node_modules/@capacitor/splash-screen/android') 25 | 26 | include ':capacitor-status-bar' 27 | project(':capacitor-status-bar').projectDir = new File('../node_modules/@capacitor/status-bar/android') 28 | 29 | include ':capacitor-toast' 30 | project(':capacitor-toast').projectDir = new File('../node_modules/@capacitor/toast/android') 31 | 32 | include ':hugotomazi-capacitor-navigation-bar' 33 | project(':hugotomazi-capacitor-navigation-bar').projectDir = new File('../node_modules/@hugotomazi/capacitor-navigation-bar/android') 34 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | org.gradle.jvmargs=-Xmx1536m 13 | 14 | # When configured, Gradle will run in incubating parallel mode. 15 | # This option should only be used with decoupled projects. More details, visit 16 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 17 | # org.gradle.parallel=true 18 | 19 | # AndroidX package structure to make it clearer which packages are bundled with the 20 | # Android operating system, and which are packaged with your app's APK 21 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 22 | android.useAndroidX=true 23 | # Automatically convert third-party libraries to use AndroidX 24 | android.enableJetifier=true 25 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /android/key.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/android/key.jks -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | include ':capacitor-cordova-android-plugins' 3 | project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/') 4 | 5 | apply from: 'capacitor.settings.gradle' -------------------------------------------------------------------------------- /android/variables.gradle: -------------------------------------------------------------------------------- 1 | ext { 2 | minSdkVersion = 21 3 | compileSdkVersion = 30 4 | targetSdkVersion = 30 5 | androidxActivityVersion = '1.2.0' 6 | androidxAppCompatVersion = '1.2.0' 7 | androidxCoordinatorLayoutVersion = '1.1.0' 8 | androidxCoreVersion = '1.3.2' 9 | androidxFragmentVersion = '1.3.0' 10 | junitVersion = '4.13.1' 11 | androidxJunitVersion = '1.1.2' 12 | androidxEspressoCoreVersion = '3.3.0' 13 | cordovaAndroidVersion = '7.0.0' 14 | } -------------------------------------------------------------------------------- /capacitor.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "appId": "com.Frontesque.vuetube", 3 | "appName": "VueTube", 4 | "webDir": "dist", 5 | "bundledWebRuntime": false, 6 | 7 | "server": { 8 | "hostname": "youtube.com", 9 | "androidScheme": "https" 10 | }, 11 | 12 | "android": { 13 | "backgroundColor": "#000000" 14 | }, 15 | "ios": { 16 | "backgroundColor": "#000000" 17 | }, 18 | 19 | "plugins": { 20 | "SplashScreen": { 21 | "launchShowDuration": 0, 22 | "backgroundColor": "#000000", 23 | "splashFullScreen": false, 24 | "splashImmersive": false, 25 | "launchAutoHide": true, 26 | "showSpinner": false 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | App/build 2 | App/Pods 3 | App/Podfile.lock 4 | App/App/public 5 | DerivedData 6 | xcuserdata 7 | 8 | # Cordova plugins for Capacitor 9 | capacitor-cordova-ios-plugins 10 | -------------------------------------------------------------------------------- /ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/App/App.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/App/App/App.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.network.client 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@1x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x-1.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@3x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@1x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x-1.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@3x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@1x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x-1.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@3x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@3x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@1x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "size": "20x20", 5 | "idiom": "iphone", 6 | "filename": "AppIcon-20x20@2x.png", 7 | "scale": "2x" 8 | }, 9 | { 10 | "size": "20x20", 11 | "idiom": "iphone", 12 | "filename": "AppIcon-20x20@3x.png", 13 | "scale": "3x" 14 | }, 15 | { 16 | "size": "29x29", 17 | "idiom": "iphone", 18 | "filename": "AppIcon-29x29@2x-1.png", 19 | "scale": "2x" 20 | }, 21 | { 22 | "size": "29x29", 23 | "idiom": "iphone", 24 | "filename": "AppIcon-29x29@3x.png", 25 | "scale": "3x" 26 | }, 27 | { 28 | "size": "40x40", 29 | "idiom": "iphone", 30 | "filename": "AppIcon-40x40@2x.png", 31 | "scale": "2x" 32 | }, 33 | { 34 | "size": "40x40", 35 | "idiom": "iphone", 36 | "filename": "AppIcon-40x40@3x.png", 37 | "scale": "3x" 38 | }, 39 | { 40 | "size": "60x60", 41 | "idiom": "iphone", 42 | "filename": "AppIcon-60x60@2x.png", 43 | "scale": "2x" 44 | }, 45 | { 46 | "size": "60x60", 47 | "idiom": "iphone", 48 | "filename": "AppIcon-60x60@3x.png", 49 | "scale": "3x" 50 | }, 51 | { 52 | "size": "20x20", 53 | "idiom": "ipad", 54 | "filename": "AppIcon-20x20@1x.png", 55 | "scale": "1x" 56 | }, 57 | { 58 | "size": "20x20", 59 | "idiom": "ipad", 60 | "filename": "AppIcon-20x20@2x-1.png", 61 | "scale": "2x" 62 | }, 63 | { 64 | "size": "29x29", 65 | "idiom": "ipad", 66 | "filename": "AppIcon-29x29@1x.png", 67 | "scale": "1x" 68 | }, 69 | { 70 | "size": "29x29", 71 | "idiom": "ipad", 72 | "filename": "AppIcon-29x29@2x.png", 73 | "scale": "2x" 74 | }, 75 | { 76 | "size": "40x40", 77 | "idiom": "ipad", 78 | "filename": "AppIcon-40x40@1x.png", 79 | "scale": "1x" 80 | }, 81 | { 82 | "size": "40x40", 83 | "idiom": "ipad", 84 | "filename": "AppIcon-40x40@2x-1.png", 85 | "scale": "2x" 86 | }, 87 | { 88 | "size": "76x76", 89 | "idiom": "ipad", 90 | "filename": "AppIcon-76x76@1x.png", 91 | "scale": "1x" 92 | }, 93 | { 94 | "size": "76x76", 95 | "idiom": "ipad", 96 | "filename": "AppIcon-76x76@2x.png", 97 | "scale": "2x" 98 | }, 99 | { 100 | "size": "83.5x83.5", 101 | "idiom": "ipad", 102 | "filename": "AppIcon-83.5x83.5@2x.png", 103 | "scale": "2x" 104 | }, 105 | { 106 | "size": "1024x1024", 107 | "idiom": "ios-marketing", 108 | "filename": "AppIcon-512@2x.png", 109 | "scale": "1x" 110 | } 111 | ], 112 | "info": { 113 | "version": 1, 114 | "author": "xcode" 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info": { 3 | "version": 1, 4 | "author": "xcode" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Splash.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "idiom": "universal", 5 | "filename": "splash-2732x2732-2.png", 6 | "scale": "1x" 7 | }, 8 | { 9 | "idiom": "universal", 10 | "filename": "splash-2732x2732-1.png", 11 | "scale": "2x" 12 | }, 13 | { 14 | "idiom": "universal", 15 | "filename": "splash-2732x2732.png", 16 | "scale": "3x" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png -------------------------------------------------------------------------------- /ios/App/App/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /ios/App/App/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /ios/App/App/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | VueTube 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | NSAppTransportSecurity 26 | 27 | NSAllowsArbitraryLoads 28 | 29 | 30 | UILaunchStoryboardName 31 | LaunchScreen 32 | UIMainStoryboardFile 33 | Main 34 | UIRequiredDeviceCapabilities 35 | 36 | armv7 37 | 38 | UISupportedInterfaceOrientations 39 | 40 | UIInterfaceOrientationPortrait 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | UISupportedInterfaceOrientations~ipad 45 | 46 | UIInterfaceOrientationPortrait 47 | UIInterfaceOrientationPortraitUpsideDown 48 | UIInterfaceOrientationLandscapeLeft 49 | UIInterfaceOrientationLandscapeRight 50 | 51 | UIViewControllerBasedStatusBarAppearance 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /ios/App/App/capacitor.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "appId": "com.Frontesque.vuetube", 3 | "appName": "VueTube", 4 | "webDir": "dist", 5 | "bundledWebRuntime": false, 6 | "server": { 7 | "hostname": "youtube.com", 8 | "androidScheme": "https" 9 | }, 10 | "android": { 11 | "backgroundColor": "#000000" 12 | }, 13 | "ios": { 14 | "backgroundColor": "#000000" 15 | }, 16 | "plugins": { 17 | "SplashScreen": { 18 | "launchShowDuration": 0, 19 | "backgroundColor": "#000000", 20 | "splashFullScreen": false, 21 | "splashImmersive": false, 22 | "launchAutoHide": true, 23 | "showSpinner": false 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /ios/App/App/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /ios/App/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '12.0' 2 | use_frameworks! 3 | 4 | # workaround to avoid Xcode caching of Pods that requires 5 | # Product -> Clean Build Folder after new Cordova plugins installed 6 | # Requires CocoaPods 1.6 or newer 7 | install! 'cocoapods', :disable_input_output_paths => true 8 | 9 | def capacitor_pods 10 | pod 'Capacitor', :path => '../../node_modules/@capacitor/ios' 11 | pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios' 12 | pod 'CapacitorCommunityHttp', :path => '..\..\node_modules\@capacitor-community\http' 13 | pod 'CapacitorApp', :path => '..\..\node_modules\@capacitor\app' 14 | pod 'CapacitorDevice', :path => '..\..\node_modules\@capacitor\device' 15 | pod 'CapacitorFilesystem', :path => '..\..\node_modules\@capacitor\filesystem' 16 | pod 'CapacitorHaptics', :path => '..\..\node_modules\@capacitor\haptics' 17 | pod 'CapacitorShare', :path => '..\..\node_modules\@capacitor\share' 18 | pod 'CapacitorSplashScreen', :path => '..\..\node_modules\@capacitor\splash-screen' 19 | pod 'CapacitorStatusBar', :path => '..\..\node_modules\@capacitor\status-bar' 20 | pod 'CapacitorToast', :path => '..\..\node_modules\@capacitor\toast' 21 | pod 'HugotomaziCapacitorNavigationBar', :path => '..\..\node_modules\@hugotomazi\capacitor-navigation-bar' 22 | pod 'CordovaPlugins', :path => '../capacitor-cordova-ios-plugins' 23 | end 24 | 25 | target 'App' do 26 | capacitor_pods 27 | # Add your Pods here 28 | end 29 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "@capacitor-community/http": "^1.4.1", 4 | "@capacitor/android": "^3.7.0", 5 | "@capacitor/app": "^1.1.1", 6 | "@capacitor/cli": "^3.7.0", 7 | "@capacitor/core": "^3.7.0", 8 | "@capacitor/device": "^1.1.2", 9 | "@capacitor/filesystem": "^1.1.0", 10 | "@capacitor/haptics": "^1.1.4", 11 | "@capacitor/share": "^1.1.2", 12 | "@capacitor/splash-screen": "^1.2.2", 13 | "@capacitor/status-bar": "^1.0.8", 14 | "@capacitor/toast": "^1.0.8", 15 | "@hugotomazi/capacitor-navigation-bar": "^1.1.1", 16 | "cordova-plugin-screen-orientation": "^3.0.2", 17 | "es6-promise-plugin": "^4.2.2", 18 | "iconv-lite": "^0.6.3" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /resources/PlayIcon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/Stable.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/VueTube Possible Redesign.afdesign: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/VueTube Possible Redesign.afdesign -------------------------------------------------------------------------------- /resources/bottom_banner_readme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/bottom_banner_readme.png -------------------------------------------------------------------------------- /resources/getcanary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/getcanary.png -------------------------------------------------------------------------------- /resources/getstable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/getstable.png -------------------------------------------------------------------------------- /resources/getunstable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/getunstable.png -------------------------------------------------------------------------------- /resources/readme-es/bottom_banner_readme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/readme-es/bottom_banner_readme.png -------------------------------------------------------------------------------- /resources/readme-hu/bottom_banner_readme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/readme-hu/bottom_banner_readme.png -------------------------------------------------------------------------------- /resources/readme-id/bottom_banner_readme_id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/readme-id/bottom_banner_readme_id.png -------------------------------------------------------------------------------- /resources/readme_icon_acknowledgements.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/readme_icon_acknowledgements.png -------------------------------------------------------------------------------- /resources/readme_icon_android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/readme_icon_android.png -------------------------------------------------------------------------------- /resources/readme_icon_community.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/readme_icon_community.png -------------------------------------------------------------------------------- /resources/readme_icon_disclaimer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/readme_icon_disclaimer.png -------------------------------------------------------------------------------- /resources/readme_icon_donate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/readme_icon_donate.png -------------------------------------------------------------------------------- /resources/readme_icon_features.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/readme_icon_features.png -------------------------------------------------------------------------------- /resources/readme_icon_github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/readme_icon_github.png -------------------------------------------------------------------------------- /resources/readme_icon_install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/readme_icon_install.png -------------------------------------------------------------------------------- /resources/readme_icon_ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/readme_icon_ios.png -------------------------------------------------------------------------------- /resources/readme_icon_otherrepos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/readme_icon_otherrepos.png -------------------------------------------------------------------------------- /resources/readme_icon_plans.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/readme_icon_plans.png -------------------------------------------------------------------------------- /resources/readme_icon_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/readme_icon_progress.png -------------------------------------------------------------------------------- /resources/readme_icon_screenshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/readme_icon_screenshots.png -------------------------------------------------------------------------------- /resources/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VueTubeApp/VueTube/2e063e295a6eb0fe1dc0089a1e1ed0178256e755/resources/splash.png -------------------------------------------------------------------------------- /scripts/build.ps1: -------------------------------------------------------------------------------- 1 | cd .\NUXT\; npm run generate; cd ..; npx cap sync android -------------------------------------------------------------------------------- /scripts/build.sh: -------------------------------------------------------------------------------- 1 | cd NUXT/; npm run generate; cd ..; npx cap sync -------------------------------------------------------------------------------- /scripts/hot.sh: -------------------------------------------------------------------------------- 1 | function hot { 2 | if (( $# < 2 )); then 3 | echo 'USAGE: hot [ ... ]' 4 | echo ' will be run once when any of the files listed is changed (i.e. ls -l has its output changed)' 5 | else 6 | script=$1 7 | shift 8 | a=''; 9 | while true; do 10 | b=`ls -lahR $* | grep -v 'node_modules'` 11 | # to avoid confusing myself with nested-if - it is a "short form" of doing a=$b; eval $script if $a != $b. 12 | [[ $a != $b ]] && a=$b && eval time $script; 13 | sleep .5; 14 | done 15 | fi 16 | } 17 | 18 | # NOTE: run from the root of the project 19 | hot ./scripts/build.sh NUXT 20 | -------------------------------------------------------------------------------- /scripts/install.sh: -------------------------------------------------------------------------------- 1 | npm i; cd NUXT/; npm i; cd ..; --------------------------------------------------------------------------------