diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 4b0ca4811..a003040c8 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -27,7 +27,7 @@ Do not report crashes in the GitHub issue tracker. NewPipe has an automated cras * Stick to NewPipe's style conventions (well, just look the other code and then do it the same way :)) * Do not bring non-free software (e.g., binary blobs) into the project. Also, make sure you do not introduce Google libraries. * Stick to [F-Droid contribution guidelines](https://f-droid.org/wiki/page/Inclusion_Policy) -* Make changes on a separate branch, not on the master branch. This is commonly known as *feature branch workflow*. You may then send your +* Make changes on a separate branch, not on the master branch. This is commonly known as *feature branch workflow*. You may then send your changes as a pull request on GitHub. Patches to the email address mentioned in this document might not be considered, GitHub is the primary platform. * When submitting changes, you confirm that your code is licensed under the terms of the [GNU General Public License v3](https://www.gnu.org/licenses/gpl-3.0.html). * Please test (compile and run) your code before you submit changes! Ideally, provide test feedback in the PR description. Untested code will **not** be merged! * Try to figure out yourself why builds on our CI fail. diff --git a/app/build.gradle b/app/build.gradle index 529d04425..092d2ed26 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId "org.schabi.newpipe" minSdkVersion 15 targetSdkVersion 26 - versionCode 38 - versionName "0.10.0" + versionCode 39 + versionName "0.10.1" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index d38a631a2..1b2ac6835 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -24,4 +24,14 @@ -dontwarn org.mozilla.javascript.tools.** -dontwarn android.arch.util.paging.CountedDataSource --dontwarn android.arch.persistence.room.paging.LimitOffsetDataSource \ No newline at end of file +-dontwarn android.arch.persistence.room.paging.LimitOffsetDataSource + + +# Rules for icepick. Copy paste from https://github.com/frankiesardo/icepick +-dontwarn icepick.** +-keep class icepick.** { *; } +-keep class **$$Icepick { *; } +-keepclasseswithmembernames class * { + @icepick.* ; +} +-keepnames class * { @icepick.State *;} diff --git a/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionEntity.java b/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionEntity.java index 567bec309..12d1764cc 100644 --- a/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionEntity.java +++ b/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionEntity.java @@ -7,6 +7,7 @@ import android.arch.persistence.room.Index; import android.arch.persistence.room.PrimaryKey; import org.schabi.newpipe.extractor.channel.ChannelInfoItem; +import org.schabi.newpipe.util.Constants; import static org.schabi.newpipe.database.subscription.SubscriptionEntity.SUBSCRIPTION_SERVICE_ID; import static org.schabi.newpipe.database.subscription.SubscriptionEntity.SUBSCRIPTION_TABLE; @@ -28,7 +29,7 @@ public class SubscriptionEntity { private long uid = 0; @ColumnInfo(name = SUBSCRIPTION_SERVICE_ID) - private int serviceId = -1; + private int serviceId = Constants.NO_SERVICE_ID; @ColumnInfo(name = SUBSCRIPTION_URL) private String url; diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java index 5f954cad2..4bb0c2cca 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java @@ -65,6 +65,7 @@ import org.schabi.newpipe.player.PopupVideoPlayer; import org.schabi.newpipe.player.old.PlayVideoActivity; import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.UserAction; +import org.schabi.newpipe.util.Constants; import org.schabi.newpipe.util.ExtractorHelper; import org.schabi.newpipe.util.InfoCache; import org.schabi.newpipe.util.ListHelper; @@ -110,7 +111,7 @@ public class VideoDetailFragment extends BaseStateFragment implement private boolean wasRelatedStreamsExpanded = false; @State - protected int serviceId = -1; + protected int serviceId = Constants.NO_SERVICE_ID; @State protected String name; @State diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListInfoFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListInfoFragment.java index 34fcaf873..4baf323ff 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListInfoFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListInfoFragment.java @@ -8,6 +8,7 @@ import android.view.View; import org.schabi.newpipe.extractor.ListExtractor; import org.schabi.newpipe.extractor.ListInfo; +import org.schabi.newpipe.util.Constants; import java.util.Queue; @@ -21,7 +22,7 @@ import io.reactivex.schedulers.Schedulers; public abstract class BaseListInfoFragment extends BaseListFragment { @State - protected int serviceId = -1; + protected int serviceId = Constants.NO_SERVICE_ID; @State protected String name; @State diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java index 2903d8a73..90d4d9741 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java @@ -46,6 +46,7 @@ import org.schabi.newpipe.fragments.BackPressable; import org.schabi.newpipe.fragments.list.BaseListFragment; import org.schabi.newpipe.history.HistoryListener; import org.schabi.newpipe.report.UserAction; +import org.schabi.newpipe.util.Constants; import org.schabi.newpipe.util.AnimationUtils; import org.schabi.newpipe.util.ExtractorHelper; import org.schabi.newpipe.util.LayoutManagerSmoothScroller; @@ -100,7 +101,7 @@ public class SearchFragment extends BaseListFragment searchFor(final int serviceId, final String query, final int pageNumber, final String searchLanguage, final SearchEngine.Filter filter) { + checkServiceId(serviceId); return Single.fromCallable(new Callable() { @Override public SearchResult call() throws Exception { @@ -62,6 +69,7 @@ public final class ExtractorHelper { } public static Single getMoreSearchItems(final int serviceId, final String query, final int nextPageNumber, final String searchLanguage, final SearchEngine.Filter filter) { + checkServiceId(serviceId); return searchFor(serviceId, query, nextPageNumber, searchLanguage, filter) .map(new Function() { @Override @@ -72,6 +80,7 @@ public final class ExtractorHelper { } public static Single> suggestionsFor(final int serviceId, final String query, final String searchLanguage) { + checkServiceId(serviceId); return Single.fromCallable(new Callable>() { @Override public List call() throws Exception { @@ -81,6 +90,7 @@ public final class ExtractorHelper { } public static Single getStreamInfo(final int serviceId, final String url, boolean forceLoad) { + checkServiceId(serviceId); return checkCache(forceLoad, serviceId, url, Single.fromCallable(new Callable() { @Override public StreamInfo call() throws Exception { @@ -90,6 +100,7 @@ public final class ExtractorHelper { } public static Single getChannelInfo(final int serviceId, final String url, boolean forceLoad) { + checkServiceId(serviceId); return checkCache(forceLoad, serviceId, url, Single.fromCallable(new Callable() { @Override public ChannelInfo call() throws Exception { @@ -99,6 +110,7 @@ public final class ExtractorHelper { } public static Single getMoreChannelItems(final int serviceId, final String url, final String nextStreamsUrl) { + checkServiceId(serviceId); return Single.fromCallable(new Callable() { @Override public NextItemsResult call() throws Exception { @@ -108,6 +120,7 @@ public final class ExtractorHelper { } public static Single getPlaylistInfo(final int serviceId, final String url, boolean forceLoad) { + checkServiceId(serviceId); return checkCache(forceLoad, serviceId, url, Single.fromCallable(new Callable() { @Override public PlaylistInfo call() throws Exception { @@ -117,6 +130,7 @@ public final class ExtractorHelper { } public static Single getMorePlaylistItems(final int serviceId, final String url, final String nextStreamsUrl) { + checkServiceId(serviceId); return Single.fromCallable(new Callable() { @Override public NextItemsResult call() throws Exception { @@ -152,6 +166,7 @@ public final class ExtractorHelper { * and put the results in the cache. */ private static Single checkCache(boolean forceLoad, int serviceId, String url, Single loadFromNetwork) { + checkServiceId(serviceId); loadFromNetwork = loadFromNetwork.doOnSuccess(new Consumer() { @Override public void accept(@NonNull I i) throws Exception { @@ -176,6 +191,7 @@ public final class ExtractorHelper { * Default implementation uses the {@link InfoCache} to get cached results */ public static Maybe loadFromCache(final int serviceId, final String url) { + checkServiceId(serviceId); return Maybe.defer(new Callable>() { @Override public MaybeSource call() throws Exception { diff --git a/app/src/main/java/org/schabi/newpipe/util/StateSaver.java b/app/src/main/java/org/schabi/newpipe/util/StateSaver.java index bd268abf7..51dceddf3 100644 --- a/app/src/main/java/org/schabi/newpipe/util/StateSaver.java +++ b/app/src/main/java/org/schabi/newpipe/util/StateSaver.java @@ -21,6 +21,7 @@ package org.schabi.newpipe.util; import android.content.Context; +import android.os.Build; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; @@ -29,6 +30,7 @@ import android.support.annotation.Nullable; import android.text.TextUtils; import android.util.Log; +import org.schabi.newpipe.BuildConfig; import org.schabi.newpipe.MainActivity; import java.io.File; @@ -110,6 +112,7 @@ public class StateSaver { /** * Try to restore the state from memory and disk, using the {@link StateSaver.WriteRead#readFrom(Queue)} from the writeRead. */ + @Nullable private static SavedState tryToRestore(@NonNull SavedState savedState, @NonNull WriteRead writeRead) { if (MainActivity.DEBUG) { Log.d(TAG, "tryToRestore() called with: savedState = [" + savedState + "], writeRead = [" + writeRead + "]"); @@ -117,7 +120,7 @@ public class StateSaver { FileInputStream fileInputStream = null; try { - Queue savedObjects = stateObjectsHolder.remove(savedState.prefixFileSaved); + Queue savedObjects = stateObjectsHolder.remove(savedState.getPrefixFileSaved()); if (savedObjects != null) { writeRead.readFrom(savedObjects); if (MainActivity.DEBUG) { @@ -126,8 +129,13 @@ public class StateSaver { return savedState; } - File file = new File(savedState.pathFileSaved); - if (!file.exists()) return null; + File file = new File(savedState.getPathFileSaved()); + if (!file.exists()) { + if(MainActivity.DEBUG) { + Log.d(TAG, "Cache file doesn't exist: " + file.getAbsolutePath()); + } + return null; + } fileInputStream = new FileInputStream(file); ObjectInputStream inputStream = new ObjectInputStream(fileInputStream); @@ -139,7 +147,7 @@ public class StateSaver { return savedState; } catch (Exception e) { - e.printStackTrace(); + Log.e(TAG, "Failed to restore state", e); } finally { if (fileInputStream != null) { try { @@ -154,10 +162,17 @@ public class StateSaver { /** * @see #tryToSave(boolean, String, String, WriteRead) */ + @Nullable public static SavedState tryToSave(boolean isChangingConfig, @Nullable SavedState savedState, Bundle outState, WriteRead writeRead) { - String currentSavedPrefix = savedState == null || TextUtils.isEmpty(savedState.prefixFileSaved) - ? System.nanoTime() - writeRead.hashCode() + "" - : savedState.prefixFileSaved; + @NonNull + String currentSavedPrefix; + if (savedState == null || TextUtils.isEmpty(savedState.getPrefixFileSaved())) { + // Generate unique prefix + currentSavedPrefix = System.nanoTime() - writeRead.hashCode() + ""; + } else { + // Reuse prefix + currentSavedPrefix = savedState.getPrefixFileSaved(); + } savedState = tryToSave(isChangingConfig, currentSavedPrefix, writeRead.generateSuffix(), writeRead); if (savedState != null) { @@ -173,22 +188,33 @@ public class StateSaver { * to the file with the name of prefixFileName + suffixFileName, in a cache folder got from the {@link #init(Context)}. *

* It checks if the file already exists and if it does, just return the path, so a good way to save is: - *

  • A fixed prefix for the file - *
  • A changing suffix + *
      + *
    • A fixed prefix for the file
    • + *
    • A changing suffix
    • + *
    + * + * @param isChangingConfig + * @param prefixFileName + * @param suffixFileName + * @param writeRead */ + @Nullable private static SavedState tryToSave(boolean isChangingConfig, final String prefixFileName, String suffixFileName, WriteRead writeRead) { if (MainActivity.DEBUG) { Log.d(TAG, "tryToSave() called with: isChangingConfig = [" + isChangingConfig + "], prefixFileName = [" + prefixFileName + "], suffixFileName = [" + suffixFileName + "], writeRead = [" + writeRead + "]"); } - Queue savedObjects = new LinkedList<>(); + LinkedList savedObjects = new LinkedList<>(); writeRead.writeTo(savedObjects); if (isChangingConfig) { if (savedObjects.size() > 0) { stateObjectsHolder.put(prefixFileName, savedObjects); return new SavedState(prefixFileName, ""); - } else return null; + } else { + if(MainActivity.DEBUG) Log.d(TAG, "Nothing to save"); + return null; + } } FileOutputStream fileOutputStream = null; @@ -197,8 +223,12 @@ public class StateSaver { if (!cacheDir.exists()) throw new RuntimeException("Cache dir does not exist > " + cacheDirPath); cacheDir = new File(cacheDir, CACHE_DIR_NAME); if (!cacheDir.exists()) { - boolean mkdirResult = cacheDir.mkdir(); - if (!mkdirResult) return null; + if(!cacheDir.mkdir()) { + if(BuildConfig.DEBUG) { + Log.e(TAG, "Failed to create cache directory " + cacheDir.getAbsolutePath()); + } + return null; + } } if (TextUtils.isEmpty(suffixFileName)) suffixFileName = ".cache"; @@ -214,7 +244,9 @@ public class StateSaver { return name.contains(prefixFileName); } }); - for (File file1 : files) file1.delete(); + for (File fileToDelete : files) { + fileToDelete.delete(); + } } fileOutputStream = new FileOutputStream(file); @@ -223,7 +255,7 @@ public class StateSaver { return new SavedState(prefixFileName, file.getAbsolutePath()); } catch (Exception e) { - e.printStackTrace(); + Log.e(TAG, "Failed to save state", e); } finally { if (fileOutputStream != null) { try { @@ -241,11 +273,11 @@ public class StateSaver { public static void onDestroy(SavedState savedState) { if (MainActivity.DEBUG) Log.d(TAG, "onDestroy() called with: savedState = [" + savedState + "]"); - if (savedState != null && !TextUtils.isEmpty(savedState.pathFileSaved)) { - stateObjectsHolder.remove(savedState.prefixFileSaved); + if (savedState != null && !TextUtils.isEmpty(savedState.getPathFileSaved())) { + stateObjectsHolder.remove(savedState.getPrefixFileSaved()); try { //noinspection ResultOfMethodCallIgnored - new File(savedState.pathFileSaved).delete(); + new File(savedState.getPathFileSaved()).delete(); } catch (Exception ignored) { } } @@ -271,9 +303,12 @@ public class StateSaver { // Inner //////////////////////////////////////////////////////////////////////////*/ + /** + * Information about the saved state on the disk + */ public static class SavedState implements Parcelable { - public String prefixFileSaved; - public String pathFileSaved; + private final String prefixFileSaved; + private final String pathFileSaved; public SavedState(String prefixFileSaved, String pathFileSaved) { this.prefixFileSaved = prefixFileSaved; @@ -287,7 +322,7 @@ public class StateSaver { @Override public String toString() { - return prefixFileSaved + " > " + pathFileSaved; + return getPrefixFileSaved() + " > " + getPathFileSaved(); } @Override @@ -313,6 +348,22 @@ public class StateSaver { return new SavedState[size]; } }; + + /** + * Get the prefix of the saved file + * @return the file prefix + */ + public String getPrefixFileSaved() { + return prefixFileSaved; + } + + /** + * Get the path to the saved file + * @return the path to the saved file + */ + public String getPathFileSaved() { + return pathFileSaved; + } } diff --git a/app/src/main/res/values-b+ast/strings.xml b/app/src/main/res/values-b+ast/strings.xml index 58a13dd09..c3bd768df 100644 --- a/app/src/main/res/values-b+ast/strings.xml +++ b/app/src/main/res/values-b+ast/strings.xml @@ -2,7 +2,7 @@ Calca na gueta pa entamar %1$s visiones - Espublizáu\'l %1$s + Espublizóse\'l %1$s Nun s\'alcontró un reproductor de fluxos. ¿Quies instalar VLC? Instalar Encaboxar @@ -14,15 +14,15 @@ ¿Quixesti dicir %1$s? Compartir con Escoyer restolador - rotación - Usar reproductor de videu esternu - Usar reproductor d\'audiu esternu + voltéu + Usar reproductor esternu de videu + Usar reproductor esternu d\'audiu Camín de descarga de vídeos - Camín nel qu\'atroxar los vídeos baxaos. + Camín nel qu\'atroxar los vídeos baxaos Introducir camín de descarga pa vídeos - Camín de descarga d\'audiu + Camín de descarga p\'audios Camín nel qu\'atroxar los audios baxaos. Introducir camín de descarga pa ficheros d\'audiu @@ -30,11 +30,11 @@ Reproducir con Kodi Nun s\'alcontró Kore. ¿Instalalu? Amosar opción «Reproducir con Kodi» - Amuesa una opción pa reproducir un videu per Kodi. + Amuesa una opción pa reproducir un videu per Kodi Audiu - Formatu d\'audiu por defeutu + Formatu por defeutu d\'audiu WebM — formatu llibre - m4a — calidá meyor + M4A — calidá meyor Tema Escuru Claru @@ -43,15 +43,15 @@ Videu siguiente Amosar vídeos siguientes y asemeyaos URL non sofitada - Llingua de conteníu preferíu + Llingua por defeutu del conteníu Videu y audiu Aspeutu Otru Reproduciendo de fondu Reproducir Conteníu - Amosar conteníu restrinxíu pola edá - El videu ta restrinxíu pola edá. Deshabilita esto diendo primero a axustes. + Amosar conteníu torgáu pola edá + El videu ta torgáu pola edá. Desactiva esto diendo primero a axustes. en direuto Descargues Descargues @@ -60,16 +60,16 @@ Fallu Fallu de rede Nun pudieron cargase toles miniatures - Nun pudo descargase la robla de la url del videu. - Nun pudo analizase\'l sitiu web. - Nun pudo analizase dafechu\'l sitiu web. - Conteníu non disponible. - Bloquiáu por GEMA. - Nun pudo configurase\'l menú de descarga. - Esto ye una tresmisión de direuto pero entá nun ta sofitao. - Nun pudo consiguise tresmisión dala. + Nun pudo descifrase la robla de la URL + Nun pudo analizase\'l sitiu web + Nun pudo analizase dafechu\'l sitiu web + Conteníu non disponible + Bloquiáu por GEMA + Nun pudo configurase\'l menú de descarga + Esto ye una tresmisión de direuto qu\'entá nun se sofita. + Nun pudo consiguise tresmisión dala Perdón, eso nun debió asoceder. - Fallu d\'informe per corréu + Informar per corréu del fallu Perdón, asocedieron dellos fallos. INFORMAR Información: @@ -78,11 +78,11 @@ Detalles: - Miniatura de previsualización de videu - Miniatura de previsualización de videu + Miniatura de previsualización del videu + Miniatura de previsualización del videu Préstames Usar Tor - (Esperimental) Forcia\'l tráficu de descargues pente Tor pa más privacidá (la tresmisión de vídeos entá nun ta sofitao). + (Esperimental) Forcia\'l tráficu de descargues pente Tor pa más privacidá (la tresmisión de vídeos entá nun se sofita). Informa d\'un fallu Informe d\'usuariu @@ -92,11 +92,11 @@ Videu Audiu Retentar - Ñegóse l\'accesu al almacenamientu + Ñegóse\'l permisu d\'accesu al almacenamientu Aniciar Posar - Ver + Reproducir Desaniciar Suma de comprobación @@ -110,23 +110,23 @@ URL malformada o internet non disponible Calca pa detallles Espera, por favor… - Copióse al cartafueyu. - Esbilla un direutoriu de descarga disponible, por favor. + Copióse al cartafueyu + Esbilla una carpeta disponible de descarga, por favor - Auto-reproduz un videu al llamar a NewPipe dende otra aplicación. - Auto-reproducir al llamar dende otra aplicación - Miniatura del xubidor + Auto-reproduz un videu al llamar a NewPipe dende otra aplicación + Auto-reproducción + Miniatura del avatar del xubidor Despréstames NewPipe baxando Nun pudo cargase la imaxe Cascó l\'aplicación/IU - + Lo qu\'asocedió:\\nSolicitú:\\nLlingua del conteníu:\\nServiciu:\\nHora GMT:\\nPaquete:\\nVersión:\\nVersión del SO:\\nRangu global d\'IP: Abrir en ventanu emerxente Mou de ventanu emerxente de NewPipe - Formatu preferíu de videu + Formatu por defeutu de videu Prietu Reproduciendo en ventanu emerxente @@ -134,7 +134,7 @@ Canal Más sero - Deshabilitóse + Desactivóse Usar reproductor vieyu @@ -142,26 +142,26 @@ M Mill MMill - Precísase esti permisu pa -abrir en ventanu emerxente + Precísase esti permisu p\'abrir +\nen ventanu emerxente reCAPTCHA Prueba reCAPTCHA - Prueba reCAPTCHA solicitada + Solicitóse la prueba reCAPTCHA Fondu Ventanu emerxente - Resolución por defeutu de ventanu emerxente + Resolución por defeutu del ventanu emerxente Amosar resoluciones más altes - Namái dellos preseos sofiten vídeos en 2k/4k + Namái dellos preseos sofiten vídeos en 2K/4K Peñera Refrescar Llimpiar - Delles resoluciones NUN tendrán audiu al habilitar esta opción - Tamañu y posición del ventanu emerxente - Recuerda la cabera posición y resolución afitada nel ventanu emerxente + Delles resoluciones NUN tendrán audiu al activar esta opción + Recuerdar tamañu y posición del ventanu emerxente + Recuerda la cabera posición y resolución afitaes nel ventanu emerxente Controles per xestos del reproductor Usa xestos pa controlar el brilléu y volume del reproductor Suxerencies de gueta @@ -170,5 +170,87 @@ abrir en ventanu emerxente Ventanu emerxente Redimensionáu - Compilación vieya del reproductor Mediaframework. + Reproductor vieyu integráu de Mediaframework +Soscribise + Soscribiéstite + Desoscribiéstite de la canal + Nun pue camudase la resolución + Nun pue anovase la soscripción + + Principal + Soscripciones + + Qué hai nuevo + + Historial de gueta + Atroxa de mou llocal les solicitúes de gueta + Historial + Fai un siguimientu de los vídeos vistos + Siguir al ganar el focu + Sigue reproduciendo tres les interrupciones (por exemplu, llamaes de teléfonu) + Reproductor + Comportamientu + Historial + Llistáu de reproducción + La meyor resolución + Desfacer + + Avisu de NewPipe + Avisos pa los reproductores de fondu y en ventanu emerxente de NewPipe + + Ensin resultaos + Equí nun hai más que grillos + + Ensin soscriptores + + %s soscriptor + %s soscriptores + + + Ensin visionaos + + %s visionáu + %s visionaos + + + Nun hai vídeos + + %s videu + %s vídeos + + + Descargues + Caráuteres permitíos nos nomes de ficheros + Los caráuteres non válidos tróquense por esti valor + Troquéu de caráuteres + + Lletres y díxitos + La mayoría de caráuteres especiales + + Tocante a NewPipe + Axustes + Tocante a + Llicencies de terceros + © %1$s por %2$s so la %3$s + Nun pudo cargase la llicencia + Abrir sitiu web + Tocante a + Collaboradores + Llicencies + Un frontal llixeru de YouTube p\'Android. + Ver en GitHub + Llicencia de NewPipe + Si tienes idees, quies traducir, facer cambeos, llimpiar el códigu u otres coses, l\'ayuda siempres s\'agradez. ¡Cuánto más se faiga, más s\'ameyora! + Lleer llicencia + Collaboración + + Historial + Guetao + Visto + L\'historial ta desactiváu + Historial + L\'historial ta baleru + Llimpióse l\'historial + Desanicióse l\'elementu + ¿Quies desaniciar esti elementu del historial de gueta? diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index eb29f78b0..0e183f2f8 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -254,7 +254,7 @@ Die meisten Sonderzeichen Element gelöscht -Fortsetzen bei erneutem Fokussieren + Fortsetzen bei erneutem Fokussieren Player Nichts hier außer Grillen diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml new file mode 100644 index 000000000..33b4a6cd5 --- /dev/null +++ b/app/src/main/res/values-fi/strings.xml @@ -0,0 +1,237 @@ + +Napauta hakua aloittaaksesi + %1$s näyttökertaa + Julkaistu %1$s + Ei löytynyt suoratoisto soitinta. Haluatko asentaa VLC:n? + Asenna + Peruuta + Avaa selaimessa + Avaa ponnahdusikkunassa + Jaa + Lataa + Haku + Asetukset + Tarkoititko: %1$s ? + Jaa + Valitse selain + kierto + Käytä ulkoista videotoistinta + Joillain resoluutioilla EI ole ääntä, kun tämä on valittuna + Käytä ulkoista äänitoistinta + NewPipe ponnahdusikkuna + Tilaa + Tilattu + Kanavan tilaus peruttu + Ei pystytty vaihtamaan tilausta + Ei pystytty päivittämään tilausta + + Päävalikko + Tilaukset + + Uusimmat + + Taustatoisto + Ponnahdusikkuna + + Videon latauksen sijainti + Sijainti ladatuille videoille + Aseta sijainti minne videot tallennetaan + + Audio latauksen sijainti + Sijainti ladatuille audiotiedostoille + Aseta sijainti minne audiotiedostot tallennetaan + + Automaattitoisto + Toistaa automaattisesti videon, kun NewPipe sovellusta kutsutaan toisesta sovelluksesta + Oletusresoluutio + Ponnahdusikkunan oletusresoluutio + Näytä korkeampia resoluutioita + Vain jotkin laitteet tukevat 2K/4K videotoistoa + Toista Kodi:ssa + Kore sovellusta ei löytynyt. Asennetaanko se? + Näytä \"Toista Kodi:ssa\" vaihtoehto + Näyttää painikkeen, jolla voi toistaa videon Kodi media center:llä + Audio + Oletus audioformaatti + Oletus videoformaatti + WebM — vapaa formaatti + M4A — parempi laatu + Teema + Kirkas + Tumma + Musta + Muista ponnahdusikkunan koko ja sijainti + Muista viimeisin ponnahdusikkunan koko ja sijainti + Soittimen eleohjaus + Käytä eleitä ohjataksesi kirkkautta ja äänentasoa + Hakuehdotukset + Näytä ehdotuksia hakiessa + Hakuhistoria + Tallentaa hakutietokannan paikallisesti + Historia + Pidä muistissa katsotut videot + Jatka toistoa keskeytysten jälkeen (esim. puhelut) + Lataa + Seuraava video + Näytä seuraava ja samankaltaisia videoita + URL ei tueta + Oletus-sisällon kieli + Toistin + Käyttäytyminen + Video & Audio + Historia + Ponnahdusikkuna + Ulkoasu + Muu + Toistaa taustalla + Toistaa ponnahdusikkunassa + Toista + Sisältö + Näytä ikärajoitettua sisältöä + Ikärajoitettu video. Ikärajoituksen voi sallia asetuksista. + live + Lataukset + Lataukset + Virheraportti + Kaikki + Kanava + Soittolista + Kyllä + Myöhemmin + Poistettu käytöstä + Suodata + Päivitä + Pyyhi + Muutetaan kokoa + Paras resoluutio + Peru + + NewPipe Ilmoitus + Ilmoitukset Newpipe taustasoitolle ja ponnahdusikkunalle + + Virhe + Verkkovirhe + Ei pystytty lataamaan kaikkia esikatselukuvia + Ei pystytty purkamaan salausta videon URL allekirjoitukselle + Ei pystytty jäsentämään websivua + Ei pystytty jäsentämään websivua kokonaan + Sisältö ei ole saatavilla + Estetty GEMA + Ei pystytty asettamaan latausvalikkoa + Tämä on LIVE LÄHETYS, mitä ei vielä tueta. + Ei saatu mitään suoratoistoa + Kuvan lataus epäonnistui + Sovellus/UI kaatui + Pahoittelut, noin ei olisi pitänyt käydä. + Raportoi virhe sähköpostin kautta + Pahoittelit, joitain virheitä tapahtui. + RAPORTTI + Mitä tapahtui: + Sinun viesti (Englanniksi): + Yksityiskohdat: + + + Videon esikatselukuva + Videon esikatselukuva + Jakajan avatar esikatselukuva + Tykkäykset + Ei-tykkäykset + Käytä Tor + (Kokeellinen) Pakota latausliikenne Tor:n kautta saadaksesi parempaa yksityisyyttä (videoiden suoratoistoa ei vielä tueta). + Raportoi virhe + Käyttäjäraportti + Ei tuloksia + Tyhjää täynnä + + Ei voida luoda lataushakemistoa \'%1$s\' + Luotiin lataushakemisto \'%1$s\' + + Video + Audio + Toista uudelleen + Oikeus tallennustilan hallintaan evätty + Käytä vanhaa toistinta + Käytä vanhaa sisäänrakennettua Mediaframework toistinta + + t. + Milj. + Bilj. + + Ei tilaajia + + %s tilaaja + %s tilaajia + + + Ei katselukertoja + + %s katselukerta + %s katselukertoja + + + Ei videoita + + %s video + %s videoita + + + Aloita + Keskeytä + Toista + Poista + Tarkistus-suma + + Uusi tehtävä + OK + + Tiedostonimi + Säikeet + Virhe + Serveriä ei tueta + Tiedosto on jo olemassa + Epämuodostunut URL tai Internet-yhteys ei ole saatavilla + NewPipe Lataus käynnissä + Napauta nähdäksesi lisää + Odota… + Kopioitu leikepöydälle + Valitse saatavilla oleva latauskansio + Tämä käyttöoikeus tarvitaan ponnahdusikkunan käytölle + + reCAPTCHA + reCAPTCHA Haaste + reCAPTCHA Haaste pyydetty + + Lataus + Sallittuja merkkejä tiedostonimissä + Epäkelvot merkit korvataan tällä arvolla + Korvaus merkki + + Kirjaimia ja numeroita + Suurin osa erikoismerkeistä + + Tietoja NewPipe + Asetukset + Tietoja + Kolmannen osapuolen Lisenssit + Ei voitu ladata lisenssiä + Avaa websivu + Tietoja + Hyväntekijät + Lisenssit + Vapaa kevyt YouTube frontend Android:lle. + Näytä GitHub:ssa + NewPipe:n Lisenssi + Olkoon sinulla ideoita; käännöksistä, design muutoksista, koodin siivoamisesta tai raskaista koodimuutoksista—apu on aina tervetullutta. Mitä enemmän saadaan tehtyä sen paremmaksi se tulee! + Lue lisenssi + Lahjoitus + + Historia + Haettu + Katsottu + Historia on poistettu käytöstä + Historia + Historia on tyhjä + Historia pyyhitty + Poistettu + Haluatko poistaa tämän hakuhistoriasta? + diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index 39084cecb..bac01e17f 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -23,7 +23,7 @@ Lokasi untuk menyimpan audio yang diunduh Masukkan lokasi unduhan berkas audio - Putar otomatis ketika dipanggil dari aplikasi lain + Putar otomatis Otomatis memutar video ketika NewPipe dijalankan dari aplikasi lain Resolusi baku Putar dengan Kodi @@ -33,7 +33,7 @@ Audio Format audio baku WebM — format bebas - m4a — kualitas lebih baik + M4A — kualitas lebih baik Tema Gelap Terang @@ -61,15 +61,15 @@ Laporan galat Galat - Tidak bisa mengurai situs web. - Sama sekali tidak bisa mengurai situs web. - Konten tidak tersedia. - Diblokir oleh GEMA. - Tidak bisa menyiapkan menu unduhan. - Ini adalah SIARAN LANGSUNG. Fitur ini belum didukung. + Tidak dapat mengurai situs web + Sama sekali tidak dapat mengurai situs web + Konten tidak tersedia + Diblokir oleh GEMA + Tidak bisa menyiapkan menu unduhan + Ini adalah SIARAN LANGSUNG, yang mana ini belum didukung. Tidak bisa memuat gambar Maaf, hal tersebut seharusnya tidak terjadi. - Lapor galat via surel + Lapor galat via surat elektronik Maaf, telah terjadi galat. LAPOR Info: @@ -92,7 +92,7 @@ Video Audio Ulangi - Izin untuk mengakses penyimpanan ditolak + Izin akses penyimpanan ditolak Hapus Tonton @@ -117,7 +117,7 @@ Tidak ditemukan pemutar stream. Apakah anda ingin memasang VLC? Tidak bisa mendekrip tanda tangan URL video. App/UI rusak - Tidak bisa mendapatkan stream apapun. + Tidak bisa mendapatkan stream apapun Apa:\\nPermintaan:\\nBahasa Konten:\\nLayanan:\\nWaktu GMT:\\nPaket:\\nVersi:\\nVersi OS:\\nIP: Laporan pengguna @@ -145,11 +145,11 @@ Izin ini dibutuhkan untuk membuka di mode popup - Mode Popup NewPipe + Mode popup NewPipe Memutar dalam mode popup Gunakan pemutar lama - Versi lama pemutar Mediaframework. + Versi lama pemutar Mediaframework Dinonaktifkan Pilihan format video @@ -166,7 +166,7 @@ membuka di mode popup Filter Beberapa resolusi TIDAK akan memiliki suara ketika opsi ini diaktifkan Ingat ukuran dan posisi sembulan - Ingat ukuran terakhir dan pengaturan posisi sembulan + Ingat ukuran terakhir dan pengaturan posisi popup Sembulan Ubah ukuran @@ -212,7 +212,7 @@ membuka di mode popup Utama Cari riwayat Simpan pencarian secara lokal - Riwayat tontonan + Riwayat Notifikasi NewPipe Riwayat Riwayat dinonaktifkan diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 02fa7cacf..ae4d6e10e 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -253,4 +253,5 @@ Historikken er tom Historikk tømt Element slettet +Ønsker du å slette dette elementet fra søkehistorikken? diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 8fa2cf0a0..bb040c28f 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -61,7 +61,7 @@ Erro Incapaz de carregar todas as miniaturas Incapaz de decodificar a assinatura do vídeo - Incapaz de processar o sítio da web + Incapaz de processar o site Conteúdo não disponível Bloqueado pela GEMA @@ -69,7 +69,7 @@ Restringir conteúdo por idade Vídeo com restrição de idade. É possível permitir este material através das Definições. - Não foi possível processar o sítio da web + Não foi possível processar totalmente o site Não foi possível configurar o menu de transferências Esta é uma EMISSÃO EM DIRETO, as quais ainda não são suportadas. Não foi possível obter a emissão @@ -116,7 +116,7 @@ Toque para detalhes Por favor aguarde… Copiado para a área de transferência - Por favor selecione um diretório disponível para download + Por favor selecione a pasta para as descargas OK Processos @@ -207,16 +207,16 @@ o modo “popup“ Armazenar termos de pesquisa localmente Histórico Armazenar histórico de vídeos assistidos - Retomar reprodução ao ganhar foco + Retomar ao ganhar foco Continuar reprodução após interrupções (ex. chamadas) - Reprodutor de vídeo + Reprodutor Comportamento Histórico Lista de Reprodução Desfazer Notificação do NewPipe - Notificações do NewPipe em Segundo Plano e Reprodutores de Vídeo em Popup + Notificações do NewPipe e para reprodutores pop-up Sem resultados Aqui não há nada para ver @@ -242,17 +242,18 @@ o modo “popup“ Download Caracteres permitidos em nomes de ficheiros Caracteres inválidos são substituídos por este valor - Caracter de substituição + Carácter de substituição Letras e dígitos - Caracteres mais especiais + Caracteres especiais Histórico - Procurados - Visualizado + Pesquisado + Visto Histórico está desativado Histórico O histórico está vazio Histórico eliminado - Objeto eliminado + Item apagado +Deseja apagar este item do histórico de pesquisa? diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 4424781f8..e60ec9917 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -257,4 +257,5 @@ Элемент удалён +Удалить этот элемент из истории поиска? diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index c68b7f293..5c536a72a 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -23,7 +23,7 @@ 聲音 預設聲音檔案格式 WebM — 開放格式 - m4a — 更佳畫質 + M4A — 更佳畫質 主題 黑暗 明亮 @@ -32,7 +32,7 @@ 下一部影片 顯示下一部及相關的影片 不支援此網址 - 喜好的內容語言 + 預設內容語言 影片及聲音 外觀 其他 @@ -59,7 +59,7 @@ 已建立下載路徑「%1$s」 內容被 GEMA 封鎖。 按一下搜尋按鈕以開始操作 - 其他應用程式要求播放時,自動遵從指令 + 自動撥放 當其他應用程式要求播放影片時,NewPipe 將會自動播放 內容 顯示已設年齡限制的影片 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 429cbda0d..3f9865c47 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -27,7 +27,7 @@ 顯示「用 Kodi 播放」的選項 預設音訊格式 WebM — 開放格式 - m4a — 更佳畫質 + M4A — 更佳畫質 主題 暗色系 明亮色系 @@ -36,7 +36,7 @@ 下一部影片 顯示下一部和相關的影片 不支援此網址 - 內容語言 + 預設內容語言 影片和音訊 外觀 其他 @@ -62,7 +62,7 @@ 勾選後,部分解析度可能不會有音訊 NewPipe 懸浮視窗模式 背景 - 從其他應用程式開啟時自動播放 + 自動播放 當 NewPipe 被其他應用程式呼叫時自動播放影片 懸浮視窗預設解析度 顯示更高的解析度 @@ -97,14 +97,14 @@ 重新設定大小 錯誤 無法載入所有縮圖 - 無法解析影片 URL 簽名。 - 無法解析網站。 - 無法完全解析網站。 - 內容無法使用。 - 已被 GEMA 阻擋。 - 無法設定下載選單。 + 無法解析影片 URL 簽章 + 無法解析網站 + 無法完全解析網站 + 內容無法使用 + 已被 GEMA 阻擋 + 無法設定下載選單 尚未支援現場直播。 - 無法取得串流。 + 無法取得串流 無法載入圖片 應用程式或 UI 已停止運作 抱歉,這不應該發生的。 @@ -126,7 +126,7 @@ 重試 無法存取儲存空間 使用舊的播放器 - 舊型內建媒體播放器。 + 舊型內建媒體播放器 @@ -135,7 +135,7 @@ 開始 暫停 - 檢視 + 播放 刪除 檢查碼 @@ -151,8 +151,8 @@ NewPipe 下載中 輕觸顯示詳細資訊 請稍候… - 已複製至剪貼簿。 - 請選擇下載資料夾。 + 已複製至剪貼簿 + 請選擇下載資料夾 使用懸浮視窗模式需要此權限 reCAPTCHA 驗證 @@ -162,4 +162,82 @@ 懸浮視窗 現場直播 - + 訂閱 + 已訂閱 + 已取消訂閱頻道 + 無法切換訂閱 + 無法更新訂閱 + + 主選單 + 訂閱項目 + + 有什麼新鮮事 + + 搜尋紀錄 + 在本機儲存搜尋紀錄 + 歷史紀錄 + 記錄觀看過的影片 + 在取得視窗焦點時繼續播放 + 在干擾結束後繼續播放(例如有來電) + 播放器 + 行為 + 歷史紀錄 + 播放清單 + 復原 + + NewPipe 通知 + NewPipe 背景播放與懸浮模式播放器的通知 + + 沒有結果 + 空空如也 + + 無訂閱者 + + %s 位訂閱者 + + + 無觀看次數 + + %s 次觀看 + + + 沒有影片 + + %s 部影片 + + + 下載 + 檔案名稱中允許的字元 + 不符合設定的字元將會被替換為此字串 + 替換為 + + 字母與數字 + 大部分的特殊字元 + + 關於 NewPipe + 設定 + 關於 + 第三方授權 + © %1$s 由 %2$s 使用 %3$s 授權條款發佈 + 無法載入授權條款 + 開啟網站 + 關於 + 貢獻者 + 授權條款 + 一款在 Android 上免費輕巧的 YouTube 前端。 + 在 GitHub 上檢視 + NewPipe 使用的授權條款 + 不管你有什麼點子,翻譯、設計、程式碼整理,或者程式碼撰寫,我們永遠歡迎你來幫忙。完成的越多,NewPipe 也會更好! + 閱讀授權條款 + 貢獻 + + 歷史紀錄 + 已搜尋 + 已觀看 + 歷史紀錄已被停用 + 歷史紀錄 + 沒有歷史紀錄 + 已清除歷史紀錄 + 項目已刪除 + 確定要刪除此項搜尋紀錄嗎? + diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 8c0fb64a8..ed88a042a 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f3ed0a0af..74bb77845 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Tue Mar 07 14:05:42 CET 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.2.1-bin.zip diff --git a/gradlew b/gradlew index 91a7e269e..cccdd3d51 100755 --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh ############################################################################## ## @@ -6,47 +6,6 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - # Attempt to set APP_HOME # Resolve links: $0 may be a link PRG="$0" @@ -61,9 +20,49 @@ while [ -h "$PRG" ] ; do fi done SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- +cd "`dirname \"$PRG\"`/" >/dev/null APP_HOME="`pwd -P`" -cd "$SAVED" >&- +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -90,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -114,6 +113,7 @@ fi if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` @@ -154,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index aec99730b..e95643d6a 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -46,10 +46,9 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +59,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line