mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-31 07:13:00 +00:00 
			
		
		
		
	Merge remote-tracking branch 'origin/master'
This commit is contained in:
		| @@ -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' | ||||
|   | ||||
| @@ -73,8 +73,9 @@ public class ChannelActivity extends AppCompatActivity { | ||||
|  | ||||
|     @Override | ||||
|     protected void onCreate(Bundle savedInstanceState) { | ||||
|         if (Objects.equals(PreferenceManager.getDefaultSharedPreferences(this) | ||||
|                 .getString("theme", getResources().getString(R.string.light_theme_title)), getResources().getString(R.string.dark_theme_title))) { | ||||
|         if (PreferenceManager.getDefaultSharedPreferences(this) | ||||
|                 .getString("theme", getResources().getString(R.string.light_theme_title)). | ||||
|                         equals(getResources().getString(R.string.dark_theme_title)))  { | ||||
|             setTheme(R.style.DarkTheme_NoActionBar); | ||||
|         } | ||||
|         super.onCreate(savedInstanceState); | ||||
|   | ||||
| @@ -1,20 +1,18 @@ | ||||
| package org.schabi.newpipe; | ||||
|  | ||||
| import android.os.Build; | ||||
| import android.os.Bundle; | ||||
| import android.preference.PreferenceManager; | ||||
| import android.support.v7.app.AppCompatActivity; | ||||
|  | ||||
| import java.util.Objects; | ||||
|  | ||||
| import static org.schabi.newpipe.R.attr.theme; | ||||
|  | ||||
| public class ThemableActivity extends AppCompatActivity { | ||||
|  | ||||
|     @Override | ||||
|     protected void onCreate(Bundle savedInstanceState) { | ||||
|         super.onCreate(savedInstanceState); | ||||
|         if (Objects.equals(PreferenceManager.getDefaultSharedPreferences(this) | ||||
|                 .getString("theme", getResources().getString(R.string.light_theme_title)), getResources().getString(R.string.dark_theme_title))) { | ||||
|         if (PreferenceManager.getDefaultSharedPreferences(this) | ||||
|                     .getString("theme", getResources().getString(R.string.light_theme_title)). | ||||
|                             equals(getResources().getString(R.string.dark_theme_title)))  { | ||||
|                 setTheme(R.style.DarkTheme); | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -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(); | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 + "\""); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -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("$", "\\$") | ||||
|   | ||||
| @@ -46,8 +46,9 @@ public class SettingsActivity extends PreferenceActivity  { | ||||
|  | ||||
|     @Override | ||||
|     protected void onCreate(Bundle savedInstanceBundle) { | ||||
|         if (Objects.equals(PreferenceManager.getDefaultSharedPreferences(this) | ||||
|                 .getString("theme", getResources().getString(R.string.light_theme_title)), getResources().getString(R.string.dark_theme_title))) { | ||||
|         if (PreferenceManager.getDefaultSharedPreferences(this) | ||||
|                 .getString("theme", getResources().getString(R.string.light_theme_title)). | ||||
|                         equals(getResources().getString(R.string.dark_theme_title)))  { | ||||
|             setTheme(R.style.DarkTheme); | ||||
|         } | ||||
|         getDelegate().installViewFactory(); | ||||
|   | ||||
| @@ -42,7 +42,7 @@ | ||||
|                 android:id="@+id/errorMessageView" | ||||
|                 android:layout_width="wrap_content" | ||||
|                 android:layout_height="wrap_content" | ||||
|                 android:textColor="?android:attr/colorAccent" | ||||
|                 android:textColor="?attr/colorAccent" | ||||
|                 android:text="@string/info_labels"/> | ||||
|  | ||||
|             <TextView | ||||
| @@ -63,7 +63,7 @@ | ||||
|                     android:id="@+id/errorInfoLabelsView" | ||||
|                     android:layout_width="wrap_content" | ||||
|                     android:layout_height="wrap_content" | ||||
|                     android:textColor="?android:attr/colorAccent" | ||||
|                     android:textColor="?attr/colorAccent" | ||||
|                     android:text="@string/info_labels"/> | ||||
|  | ||||
|                 <HorizontalScrollView | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Weblate
					Weblate