From 8862b103a739ef9410bf054e51aac32f8fec67a5 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Mon, 22 Aug 2022 14:57:47 +0200 Subject: [PATCH 1/5] dont show nsfw in recently watched --- .../com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index c0c24f85..3e6e24cb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -733,6 +733,9 @@ class GeneratorPlayer : FullScreenPlayer() { // Don't save livestream data if ((currentMeta as? ResultEpisode)?.tvType?.isLiveStream() == true) return + // Don't save NSFW data + if ((currentMeta as? ResultEpisode)?.tvType == TvType.NSFW) return + val (position, duration) = posDur if (duration == 0L) return // idk how you achieved this, but div by zero crash From f0668da0a847671113f8d84672143724f3adddf5 Mon Sep 17 00:00:00 2001 From: Gustavo <64141391+GustavoASantos@users.noreply.github.com> Date: Mon, 22 Aug 2022 18:06:12 +0100 Subject: [PATCH 2/5] Updated PT and PT-BR Translations (#51) * Update strings-pt.xml * Update strings.xml * Update strings-pt.xml * Fixed missing > --- app/src/main/res/values-bp/strings.xml | 8 +- app/src/main/res/values-pt/strings-pt.xml | 398 +++++++++++++++------- 2 files changed, 274 insertions(+), 132 deletions(-) diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index 168d7278..33245013 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -171,7 +171,7 @@ Arquivo de Backup carregado Falha em restaurar dados do arquivo %s Dados salvos com sucesso - Permissões de armazenamento faltando, por favor tente denovo + Permissões de armazenamento faltando, por favor tente de novo Erro no backup de %s Procurar @@ -186,6 +186,9 @@ Mostrar episódios de Filler em anime Mostrar trailers Mostrar posters do kitsu + + Esconder qualidades de vídeo selecionadas nos resultados da Pesquisa + Atualizações de plugin automáticas Mostrar atualizações do app Automaticamente procurar por novas atualizações ao abrir @@ -253,6 +256,8 @@ Documentários OVA Dramas Asiáticos + Transmissões em Direto + Outros Filme @@ -263,6 +268,7 @@ Torrent Documentário Drama Asiático + Transmissão em Direto Erro de fornecimento Erro remoto diff --git a/app/src/main/res/values-pt/strings-pt.xml b/app/src/main/res/values-pt/strings-pt.xml index e686c988..a77aac7a 100644 --- a/app/src/main/res/values-pt/strings-pt.xml +++ b/app/src/main/res/values-pt/strings-pt.xml @@ -15,161 +15,205 @@ Velocidade (%.2fx) Classificado: %.1f Nova atualização encontrada!\n%s -> %s - Cheio + Enchimento CloudStream + Reproduzir com CloudStream Início - Buscar - Downloads - Opções + Pesquisa + Transferências + Configurações - Buscar… - Sem dados + Procurar… + Procurar em %s… + + Sem Dados Mais Opções Próximo episódio - Gêneros - Compartir + Géneros + Partilhar Abrir no Navegador Saltar Carga - Cargando… + Carregando… Assistindo - Em espera - Completado - Deixado - Planejando assistir + Em Espera + Concluído + Abandonado + Planeio Assistir Nenhuma Assistindo de Novo - Assistir Filme - Stream Torrent - Origems - Subtítulos - Reintentar conexão… + Reproduzir Filme + Reproduzir Livestream + Transmitir Torrent + Fontes + Legendas + Voltar a tentar ligação… Voltar Atrás - Assistir Episódio + Reproduzir Episódio - Descàrregar - Descàrregado - Descàrregando - Descàrrega Pausada - Descàrrega Iniciada - Descàrrega Fallida - Descàrrega Cancelada - Descàrrega Terminada + Transferir + Transferido + A Transferir + Transferência em Pausa + Transferência Iniciada + Transferência Falhou + Transferência Cancelada + Transferência Completa + Transmitir - Error Cargando Links - Armazenagem Interno + Erro a Carregar Links + Armazenamento Interno - Dub - Sub + Dob + Leg - Eliminar Arquivo - Reproduzir Arquivo - Retomar Descàrrega - Pausar Descàrrega + Eliminar Ficheiro + Reproduzir Ficheiro + Retomar Transferência + Pausar Transferência - Desativar o relatório automático de erros + Desativar relatório automático de erros Mais info Esconder Reproduzir Info Filtrar Marcadores Marcadores - Eliminar + Remover Aplicar Cancelar - Velocidade do Reproductor + Copiar + Fechar + Limpar + Guardar - Ajustes de Subtítulos - Color do Texto - Color do Delineado - Color do Fondo - Color da Janela + Velocidade de Reprodução + + Configurações de Legendas + Cor do Texto + Cor do Delineado + Cor do Fundo + Cor da Janela Tipo de Borda - Elevação de Subtítulo + Elevação da Legenda Fonte Tamanho da Fonte - Busca usando fornecedores - Busca usando tipos + Procurar usando fornecedores + Procurar usando tipos - %d Benenes dadas a os devs - Nenhum Benene dado + %d Benenes dadas aos devs + Nenhum Benene dada Auto-seleção de Idioma - Descàrregar Idiomas - Segure para reinicializar para o padrão - Continuar Assistindo + Transferir Idiomas + Idioma da Legenda + Segure para retornar para o padrão + Importar fontes colocando em %s + Continuar a Assistir - Eliminar + Remover Mais info - Uma VPN pode ser necessária para que este provedor funcione corretamente - Este provedor é uma torrent; uma VPN é recomendada + Uma VPN pode ser necessária para que este fornecedor funcione corretamente + Este fornecedor é um torrent, uma VPN é recomendada - Metadados não são fornecidos pelo site, o carregamento de vídeo pode falhar. + Metadados não são oferecidos pelo site, o carregamento do vídeo irá falhar se ele não existir no site. - Descripção - Nenhuma Trama Encontrada - Nenhuma Descripção Encontrada + Descrição + Nenhum Enredo Encontrado + Nenhuma Descrição Encontrada - Picture-em-picture - Continua a reprodução em um player em miniatura em cima de outros apps + Mostrar logcat 🐈 + + Picture-in-picture + Continua a reprodução num player em miniatura em cima de outras apps Botão de redimensionamento do player - Tirar as bordas negras - Subtítulos - Configurações de subtítulos do Player + Remover as bordas negras + Legendas + Configurações de legendas do player + Legendas do Chromecast + Configurações de legendas do Chromecast + Modo Eigengravy - Adiciona um botão de velocidade no player - Deslize para buscar para frente + Acrescenta uma opção de velocidade no player + Deslize para andar Deslize para a esq. ou dir. para controlar o tempo no player Deslize para mudar as configurações - Deslize para o lado esq. ou dir. para ajustar brilho ou volume - Duplo toque para buscar para frente - Usar o brilho da sistema - Usar o brilho da sistema em vez de uma sobreposição escura + Deslize do lado esq. ou dir. para ajustar brilho ou volume + Toque duplo para avançar + Toque duplo para pôr em pausa + Segundos avançados no player + Toque duplo no lado esq. ou dir. para andar para trás ou para a frente + Toque no meio para pôr em pausa + Usar brilho da sistema + Usar brilho do sistema no player em vez de uma sobreposição escura + + Atualizar progresso + Sincronizar automaticamente o progresso do seu episódio atual + + Restaurar dados a partir de backup + + Fazer backup + Arquivo de backup carregado + Falha ao restaurar dados do ficheiro %s + Dados guardados com sucesso + Permissões de armazenamento em falta, por favor tente de novo + Erro no backup de %s + + Procurar + Contas + Atualizações e backup - Buscar Info - Búsqueda Avançada - Mostra resultados da busca separados por fornecedor - Só envia dados sobre travamentos + Procura Avançada + Mostra resultados separados por fornecedor + Só envia dados sobre falhas Não envia nenhum dado Mostrar episódios de enchimento para anime - Mostrar actualizações do app - Busca novas actualizações à iniciar - Actualizar à Pré-lançamentos - Busca actualizações pré-lançamento em vez de só lançamentos completos + Mostrar trailers + Mostrar posters do kitsu + + Esconder qualidades de vídeo selecionadas nos resultados da Pesquisa + Atualizações de plugin automáticas + + Mostrar atualizações da app + Procurar novas atualizações automaticamente ao iniciar + Atualizar para pré-lançamentos + Procura atualizações de pré-lançamento em vez de só lançamentos oficiais Github - App light novel por os mesmos devs - Junte-se à Discord - Dar um benene à os devs + App light novel pelos mesmos devs + Junte-se ao Discord + Dar um benene aos devs Benene dada - Linguagem do App + Linguagem da App Este fornecedor não tem suporte para Chromecast - Links Não Encontrados - Link copiado para a prancheta + Nenhum Link Encontrado + Link copiado para a área de transferência Reproduzir episódio - Reinicializar para o padrão - Desculpe, a aplicação falhou. Um relatório de erro anônimo será enviado para os + Restaurar para o padrão + Desculpe, a aplicação falhou. Um relatório de erro anónimo será enviado para os desenvolvedores Temporada - Sem Temporada + Nenhuma Temporada Episódio Episódios T E + Nenhum Episódio encontrado - Eliminar Arquivo + Eliminar Ficheiro Eliminar - Pausar + Pôr em Pausa Retomar - Isto apagarà %s permanentemente\nVocê tem certeza? + Isto apagará %s permanentemente\nTem a certeza? + %dm\nem falta Em Curso Concluído @@ -177,12 +221,12 @@ Ano Classificação Duração - Sitio - Sinopsis + Site + Sinopse - Em fila - Não Há Subtítulos - Por Padrão + Na fila + Sem Legendas + Padrão Livre Usado @@ -190,52 +234,85 @@ Filmes - Séries de TV - Desenhos animados + Séries + Desenhos Animados Anime - Torrentes + Torrents Documentários + OVA + Dramas Asiáticos + Transmissões em Direto + NSFW + Outros Filme - Sériado - Desenho animado + Série + Desenho Animado Torrent Documentário + Drama Asiático + Transmissão em Direto + NSFW - Erro de origem + Erro de fonte Erro remoto - Erro de Renderizador - Erro inesperado do player reproductor - Erro de descàrrega; verifica permissões de armazenamento + Erro de renderização + Erro inesperado do player + Erro de transferência, verifique permissões de armazenamento - Chromecast o Episódio - Chromecast á o Espelho - Assistir no App - Assistir no VLC - Assistir no Navegador - Copiar Link - Auto Descàrrega - Descàrregar Espelho - Recarregar Links + Episódio pelo Chromecast + Alternativa pelo Chromecast + Reproduzir na app + Reproduzir no VLC + Reproduzir no navegador + Copiar link + Transferência Automática + Transferir por servidor alternativo + Recarregar links + Transferir legendas - Nenhuma Atualização - Buscar Atualização + Etiqueta de qualidade + Etiqueta Dub + Etiqueta Sub + Título + Alternar elementos da interface no póster + + Nenhuma Atualização Encontrada + Procurar Atualização Fixar Mudar Tamanho - Origem - Pular OP + Fonte + Saltar OP - Não mostra de novo + Não mostrar de novo + Saltar esta Atualização Atualizar - Calidade Preferida - DNS sobre HTTPS - Útil para contornar blocos do provedor de internet - - Caminho de descarga + Qualidade Preferida + Máximo de caracteres do título de vídeos + Resolução do player de vídeo - Mostrar Anime Dublado/Subtítulado + Tamanho do buffer do vídeo + Comprimento do buffer do vídeo + Cache do vídeo em disco + Limpar cache de vídeo e imagem + + Causará travamentos aleatórios se definido muito alto. Não mude se tiver pouca memória RAM, como um Android TV ou um telefone antigo + Pode causar problemas em sistemas com pouco espaço de armazenamento se definido muito alto, como em dispositivos Android TV + + DNS sobre HTTPS + Útil para contornar bloqueios do fornecedor de internet + + Clonar site + Remover site + Adiciona um clone de um site existente, com um url diferente + + Caminho de transferência + + Url do servidor Nginx + + Mostrar Anime Dobrado/Legendado Ajustar para a Tela Esticar @@ -259,33 +336,65 @@ CloudStream 3 por sua própria conta e risco. Geral - Idiomas dos Origems - Layout do App + Botão Aleatório + Mostra o botão Aleatório na página inicial + Idioma dos fornecedores + Layout da App Mídia preferida + Codificação das legendas + Linguagem + Layout Auto Layout de TV - Layout de Celular + Layout de telemóvel + Layout de emulador Cor Primária Tema do App + Local do título do poster + Coloca o título debaixo do poster + senha123 + MeuNomeFixe + ola@mundo.com + 127.0.0.1 + MeuSiteFixe + examplo.com + Codigo da Língua (pt) + Conta Sair - Autenticar + Entrar Mudar de conta Adicionar conta + Criar conta + Adicionar sincronização + %s adicionado + Sincronizar + Nota + %d / 10 + /?? + /%d + %s autenticado + Falha em autenticar para %s + Nenhuma Normal - Todos + Tudo Max Min - Esboçado + Contornado Deprimido - Sombrado + Sombreado Em Relevo + Sincronizar legendas + Atraso de legenda + Use isto se as legendas forem mostradas %dms adiantadas + Use isto se as legendas forem mostradas %dms atrasadas + Sem atraso de legenda Luís argüia à Júlia que «brações, fé, chá, óxido, pôr, zângão» eram palavras do português - \ No newline at end of file + + Recomendada + %s carregada + Carregar de arquivo + Carregar da Internet + Arquivo baixado + Protagonista + Coadjuvante + Figurante + + Fonte + Aleatório + + Em breve… + + Imagem de Poster + Player + Resolução e título + Título + Resolução + Id invalida + Dado invalido + Erro + Remover legendas ocultas(CC) das legendas + Remover bloat das legendas + Extras + Trailer + From 942c9541a2294f9ef4d19bb1d7092b3c14a74407 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Mon, 22 Aug 2022 19:47:58 +0200 Subject: [PATCH 3/5] Fix CloudflareKiller (remove cookies on init) --- .../com/lagradost/cloudstream3/network/CloudflareKiller.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt b/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt index 05836269..ceacb9aa 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt @@ -23,6 +23,11 @@ class CloudflareKiller : Interceptor { } } + init { + // Needs to clear cookies between sessions to generate new cookies. + CookieManager.getInstance().removeAllCookies(null) + } + val savedCookies: MutableMap> = mutableMapOf() override fun intercept(chain: Interceptor.Chain): Response = runBlocking { From a3f4c0b953b073662b900dc591673e0bf160e328 Mon Sep 17 00:00:00 2001 From: Visiraptor <110540187+Visiraptor@users.noreply.github.com> Date: Mon, 22 Aug 2022 19:43:38 +0200 Subject: [PATCH 4/5] Update strings-de.xml --- app/src/main/res/values-de/strings-de.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-de/strings-de.xml b/app/src/main/res/values-de/strings-de.xml index d665a405..0e9c2821 100644 --- a/app/src/main/res/values-de/strings-de.xml +++ b/app/src/main/res/values-de/strings-de.xml @@ -87,7 +87,7 @@ Damit dieser Anbieter korrekt funktioniert, ist möglicherweise eine VPN erforderlich Dies ist ein Torrent Anbieter, eine VPN wird empfohlen Beschreibung - Keine Parzelle gefunden + Keine Beschreibung gefunden Keine Beschreibung gefunden Bild-in-Bild-Modus Setzt die Wiedergabe in einem Miniplayer über anderen Anwendungen fort From 3eb5df5bc1e71c81f63f5e1593f89b602b4ebc95 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Mon, 22 Aug 2022 23:30:53 +0200 Subject: [PATCH 5/5] Reload result fragment on plugins fetched --- .../cloudstream3/ui/result/ResultFragment.kt | 97 +++++++++++++------ 1 file changed, 66 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt index ffc99585..d47ebb4c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt @@ -1,6 +1,7 @@ package com.lagradost.cloudstream3.ui.result import android.annotation.SuppressLint +import android.content.Context import android.content.Intent import android.content.Intent.* import android.content.res.ColorStateList @@ -26,6 +27,7 @@ import com.lagradost.cloudstream3.APIHolder.getApiDubstatusSettings import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull import com.lagradost.cloudstream3.APIHolder.updateHasTrailers import com.lagradost.cloudstream3.DubStatus +import com.lagradost.cloudstream3.MainActivity.Companion.afterPluginsLoadedEvent import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.SearchResponse import com.lagradost.cloudstream3.TvType @@ -261,6 +263,7 @@ open class ResultFragment : ResultTrailerPlayer() { } override fun onResume() { + afterPluginsLoadedEvent += ::reloadViewModel super.onResume() activity?.let { it.window?.navigationBarColor = @@ -268,6 +271,11 @@ open class ResultFragment : ResultTrailerPlayer() { } } + override fun onDestroy() { + afterPluginsLoadedEvent -= ::reloadViewModel + super.onDestroy() + } + /// 0 = LOADING, 1 = ERROR LOADING, 2 = LOADED private fun updateVisStatus(state: Int) { when (state) { @@ -409,6 +417,51 @@ open class ResultFragment : ResultTrailerPlayer() { } } + data class StoredData( + val url: String?, + val apiName: String, + val showFillers: Boolean, + val dubStatus: DubStatus, + val start: AutoResume? + ) + + private fun getStoredData(context: Context): StoredData? { + val settingsManager = PreferenceManager.getDefaultSharedPreferences(context) + val url = arguments?.getString(URL_BUNDLE) + val apiName = arguments?.getString(API_NAME_BUNDLE) ?: return null + val showFillers = + settingsManager.getBoolean(context.getString(R.string.show_fillers_key), false) + val dubStatus = if (context.getApiDubstatusSettings() + .contains(DubStatus.Dubbed) + ) DubStatus.Dubbed else DubStatus.Subbed + val startAction = arguments?.getInt(START_ACTION_BUNDLE) + + val start = startAction?.let { action -> + val startValue = arguments?.getInt(START_VALUE_BUNDLE) + val resumeEpisode = arguments?.getInt(EPISODE_BUNDLE) + val resumeSeason = arguments?.getInt(SEASON_BUNDLE) + + arguments?.remove(START_VALUE_BUNDLE) + arguments?.remove(START_ACTION_BUNDLE) + AutoResume( + startAction = action, + id = startValue, + episode = resumeEpisode, + season = resumeSeason + ) + } + return StoredData(url, apiName, showFillers, dubStatus, start) + } + + private fun reloadViewModel(success: Boolean = false) { + if (!viewModel.hasLoaded()) { + val storedData = getStoredData(activity ?: context ?: return) ?: return + + //viewModel.clear() + viewModel.load(activity, storedData.url ?: return, storedData.apiName, storedData.showFillers, storedData.dubStatus, storedData.start) + } + } + @SuppressLint("SetTextI18n") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -441,26 +494,12 @@ open class ResultFragment : ResultTrailerPlayer() { // activity?.fixPaddingStatusbar(result_toolbar) - val url = arguments?.getString(URL_BUNDLE) - val apiName = arguments?.getString(API_NAME_BUNDLE) ?: return - val startAction = arguments?.getInt(START_ACTION_BUNDLE) - val start = startAction?.let { action -> - val startValue = arguments?.getInt(START_VALUE_BUNDLE) - val resumeEpisode = arguments?.getInt(EPISODE_BUNDLE) - val resumeSeason = arguments?.getInt(SEASON_BUNDLE) - - arguments?.remove(START_VALUE_BUNDLE) - arguments?.remove(START_ACTION_BUNDLE) - AutoResume( - startAction = action, - id = startValue, - episode = resumeEpisode, - season = resumeSeason - ) + val storedData = (activity ?: context)?.let { + getStoredData(it) } - syncModel.addFromUrl(url) + syncModel.addFromUrl(storedData?.url) - val api = getApiFromNameNull(apiName) + val api = getApiFromNameNull(storedData?.apiName) result_episodes?.adapter = EpisodeAdapter( @@ -856,7 +895,7 @@ open class ResultFragment : ResultTrailerPlayer() { } } is Resource.Failure -> { - result_error_text.text = url?.plus("\n") + data.errorString + result_error_text.text = storedData?.url?.plus("\n") + data.errorString updateVisStatus(1) } is Resource.Loading -> { @@ -866,27 +905,23 @@ open class ResultFragment : ResultTrailerPlayer() { } context?.let { ctx -> - val dubStatus = if (ctx.getApiDubstatusSettings() - .contains(DubStatus.Dubbed) - ) DubStatus.Dubbed else DubStatus.Subbed //result_bookmark_button?.isVisible = ctx.isTvSettings() val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx) - val showFillers = - settingsManager.getBoolean(ctx.getString(R.string.show_fillers_key), false) + Kitsu.isEnabled = settingsManager.getBoolean(ctx.getString(R.string.show_kitsu_posters_key), true) - if (url != null) { + if (storedData?.url != null) { result_reload_connectionerror.setOnClickListener { - viewModel.load(activity, url, apiName, showFillers, dubStatus, start) + viewModel.load(activity, storedData.url, storedData.apiName, storedData.showFillers, storedData.dubStatus, storedData.start) } result_reload_connection_open_in_browser?.setOnClickListener { val i = Intent(ACTION_VIEW) - i.data = Uri.parse(url) + i.data = Uri.parse(storedData.url) try { startActivity(i) } catch (e: Exception) { @@ -894,10 +929,10 @@ open class ResultFragment : ResultTrailerPlayer() { } } - result_open_in_browser?.isVisible = url.startsWith("http") + result_open_in_browser?.isVisible = storedData.url.startsWith("http") result_open_in_browser?.setOnClickListener { val i = Intent(ACTION_VIEW) - i.data = Uri.parse(url) + i.data = Uri.parse(storedData.url) try { startActivity(i) } catch (e: Exception) { @@ -908,7 +943,7 @@ open class ResultFragment : ResultTrailerPlayer() { // bloats the navigation on tv if (context?.isTrueTvSettings() == false) { result_meta_site?.setOnClickListener { - it.context?.openBrowser(url) + it.context?.openBrowser(storedData.url) } result_meta_site?.isFocusable = true } else { @@ -917,7 +952,7 @@ open class ResultFragment : ResultTrailerPlayer() { if (restart || !viewModel.hasLoaded()) { //viewModel.clear() - viewModel.load(activity, url, apiName, showFillers, dubStatus, start) + viewModel.load(activity, storedData.url, storedData.apiName, storedData.showFillers, storedData.dubStatus, storedData.start) } } }