about summary refs log tree commit diff stats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/_locales/fa/messages.json137
-rw-r--r--src/_locales/ta/messages.json137
-rw-r--r--src/assets/javascripts/services.js68
-rw-r--r--src/config.json8
-rw-r--r--src/pages/options_src/General/SettingsButtons.svelte2
5 files changed, 349 insertions, 3 deletions
diff --git a/src/_locales/fa/messages.json b/src/_locales/fa/messages.json
new file mode 100644
index 00000000..9ededff6
--- /dev/null
+++ b/src/_locales/fa/messages.json
@@ -0,0 +1,137 @@
+{
+    "both": {
+        "message": "هر دو"
+    },
+    "exportSettings": {
+        "message": "خروجی گرفتن از تنظیمات"
+    },
+    "extensionName": {
+        "message": "LibRedirect"
+    },
+    "settings": {
+        "message": "تنظیمات"
+    },
+    "switchInstance": {
+        "message": "جایگزینی نمونه"
+    },
+    "general": {
+        "message": "عمومی"
+    },
+    "theme": {
+        "message": "پوسته"
+    },
+    "auto": {
+        "message": "خودکار"
+    },
+    "excludeFromRedirecting": {
+        "message": "چشم‌پوشی از هدایت کردن"
+    },
+    "importSettings": {
+        "message": "واردکردن تنظیمات"
+    },
+    "resetSettings": {
+        "message": "بازنشانی تنظیمات"
+    },
+    "enable": {
+        "message": "فعال‌کردن"
+    },
+    "frontend": {
+        "message": "پیشگاه"
+    },
+    "redirectType": {
+        "message": "نوع هدایت"
+    },
+    "onlyEmbedded": {
+        "message": "تنها جاسازی شده"
+    },
+    "onlyNotEmbedded": {
+        "message": "تنها جاسازی نشده"
+    },
+    "addYourFavoriteInstances": {
+        "message": "افزودن نمونه‌های مورد پسند شما"
+    },
+    "light": {
+        "message": "روشن"
+    },
+    "dark": {
+        "message": "تیره"
+    },
+    "showInPopup": {
+        "message": "نمایش در بازشونده"
+    },
+    "copyOriginal": {
+        "message": "رونویسی اصلی"
+    },
+    "copied": {
+        "message": "رونویسی شد"
+    },
+    "redirectToOriginal": {
+        "message": "هدایت به اصلی"
+    },
+    "about": {
+        "message": "درباره"
+    },
+    "unsupportedIframesHandling": {
+        "message": "مدیریت جاسازی‌های پشتیبانی نشده"
+    },
+    "disable": {
+        "message": "غیر‌فعال کردن"
+    },
+    "pingInstances": {
+        "message": "پینگ گرفتن از نمونه‌ها"
+    },
+    "exportSettingsToSync": {
+        "message": "خروجی گرفتن از تنظیمات برای همگام‌سازی"
+    },
+    "importSettingsFromSync": {
+        "message": "واردکردن تنظیمات برای همگام‌سازی"
+    },
+    "services": {
+        "message": "سامانه‌ها"
+    },
+    "service": {
+        "message": "سامانه"
+    },
+    "redirectOnlyInIncognito": {
+        "message": "تنها هدایت کردن در حالت خصوصی"
+    },
+    "bypass": {
+        "message": "دور زدن"
+    },
+    "block": {
+        "message": "مسدود کردن"
+    },
+    "redirect": {
+        "message": "هدایت کردن"
+    },
+    "autoPickInstance": {
+        "message": "گزینش خودکار نمونه"
+    },
+    "redirectGoogle": {
+        "message": "هدایت کردن گوگل"
+    },
+    "search_frontend": {
+        "message": "جستجو پیشگاه"
+    },
+    "searchService": {
+        "message": "جستجو سامانه"
+    },
+    "embedFrontend": {
+        "message": "پیشگاه جاسازی‌شده"
+    },
+    "extensionDescription": {
+        "message": "یک افزونه مرورگر که وبگاه های محبوب را به نمونه‌های دوست‌دار حریم خصوصی هدایت میکند"
+    },
+    "bookmarksMenu": {
+        "message": "فهرست نشان شده‌ها"
+    },
+    "redirectLink": {
+        "message": "تلاش برای هدایت"
+    },
+    "fetchPublicInstances": {
+        "message": "دریافت نمونه‌های عمومی"
+    },
+    "searchHint": {
+        "message": "LIBREDIRECT را به عنوان موتور جستجوی پیش‌فرض تنظیم کنید. برای نحوه انجام در مرورگرهای کروم ، روی <a href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>اینجا</a> ضربه بزنید."
+    }
+}
diff --git a/src/_locales/ta/messages.json b/src/_locales/ta/messages.json
new file mode 100644
index 00000000..d566ddaa
--- /dev/null
+++ b/src/_locales/ta/messages.json
@@ -0,0 +1,137 @@
+{
+    "extensionName": {
+        "message": "லிப்ரெடிரிடர்"
+    },
+    "switchInstance": {
+        "message": "சான்று"
+    },
+    "copyOriginal": {
+        "message": "அசல் நகலெடுக்கவும்"
+    },
+    "autoPickInstance": {
+        "message": "ஆட்டோ-பிக் நிகழ்வு"
+    },
+    "extensionDescription": {
+        "message": "பிரபலமான தளங்களை மாற்று தனியுரிமை நட்பு முன்பக்கங்கள் மற்றும் பின்தளத்தில் திருப்பி விடும் ஒரு வலை நீட்டிப்பு"
+    },
+    "settings": {
+        "message": "அமைப்புகள்"
+    },
+    "general": {
+        "message": "பொது"
+    },
+    "theme": {
+        "message": "கருப்பொருள்"
+    },
+    "light": {
+        "message": "ஒளி"
+    },
+    "dark": {
+        "message": "இருண்ட"
+    },
+    "auto": {
+        "message": "தானி"
+    },
+    "excludeFromRedirecting": {
+        "message": "திருப்பிவிடுவதிலிருந்து விலக்கப்பட்டது"
+    },
+    "importSettings": {
+        "message": "அமைப்புகளை இறக்குமதி செய்யுங்கள்"
+    },
+    "exportSettings": {
+        "message": "ஏற்றுமதி அமைப்புகள்"
+    },
+    "resetSettings": {
+        "message": "அமைப்புகளை மீட்டமைக்கவும்"
+    },
+    "enable": {
+        "message": "இயக்கு"
+    },
+    "showInPopup": {
+        "message": "பாப்அப்பில் காட்டு"
+    },
+    "frontend": {
+        "message": "ஃபிரான்ட்"
+    },
+    "redirectType": {
+        "message": "திருப்பி வகை"
+    },
+    "both": {
+        "message": "இரண்டும்"
+    },
+    "onlyEmbedded": {
+        "message": "உட்பொதிக்கப்பட்டது"
+    },
+    "onlyNotEmbedded": {
+        "message": "உட்பொதிக்கப்படவில்லை"
+    },
+    "addYourFavoriteInstances": {
+        "message": "உங்களுக்கு பிடித்த நிகழ்வுகளைச் சேர்க்கவும்"
+    },
+    "copied": {
+        "message": "நகலெடுக்கப்பட்டது"
+    },
+    "redirectToOriginal": {
+        "message": "அசலுக்கு திருப்பி விடுங்கள்"
+    },
+    "redirectLink": {
+        "message": "திருப்பிவிட முயற்சி"
+    },
+    "about": {
+        "message": "பற்றி"
+    },
+    "unsupportedIframesHandling": {
+        "message": "ஆதரிக்கப்படாத உட்பொதிகள் கையாளுதல்"
+    },
+    "fetchPublicInstances": {
+        "message": "பொது நிகழ்வுகளைப் பெறுங்கள்"
+    },
+    "disable": {
+        "message": "முடக்கு"
+    },
+    "pingInstances": {
+        "message": "பிங் நிகழ்வுகள்"
+    },
+    "exportSettingsToSync": {
+        "message": "ஒத்திசைக்க அமைப்புகளை ஏற்றுமதி செய்யுங்கள்"
+    },
+    "importSettingsFromSync": {
+        "message": "ஒத்திசைவிலிருந்து அமைப்புகளை இறக்குமதி செய்யுங்கள்"
+    },
+    "services": {
+        "message": "சேவைகள்"
+    },
+    "service": {
+        "message": "பணி"
+    },
+    "bookmarksMenu": {
+        "message": "புக்மார்க்ச் பட்டியல்"
+    },
+    "redirectOnlyInIncognito": {
+        "message": "மறைமுகத்தில் மட்டுமே திருப்பி விடுங்கள்"
+    },
+    "bypass": {
+        "message": "பைபாச்"
+    },
+    "block": {
+        "message": "தொகுதி"
+    },
+    "searchHint": {
+        "message": "இயல்புநிலை தேடுபொறியாக Lirbredirect ஐ அமைக்கவும். குரோமியம் உலாவிகளில் எவ்வாறு செய்வது என்பதற்கு, <a href = 'https: //libredirect.github.io/docs.html#search_engine_chromium' target = '_ வெற்று' rel = 'noopener norferrer'> இங்கே </a>."
+    },
+    "redirect": {
+        "message": "திருப்பி விடுங்கள்"
+    },
+    "redirectGoogle": {
+        "message": "Google ஐ திருப்பி விடுங்கள்"
+    },
+    "search_frontend": {
+        "message": "முன்பக்கத்தைத் தேடுங்கள்"
+    },
+    "searchService": {
+        "message": "தேடல் பணி"
+    },
+    "embedFrontend": {
+        "message": "ஃபிரான்டெண்ட் உட்பொதிக்கவும்"
+    }
+}
diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js
index 98c39908..3870d6bd 100644
--- a/src/assets/javascripts/services.js
+++ b/src/assets/javascripts/services.js
@@ -557,7 +557,40 @@ function rewrite(url, originUrl, frontend, randomInstance) {
 
     case "duckDuckGoAiChat":
       return "https://duckduckgo.com/?q=DuckDuckGo+AI+Chat&ia=chat&duckai=1"
+    
+    case "soundcloak":
+      if (url.pathname.startsWith("/feed") || url.pathname.startsWith("/stream")) { // this feature requires authentication and is unsupported, so just redirect to main page
+        return randomInstance
+      }
+
+      if (url.pathname.startsWith("/search")) {
+        if (!url.search) {
+          return randomInstance
+        }
+
+        let type = ""
+        if (url.pathname.startsWith("/search/sounds")) {
+          type = "tracks"
+        } else if (url.pathname.startsWith("/search/people")) {
+          type = "users"
+        } else if (url.pathname.startsWith("/search/albums") || url.pathname.startsWith("/search/sets")) {
+          type = "playlists"
+        }
+
+        if (type) {
+          type = "&type="+type
+        } else {
+          return randomInstance // fallback for unsupported search types (searching for anything for example)
+        }
+
+        return `${randomInstance}/search${url.search}${type}`
+      }
+
+      if (url.host == "on.soundcloud.com") {
+        return `${randomInstance}/on${url.pathname}`
+      }
 
+      return `${randomInstance}${url.pathname}${url.search}`
     case "piped":
     case "pipedMaterial":
     case "cloudtube":
@@ -762,6 +795,38 @@ async function reverse(url) {
         return `${config.services[service].url}/${url.search.slice(1)}`
       case "goodreads":
         return `https://goodreads.com${url.pathname}${url.search}`
+      case "soundcloud":
+        if (frontend == "soundcloak") {
+          if (url.pathname.includes("/_/")) { // soundcloak-specific pages
+            return `${config.services[service].url}${url.pathname.split("/_/")[0]}`
+          }
+
+          if (url.pathname == "/search") {
+            let type = url.searchParams.get("type")
+            switch (type) {
+              case "playlists":
+                type = "sets"
+                break
+              case "tracks":
+                type = "sounds"
+                break
+              case "users":
+                type = "people"
+                break
+              default:
+                type = ""
+            }
+
+            url.searchParams.delete("type")
+            if (!type) {
+              return `${config.services[service].url}/search?${url.searchParams.toString()}`
+            } else {
+              return `${config.services[service].url}/search/${type}?${url.searchParams.toString()}`
+            }
+          }
+
+          return `${config.services[service].url}${url.pathname}`
+        }
       default:
         return
     }
@@ -825,9 +890,10 @@ const defaultInstances = {
   ratAintTieba: ["https://rat.fis.land"],
   shoelace: ["https://shoelace.mint.lgbt"],
   skunkyArt: ["https://skunky.bloat.cat"],
-  ytify: ["https://ytify.netlify.app"],
+  ytify: ["https://ytify.us.kg"],
   nerdsForNerds: ["https://nn.vern.cc"],
   koub: ["https://koub.clovius.club"],
+  soundcloak: ["https://soundcloak.fly.dev"]
 }
 
 async function getDefaults() {
diff --git a/src/config.json b/src/config.json
index f5f3819d..13f9d761 100644
--- a/src/config.json
+++ b/src/config.json
@@ -122,7 +122,7 @@
         },
         "viewtube": {
           "name": "ViewTube",
-          "embeddable": false,
+          "embeddable": true,
           "instanceList": true,
           "url": "https://github.com/ViewTube/viewtube"
         },
@@ -559,6 +559,12 @@
           "embeddable": false,
           "instanceList": true,
           "url": "https://github.com/migalmoreno/tubo"
+        },
+        "soundcloak": {
+          "name": "soundcloak",
+          "embeddable": false,
+          "instanceList": true,
+          "url": "https://git.maid.zone/stuff/soundcloak"
         }
       },
       "targets": [
diff --git a/src/pages/options_src/General/SettingsButtons.svelte b/src/pages/options_src/General/SettingsButtons.svelte
index 4be747fe..1b92ecbc 100644
--- a/src/pages/options_src/General/SettingsButtons.svelte
+++ b/src/pages/options_src/General/SettingsButtons.svelte
@@ -38,7 +38,7 @@
     const resultString = JSON.stringify(_options, null, "  ")
     const anchor = document.createElement("a")
     anchor.href = "data:application/json;base64," + btoa(resultString)
-    anchor.download = `libredirect-settings-v${_options.version}.json`
+    anchor.download = `libredirect-settings-v${_options.version}-${(new Date().toISOString().replace(':','-').slice(0,-5))}.json`
     anchor.click()
   }