diff --git a/README.md b/README.md
index df4fcd5eb..e058ffc6b 100644
--- a/README.md
+++ b/README.md
@@ -37,8 +37,7 @@ NewPipe does not use any Google framework libraries, or the YouTube API. It only
* Listen to YouTube videos (experimental)
* Select the streaming player to watch the video with
* Download videos
-* Download audio only
-* Open a video in Kodi
+* Download audio only * Open a video in Kodi
* Show Next/Related videos
* Search YouTube in a specific language
* Watch age restricted material
diff --git a/app/build.gradle b/app/build.gradle
index 87e7b79e1..488012afc 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,8 +8,8 @@ android {
applicationId "org.schabi.newpipe"
minSdkVersion 15
targetSdkVersion 25
- versionCode 22
- versionName "0.8.8"
+ versionCode 23
+ versionName "0.8.9"
}
buildTypes {
release {
@@ -32,10 +32,10 @@ android {
dependencies {
testCompile 'junit:junit:4.12'
- compile 'com.android.support:appcompat-v7:25.1.0'
- compile 'com.android.support:support-v4:25.1.0'
- compile 'com.android.support:design:25.1.0'
- compile 'com.android.support:recyclerview-v7:25.1.0'
+ compile 'com.android.support:appcompat-v7:25.1.1'
+ compile 'com.android.support:support-v4:25.1.1'
+ compile 'com.android.support:design:25.1.1'
+ compile 'com.android.support:recyclerview-v7:25.1.1'
compile 'org.jsoup:jsoup:1.8.3'
compile 'org.mozilla:rhino:1.7.7'
compile 'info.guardianproject.netcipher:netcipher:1.2'
diff --git a/app/src/main/java/org/schabi/newpipe/detail/StreamInfoWorker.java b/app/src/main/java/org/schabi/newpipe/detail/StreamInfoWorker.java
index dd1ae9f5a..17a4572bd 100644
--- a/app/src/main/java/org/schabi/newpipe/detail/StreamInfoWorker.java
+++ b/app/src/main/java/org/schabi/newpipe/detail/StreamInfoWorker.java
@@ -125,10 +125,13 @@ public class StreamInfoWorker {
e.printStackTrace();
} catch (YoutubeStreamExtractor.DecryptException de) {
// custom service related exceptions
+ ErrorActivity.reportError(h, a, de, VideoItemDetailFragment.class, null,
+ ErrorActivity.ErrorInfo.make(ErrorActivity.REQUESTED_STREAM,
+ service.getServiceInfo().name, videoUrl, R.string.youtube_signature_decryption_error));
h.post(new Runnable() {
@Override
public void run() {
- onStreamInfoReceivedListener.onError(R.string.youtube_signature_decryption_error);
+ a.finish();
}
});
de.printStackTrace();
diff --git a/app/src/main/java/org/schabi/newpipe/detail/VideoItemDetailFragment.java b/app/src/main/java/org/schabi/newpipe/detail/VideoItemDetailFragment.java
index 8efd549a2..eb75dfa6d 100644
--- a/app/src/main/java/org/schabi/newpipe/detail/VideoItemDetailFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/detail/VideoItemDetailFragment.java
@@ -144,6 +144,7 @@ public class VideoItemDetailFragment extends Fragment {
TextView similarTitle = (TextView) activity.findViewById(R.id.detail_similar_title);
Button backgroundButton = (Button)
activity.findViewById(R.id.detail_stream_thumbnail_window_background_button);
+ View thumbnailView = activity.findViewById(R.id.detail_thumbnail_view);
View topView = activity.findViewById(R.id.detailTopView);
Button channelButton = (Button) activity.findViewById(R.id.channel_button);
@@ -275,6 +276,14 @@ public class VideoItemDetailFragment extends Fragment {
}
});
+ //todo: make backgroundButton handle this
+ thumbnailView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ playVideo(info);
+ }
+ });
+
if (info.channel_url != null && info.channel_url != "") {
channelButton.setOnClickListener(new View.OnClickListener() {
@Override
diff --git a/app/src/main/java/org/schabi/newpipe/extractor/Parser.java b/app/src/main/java/org/schabi/newpipe/extractor/Parser.java
index b68d01fa7..8e70f751c 100644
--- a/app/src/main/java/org/schabi/newpipe/extractor/Parser.java
+++ b/app/src/main/java/org/schabi/newpipe/extractor/Parser.java
@@ -42,15 +42,23 @@ public class Parser {
}
public static String matchGroup1(String pattern, String input) throws RegexException {
+ return matchGroup(pattern, input, 1);
+ }
+
+ public static String matchGroup(String pattern, String input, int group) throws RegexException {
Pattern pat = Pattern.compile(pattern);
Matcher mat = pat.matcher(input);
boolean foundMatch = mat.find();
if (foundMatch) {
- return mat.group(1);
+ return mat.group(group);
}
else {
//Log.e(TAG, "failed to find pattern \""+pattern+"\" inside of \""+input+"\"");
- throw new RegexException("failed to find pattern \""+pattern+" inside of "+input+"\"");
+ if(input.length() > 1024) {
+ throw new RegexException("failed to find pattern \""+pattern);
+ } else {
+ throw new RegexException("failed to find pattern \"" + pattern + " inside of " + input + "\"");
+ }
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamExtractor.java b/app/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamExtractor.java
index 63642e973..6dd0daa7c 100644
--- a/app/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamExtractor.java
+++ b/app/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamExtractor.java
@@ -791,10 +791,15 @@ public class YoutubeStreamExtractor extends StreamExtractor {
try {
Downloader downloader = NewPipe.getDownloader();
+ if(!playerUrl.contains("https://youtube.com")) {
+ //sometimes the https://youtube.com part does not get send with
+ //than we have to add it by hand
+ playerUrl = "https://youtube.com" + playerUrl;
+ }
String playerCode = downloader.download(playerUrl);
decryptionFuncName =
- Parser.matchGroup1("\\.sig\\|\\|([a-zA-Z0-9$]+)\\(", playerCode);
+ Parser.matchGroup("([\"\\'])signature\\1\\s*,\\s*([a-zA-Z0-9$]+)\\(", playerCode, 2);
String functionPattern = "("
+ decryptionFuncName.replace("$", "\\$")
diff --git a/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java b/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java
index 43b85a2b5..793876756 100644
--- a/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java
+++ b/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java
@@ -84,9 +84,23 @@ public abstract class MissionsFragment extends Fragment
return v;
}
- @Override
+ /** Added in API level 23. */
+ @Override
public void onAttach(Context activity) {
super.onAttach(activity);
+
+ // Bug: in api< 23 this is never called
+ // so mActivity=null
+ // so app crashes with nullpointer exception
+ mActivity = activity;
+ }
+
+ /** deprecated in API level 23,
+ * but must remain to allow compatibility with api<23 */
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+
mActivity = activity;
}
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index b73d02a46..9d8984957 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -1,6 +1,6 @@
-Publikováno %1$s
- Žádný přehrávač nenalezen. Nainstalovat VLC?
+Publikováno %1$s
+ Nenalezen žádný přehrávač. Nainstalovat VLC?
Instalovat
Zrušit
Otevřít v prohlížeči
@@ -18,45 +18,45 @@
Použít externí video přehrávač
Použít externí audio přehrávač
- Cesta, kde se uloží audio po stažení.
- Zadejte umístění pro uložení audio souborů.
+ Cesta, kam se uloží stažené audio
+ Zadejte umístění pro stažené audio soubory.
Umístění pro stažené audio
Automatické přehrávání skrze Intent
Automaticky přehrávat video, jestliže je volané z jiné aplikace.
Výchozí rozlišení
- Přehrát s Kodi
+ Přehrát pomocí Kodi
Aplikace Kore nenalezena. Nainstalovat Kore?
%1$s zhlédnutí
NewPipe Přehrávač na pozadí
Umístění pro stažené video
- Cesta, kde se uloží video po stažení.
- Zadejte umístění pro uložená videa
+ Cesta, kam se uloží stažené video.
+ Zadejte umístění pro stažená videa
- Zobrazit možnost \"Přehrát s Kodi\"
- Zobrazit možnost přehrát video s multimediálním centrem Kodi.
+ Zobrazit možnost \"Přehrát pomocí Kodi\"
+ Zobrazit možnost přehrání videa pomocí multimediálního centra Kodi.
Audio
Výchozí audio formát
WebM — svobodný formát
m4a — lepší kvalita
Téma
- Tmavý
- Světlý
+ Tmavé
+ Světlé
- Stažení
+ Stáhnout
Následující video
- Zobrazit následující a související videa
+ Zobrazit následující a podobná videa
URL není podporováno
- Související videa
+ Podobná videa
Preferovaný jazyk obsahu
- Video & audio
+ Video a audio
Vzhled
Ostatní
Přehrávám na pozadí
Přehrát
Chyba
Chyba sítě
- Nebylo možné stáhnout všechny náhledy
+ Nebylo možné nahrát všechny náhledy
Nebylo možné dekódovat URL videa.
Nebylo možné analyzovat webovou stránku.
Obsah není k dispozici.
@@ -64,11 +64,11 @@
Náhled videa
Náhled videa
- Náhled uploadera
+ Náhled obrázku uploadera
To se mi líbí
To se mi nelíbí
Použít Tor
- Vynutit stahování skrz Tor pro zvýšené soukromí (streaming není zatím podporován)
+ (Experimentální) Vynutit stahování skrz Tor pro zvýšené soukromí (streaming zatím není podporován).
Nebylo možné vytvořit složku pro stažené soubory \'%1$s\'
Vytvořena složka pro stažené soubory \'%1$s\'
@@ -76,8 +76,229 @@
Automaticky přehrát video, když je NewPipe otevřen z jiné aplikace.
Obsah
Zobrazovat věkově omezený obsah
- Toto video je věkově omezeno. Povolte věkově omezená video v nastavení.
+ Toto video je věkově omezeno. Povolte věkově omezená videa v nastavení.
živě
- Nemůžu kompletně parsovat web.
+ Nebylo možné kompletně analyzovat stránku.
+ Pro začátek stiskni hledat
+ Zkopírováno do schránky.
+ Počkejte prosím…
+ NewPipe se stahuje
+ Stiskněte pro detaily
+ Server není podporován
+ Soubor již existuje
+ Špatné URL nebo připojení k Internetu není k disposici
+ Chyba
+ Stáhnout URL
+ Jméno souboru
+ Vlákna
+ Zastavit
+ Smazat
+ Použít ExoPlayer
+ Experimentální
+
+ Začít
+ Neznámá chyba DRM
+ Zkusit znovu
+ Text
+ Hrát na pozadí
+ Video
+ Audio
+ Nahlásit chybu
+ Hledáno:
+ Detaily:
+
+
+ Vyžádaný stream:
+ Co se stalo:
+ NAHLÁSIT
+ Omlouváme se, tohle se nemělo stát.
+ Nahlásit chybu přes e-mail
+ Omlouváme se, staly se nějaké chyby.
+ Nepodařilo se nahrát obrázek
+ Aplikace/UI spadlo
+ Tento stream je vysílán živě, funkce ještě není podporována.
+ Nepodařilo se dostat žádný stream.
+ Nepodařilo se nastavit menu stahování.
+ Nastavení
+ Nahlásit chybu
+
+ Stažené soubory
+ Stažené soubory
+ Info:
+ Vaše poznámky (Anglicky):
+ Logování
+ Normální
+ Chráněný obsah není podporován na API úrovni menší než 18
+ Toto zařízení nepodporuje potřebné DRM schéma
+ Toto zařízení nedodává dekodér pro
+%1$s
+ Toto zařízení nedodává bezpečný dekodér pro
+
+%1$s
+ Oprávnění přístupu do Úložiště bylo zamítnuto
+ Shlédnout
+ Nová mise
+ Hotovo
+ Přepnout mezi listem a mřížkou
+
+
+ Získej jméno souboru
+ Nastavení
+ reCAPTCHA
+ Výzva reCAPTCHA
+ Požadována výzva reCAPTCHA
+
+ Černé
+
+ [vypnuto]
+ Checksum
+
+ Prosím vyberte dostupnou složku pro stažení souborů.
+
+ Aktivita kanálu
+ Hlášení uživatele
+
+ "
+ Material is the metaphor.
+
+
+
+ A material metaphor is the unifying theory of a rationalized space and a system of motion.
+ The material is grounded in tactile reality, inspired by the study of paper and ink, yet
+ technologically advanced and open to imagination and magic.
+
+ Surfaces and edges of the material provide visual cues that are grounded in reality. The
+ use of familiar tactile attributes helps users quickly understand affordances. Yet the
+ flexibility of the material creates new affordances that supercede those in the physical
+ world, without breaking the rules of physics.
+
+ The fundamentals of light, surface, and movement are key to conveying how objects move,
+ interact, and exist in space and in relation to each other. Realistic lighting shows
+ seams, divides space, and indicates moving parts.
+
+
+
+ Bold, graphic, intentional.
+
+
+
+ The foundational elements of print based design typography, grids, space, scale, color,
+ and use of imagery guide visual treatments. These elements do far more than please the
+ eye. They create hierarchy, meaning, and focus. Deliberate color choices, edge to edge
+ imagery, large scale typography, and intentional white space create a bold and graphic
+ interface that immerse the user in the experience.
+
+ An emphasis on user actions makes core functionality immediately apparent and provides
+ waypoints for the user.
+
+
+
+ Motion provides meaning.
+
+
+
+ Motion respects and reinforces the user as the prime mover. Primary user actions are
+ inflection points that initiate motion, transforming the whole design.
+
+ All action takes place in a single environment. Objects are presented to the user without
+ breaking the continuity of experience even as they transform and reorganize.
+
+ Motion is meaningful and appropriate, serving to focus attention and maintain continuity.
+ Feedback is subtle yet clear. Transitions are efficient yet coherent.
+
+
+
+ 3D world.
+
+
+
+ The material environment is a 3D space, which means all objects have x, y, and z
+ dimensions. The z-axis is perpendicularly aligned to the plane of the display, with the
+ positive z-axis extending towards the viewer. Every sheet of material occupies a single
+ position along the z-axis and has a standard 1dp thickness.
+
+ On the web, the z-axis is used for layering and not for perspective. The 3D world is
+ emulated by manipulating the y-axis.
+
+
+
+ Light and shadow.
+
+
+
+ Within the material environment, virtual lights illuminate the scene. Key lights create
+ directional shadows, while ambient light creates soft shadows from all angles.
+
+ Shadows in the material environment are cast by these two light sources. In Android
+ development, shadows occur when light sources are blocked by sheets of material at
+ various positions along the z-axis. On the web, shadows are depicted by manipulating the
+ y-axis only. The following example shows the card with a height of 6dp.
+
+
+
+ Resting elevation.
+
+
+
+ All material objects, regardless of size, have a resting elevation, or default elevation
+ that does not change. If an object changes elevation, it should return to its resting
+ elevation as soon as possible.
+
+
+
+ Component elevations.
+
+
+
+ The resting elevation for a component type is consistent across apps (e.g., FAB elevation
+ does not vary from 6dp in one app to 16dp in another app).
+
+ Components may have different resting elevations across platforms, depending on the depth
+ of the environment (e.g., TV has a greater depth than mobile or desktop).
+
+
+
+ Responsive elevation and dynamic elevation offsets.
+
+
+
+ Some component types have responsive elevation, meaning they change elevation in response
+ to user input (e.g., normal, focused, and pressed) or system events. These elevation
+ changes are consistently implemented using dynamic elevation offsets.
+
+ Dynamic elevation offsets are the goal elevation that a component moves towards, relative
+ to the component’s resting state. They ensure that elevation changes are consistent
+ across actions and component types. For example, all components that lift on press have
+ the same elevation change relative to their resting elevation.
+
+ Once the input event is completed or cancelled, the component will return to its resting
+ elevation.
+
+
+
+ Avoiding elevation interference.
+
+
+
+ Components with responsive elevations may encounter other components as they move between
+ their resting elevations and dynamic elevation offsets. Because material cannot pass
+ through other material, components avoid interfering with one another any number of ways,
+ whether on a per component basis or using the entire app layout.
+
+ On a component level, components can move or be removed before they cause interference.
+ For example, a floating action button (FAB) can disappear or move off screen before a
+ user picks up a card, or it can move if a snackbar appears.
+
+ On the layout level, design your app layout to minimize opportunities for interference.
+ For example, position the FAB to one side of stream of a cards so the FAB won’t interfere
+ when a user tries to pick up one of cards.
+
+
+ "
+ Podrobné
+ Nelze zjistit dekodéry zařízení
+ Nelze doložit dekodér
+%1$s
+ Co:\\nŽádost:\\nJazyk obsahu:\\nSlužba:\\nČas GMT:\\nBalíček:\\nVerze:\\nVerze OS:\\nGlobální rozsah IP:
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 3910da0c7..4cf319b35 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -301,4 +301,9 @@
"
reCAPTCHA
+ Schwarz
+
+ reCAPTCHA Herausforderung
+ reCAPTCHA Herausforderung angefordert
+
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 4569a751f..6df5c79b0 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -54,9 +54,9 @@
Tor を使用する
(実験的) 強制的に Tor を経由したトラフィックでダウンロードして、プライバシーを高めます (ビデオのストリーミングはまだサポートされていません)。
-外見
- 暗
- 明
+テーマ
+ ダーク
+ ライト
外観
その他
@@ -304,4 +304,6 @@
reCAPTCHA を要求しました
+ ブラック
+
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 8e2ad7d14..31dcc6b10 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -150,7 +150,7 @@
Verkeerde URL of internet niet beschikbaar
NewPipe is aan het downloaden
Tik voor meer informatie
- Even geduld...
+ Even geduld…
Gekopieerd naar klembord.
Kies een beschikbare downloadmap.
@@ -294,4 +294,10 @@
"
+ Zwart
+
+ reCAPTCHA
+ reCAPTCHA-uitdaging
+ reCAPTCHA-uitdaging gevraagd
+
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index f8e11d625..21e2b6277 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -1,5 +1,5 @@
-Wciśnij wyszukaj, aby rozpocząć
+Wciśnij wyszukaj, aby rozpocząć
Instaluj
Anuluj
Otwórz w przeglądarce
@@ -81,7 +81,7 @@
RAPORT
Info:
Co się stało:
- Co:\\nŻądanie:\\nJęzyk zawartości:\\nUsługa:\\nCzas GMT:\\nVersion:\\nWersja systemu:\\nGlobalny zakres IP:
+ Co:\\nŻądanie:\\nJęzyk zawartości:\\nUsługa:\\nCzas GMT:\\nPakiet:\\nWersja systemu:\\nGlobalny zakres IP:
Szukane dla:
Żądany strumień:
Twój komentarz (po angielsku):
@@ -136,8 +136,29 @@
Zniekształcony URL lub brak internetu
Pobieranie NewPipe
Dotknij dla szczegółów
- Proszę czekać...
+ Proszę czekać…
Skopiowano do schowka.
Proszę wybrać dostępny katalog pobierania.
+ Nie można załadować obrazu
+ Aplikacja/Interfejs uległ awarii
+ (Eksperymentalne) Wymuś pobieranie przez Tor dla zwiększonej prywatności
+(streaming video nie jest jeszcze wspierany).
+ To urządzenie nie dostarcza dekodera dla
+
+%1$s
+ To urządzenie nie zapewnia bezpiecznego dekodera dla
+
+%1$s
+ Nie można zainicjować dekodera
+
+%1$s
+ Start
+ AktywnośćKanału
+ Ustawienia
+ CAPTCHA
+ Rozwiąż ReCAPTCHA
+ Prośba o rozwiązanie ReCAPTCHA
+
+ Nie można utworzyć zapytania o dekodery urządzenia
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
new file mode 100644
index 000000000..366440c22
--- /dev/null
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -0,0 +1,146 @@
+
+
+ Configurações
+ Áudio
+ Não foi possível decriptar a assinatura de URL do vídeo.
+ Seu comentário (em inglês):
+ O que aconteceu:
+ Informações:
+ WebM — formato aberto
+ %1$s visualizações
+ Ver
+ Vídeo com restrição de idade. Ative os vídeos com restrição de idade nas configurações.
+ Vídeo
+ Reproduz o vídeo automaticamente quando o NewPipe for aberto a partir de outro app.
+ Reproduzir automaticamente
+ Preto
+ Bloqueado pelo GEMA.
+ Cancelar
+ Checksum
+ Escolher navegador
+ Conteúdo
+ Conteúdo não disponível.
+ Não foi possível carregar nenhum stream.
+ Não foi possível carregar a imagem.
+ Não foi possível carregar os thumbnails.
+ Escuro
+ Formato de áudio padrão
+ Resolução padrão
+ Excluir
+ Não curtidas
+ Curtidas
+ Baixar
+ Baixar
+ Detalhes:
+ Não foi possível criar pasta de download \'%1$s\'
+ Reportar erro por e-mail
+ Relatório de erro
+ RELATÓRIO
+ Desculpe, ocorreram alguns erros.
+ OK
+ Erro
+ Pasta de download criada \'%1$s\'
+ Instalar
+ Claro
+ Erro
+ Copiado para a área de transferência.
+ Nome do arquivo
+ Toque para detalhes
+ NewPipe baixando
+ Servidor não suportado
+ Aguarde…
+ Erro de rede
+ Próximo vídeo
+ Abrir no navegador
+ Pausar
+ reCAPTCHA
+ Desafio reCAPTCHA
+ Desafio reCAPTCHA solicitado
+ Reportar um erro
+ Tentar de novo
+ Rotação
+ Idioma preferido de conteúdo
+ Configurações
+ Configurações
+ Aparência
+ Outros
+ Vídeo & Áudio
+ Configurações
+ Compartilhar
+ Compartilhar com
+ Exibir conteúdo com restrição de idade
+ Exibir próximo vídeo e relacionados
+ Vídeos relacionados
+ Desculpe, isto não deveria acontecer.
+ Iniciar
+ Permissão para acessar o armazenamento negada
+ Alternar entre lista e grade
+ Texto
+ Tema
+ Publicado em %1$s
+ URL não suportada
+ pt
+ ao vivo
+ Downloads
+ Downloads
+ Você quis dizer: %1$s ?
+ m4a — melhor qualidade
+ Nova missão
+ App/interface parou
+ Player NewPipe em segundo plano
+ Reproduzindo em segundo plano
+ Não foi possível preparar o menu de download.
+ Thumbnail do vídeo
+ Thumbnail do usuário que enviou o vídeo
+ Informe o local para download de áudios.
+ Local para salvar áudios baixados
+ Local de download de áudio
+ Informe o local para download de vídeos
+ Local para salvar vídeos baixados
+ Local de download de vídeo
+ Reproduzir em segundo plano
+ Conteúdo protegido não é suportado em versões de API anterior a 18
+ Ocorreu um erro DRM desconhecido
+ Este dispositivo não suporta o método DRM necessário
+ Não foi possível inicializar o decodificador %1$s
+ Este dispositivo não possui um decodificador para %1$s
+ Este dispositivo não possui um decodificador seguro para %1$s
+ Não foi possível consultar os decodificadores do dispositivo
+ Stream requisitado:
+ Busca por:
+ App Kore não instalado. Instalar?
+ Não foi possível interpretar completamente o site.
+ Thumbnail do vídeo
+ Transmissões ao vivo ainda não são suportadas.
+ Carregando
+ Nível de log
+ Normal
+ Detalhado
+ Toque em busca para começar
+ Arquivo já existe
+ Threads
+ URL de download
+ URL inválida ou internet indisponível
+ Selecione um diretório de download.
+ Nenhum player de stream encontrado. Instalar VLC?
+ Não foi possível interpretar o site.
+ Áudio
+ Reproduzir
+ Reproduzir com Kodi
+ Buscar
+ Buscar página:
+ Exibir opção para reprodizir víedeo pela central de mídia Kodi.
+ Experimental
+ Usar ExoPlayer
+ Usar reprodutor de áudio externo
+ Usar reprodutor de vídeo externo
+ (Experimental) Forçar o download de conteúdo através do Tor para maior privacidade (streaming de vídeos ainda não suportado).
+ Usar Tor
+ Relatório do usuário
+ Exibir opção \"Reproduzir com Kodi\"
+ Atividade do canal
+ Buscar nome do arquivo
+ O que:\nRequisição:\nIdioma do conteúdo:\nServiço:\nHora GMT:\nPacote:\nVersão:\nVersão SO:\nFaixa de IP:
+ [off]
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 57966f214..288b1137a 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -1,5 +1,5 @@
-
+
%1$s просмотров
Опубликовано %1$s
Ни одного потокового проигрывателя не было найдено. Установить?
@@ -69,7 +69,7 @@
Введите путь к папке для загрузки аудио
Нажмите поиск чтобы начать
- Пожалуйста подождите...
+ Пожалуйста подождите…
Файл уже существует
Потоки
Окей
@@ -143,4 +143,18 @@
В доступе к хранилищу было отказано
Использовать ExoPlayer
Получить название файла
+ Невозможно загрузить все миниатюры
+ Невозможно расшифровать url у видео
+ Потоковое видео недоступно.
+ [отключен]
+ Это устройство не поддерживает декодер для %1$s
+ Это устройство не поддерживает безопасный декодер для %1$s
+ На этом устройстве недоступен декодер.
+ Невозможно инициировать декодер 1%1$s 2
+ Эксперементально
+
+ Воспроизвести
+ Переключатель между списком и сеткой
+
+
diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml
index 38c9df9b9..932f8de2a 100644
--- a/app/src/main/res/values-sl/strings.xml
+++ b/app/src/main/res/values-sl/strings.xml
@@ -165,4 +165,6 @@
Zahteva izziva reCAPTCHA
Predmet:\\nZahteva:\\nJezik vsebine:\\nStoritev:\\nČas v GMT:\\nPaket:\\nRazličica:\\nRazličica OS:\\nObseg IP:
+ Črna
+
diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
index 749a302cb..7a7fb525b 100644
--- a/app/src/main/res/values-sr/strings.xml
+++ b/app/src/main/res/values-sr/strings.xml
@@ -306,4 +306,6 @@
Решите reCAPTCHA стопку
+ Црна
+
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 3312e6c8e..01ee6e21e 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -1,20 +1,20 @@
- settings_category_video_audio
- settings_category_appearance
- settings_content_options
- settings_category_other
+ settings_category_video_audio
+ settings_category_appearance
+ settings_content_options
+ settings_category_other
- download_path
- download_path_audio
- use_external_video_player
- use_external_audio_player
- autoplay_through_intent
- use_exoplayer
+ download_path
+ download_path_audio
+ use_external_video_player
+ use_external_audio_player
+ autoplay_through_intent
+ use_exoplayer
- default_resolution_preference
- 360p
+ default_resolution_preference
+ 360p
- 720p
- 360p
@@ -22,10 +22,10 @@
- 144p
- show_play_with_kodi
+ show_play_with_kodi
- theme
- @string/light_theme_title
+ theme
+ @string/light_theme_title
- @string/light_theme_title
- @string/dark_theme_title
@@ -35,8 +35,8 @@
- @string/dark_theme_title
- default_audio_format
- m4a
+ default_audio_format
+ m4a
- @string/webm_description
- @string/m4a_description
@@ -46,9 +46,9 @@
- m4a
- show_next_video
+ show_next_video
en
- search_language
+ search_language
@@ -209,6 +209,6 @@
- 日本語
- 한국어
- show_age_restricted_content
- use_tor
+ show_age_restricted_content
+ use_tor
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6fc947f54..66204d0c8 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -180,7 +180,7 @@
MD5
SHA1
ChannelActivity
-
+
"Material is the metaphor.\n\n"
"A material metaphor is the unifying theory of a rationalized space and a system of motion."