diff --git a/app/src/main/java/org/schabi/newpipe/ErrorActivity.java b/app/src/main/java/org/schabi/newpipe/ErrorActivity.java
index c6fc5babe..631d25ae1 100644
--- a/app/src/main/java/org/schabi/newpipe/ErrorActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/ErrorActivity.java
@@ -5,8 +5,8 @@ package org.schabi.newpipe;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
-import android.net.MailTo;
import android.net.Uri;
+import android.os.AsyncTask;
import android.os.Build;
import android.preference.PreferenceManager;
import android.support.design.widget.Snackbar;
@@ -26,33 +26,35 @@ import android.widget.TextView;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.json.JSONArray;
import org.json.JSONObject;
+import org.schabi.newpipe.extractor.Parser;
-import java.net.URI;
+import java.text.SimpleDateFormat;
+import java.util.Date;
import java.util.List;
+import java.util.TimeZone;
import java.util.Vector;
/**
* Created by Christian Schabesberger on 24.10.15.
- *
+ *
* Copyright (C) Christian Schabesberger 2016
* ErrorActivity.java is part of NewPipe.
- *
+ *
* NewPipe is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
- *
+ *
* NewPipe is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with NewPipe. If not, see .
*/
public class ErrorActivity extends AppCompatActivity {
-
public static class ErrorInfo {
public int userAction;
public String request;
@@ -75,19 +77,24 @@ public class ErrorActivity extends AppCompatActivity {
public static final String SEARCHED_STRING = "Searched";
public static final String REQUESTED_STREAM_STRING = "Requested Stream";
public static final String ERROR_EMAIL_ADDRESS = "error@newpipe.schabi.org";
- public static final String ERROR_EMAIL_SUBJECT="Exception in NewPipe " + BuildConfig.VERSION_NAME;
+ public static final String ERROR_EMAIL_SUBJECT = "Exception in NewPipe " + BuildConfig.VERSION_NAME;
private List errorList;
private ErrorInfo errorInfo;
private Class returnActivity;
+ private String currentTimeStamp;
+ private String globIpRange;
+ Thread globIpRangeThread = null;
// views
private TextView errorView;
private EditText userCommentBox;
+ private Button reportButton;
+ private TextView infoView;
public static void reportError(final Context context, final List el,
final Class returnAcitivty, View rootView, final ErrorInfo errorInfo) {
- if(rootView != null) {
+ if (rootView != null) {
Snackbar.make(rootView, R.string.error_snackbar_message, Snackbar.LENGTH_LONG)
.setAction(R.string.error_snackbar_action, new View.OnClickListener() {
@Override
@@ -146,14 +153,16 @@ public class ErrorActivity extends AppCompatActivity {
returnActivity = ac.returnActivity;
errorInfo = ac.errorInfo;
- Button reportButton = (Button) findViewById(R.id.errorReportButton);
+ reportButton = (Button) findViewById(R.id.errorReportButton);
userCommentBox = (EditText) findViewById(R.id.errorCommentBox);
errorView = (TextView) findViewById(R.id.errorView);
+ infoView = (TextView) findViewById(R.id.errorInfosView);
errorView.setText(formErrorText(errorList));
//importand add gurumeditaion
addGuruMeditaion();
+ currentTimeStamp = getCurrentTimeStamp();
buildInfo(errorInfo);
reportButton.setOnClickListener(new View.OnClickListener() {
@@ -168,6 +177,10 @@ public class ErrorActivity extends AppCompatActivity {
startActivity(Intent.createChooser(intent, "Send Email"));
}
});
+ reportButton.setEnabled(false);
+
+ globIpRangeThread = new Thread(new IpRagneRequester());
+ globIpRangeThread.start();
}
@Override
@@ -180,7 +193,7 @@ public class ErrorActivity extends AppCompatActivity {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
- switch(id) {
+ switch (id) {
case android.R.id.home:
goToReturnActivity();
break;
@@ -191,14 +204,14 @@ public class ErrorActivity extends AppCompatActivity {
intent.setType("text/plain");
startActivity(Intent.createChooser(intent, getString(R.string.share_dialog_title)));
}
- break;
+ break;
}
return false;
}
private String formErrorText(List el) {
String text = "";
- for(Exception e : el) {
+ for (Exception e : el) {
text += "-------------------------------------\n"
+ ExceptionUtils.getStackTrace(e);
}
@@ -207,7 +220,7 @@ public class ErrorActivity extends AppCompatActivity {
}
private void goToReturnActivity() {
- if(returnActivity == null) {
+ if (returnActivity == null) {
super.onBackPressed();
} else {
Intent intent;
@@ -233,6 +246,7 @@ public class ErrorActivity extends AppCompatActivity {
+ "\n" + info.request
+ "\n" + getContentLangString()
+ "\n" + info.serviceName
+ + "\n" + currentTimeStamp
+ "\n" + BuildConfig.VERSION_NAME
+ "\n" + getOsString();
@@ -248,10 +262,12 @@ public class ErrorActivity extends AppCompatActivity {
.put("content_language", getContentLangString())
.put("service", errorInfo.serviceName)
.put("version", BuildConfig.VERSION_NAME)
- .put("os", getOsString());
+ .put("os", getOsString())
+ .put("time", currentTimeStamp)
+ .put("ip_range", globIpRange);
JSONArray exceptionArray = new JSONArray();
- for(Exception e : errorList) {
+ for (Exception e : errorList) {
exceptionArray.put(ExceptionUtils.getStackTrace(e));
}
@@ -269,9 +285,12 @@ public class ErrorActivity extends AppCompatActivity {
private String getUserActionString(int userAction) {
switch (userAction) {
- case REQUESTED_STREAM: return REQUESTED_STREAM_STRING;
- case SEARCHED: return SEARCHED_STRING;
- default: return "Your description is in another castle.";
+ case REQUESTED_STREAM:
+ return REQUESTED_STREAM_STRING;
+ case SEARCHED:
+ return SEARCHED_STRING;
+ default:
+ return "Your description is in another castle.";
}
}
@@ -282,7 +301,7 @@ public class ErrorActivity extends AppCompatActivity {
private String getOsString() {
String osBase = Build.VERSION.SDK_INT >= 23 ? Build.VERSION.BASE_OS : "Android";
- return System.getProperty("os.name")
+ return System.getProperty("os.name")
+ " " + (osBase.isEmpty() ? "Android" : osBase)
+ " " + Build.VERSION.RELEASE
+ " - " + Integer.toString(Build.VERSION.SDK_INT);
@@ -301,4 +320,47 @@ public class ErrorActivity extends AppCompatActivity {
//super.onBackPressed();
goToReturnActivity();
}
+
+ public String getCurrentTimeStamp() {
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+ df.setTimeZone(TimeZone.getTimeZone("GMT"));
+ return df.format(new Date());
+ }
+
+ private class IpRagneRequester implements Runnable {
+ Handler h = new Handler();
+ public void run() {
+ String ipRange = "none";
+ try {
+ Downloader dl = new Downloader();
+ String ip = dl.download("https://ifcfg.me/ip");
+
+ ipRange = Parser.matchGroup1("([0-9]*\\.[0-9]*\\.)[0-9]*\\.[0-9]*", ip)
+ + "0.0";
+ } catch(Exception e) {
+ Log.d(TAG, "Error while error: could not get iprange");
+ e.printStackTrace();
+ } finally {
+ h.post(new IpRageReturnRunnable(ipRange));
+ }
+ }
+ }
+
+
+
+ private class IpRageReturnRunnable implements Runnable {
+ String ipRange;
+ public IpRageReturnRunnable(String ipRange) {
+ this.ipRange = ipRange;
+ }
+ public void run() {
+ globIpRange = ipRange;
+ if(infoView != null) {
+ String text = infoView.getText().toString();
+ text += "\n" + globIpRange;
+ infoView.setText(text);
+ reportButton.setEnabled(true);
+ }
+ }
+ }
}
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 5c016f31f..758fb86f6 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
@@ -412,6 +412,7 @@ public class YoutubeStreamExtractor implements StreamExtractor {
@Override
public String getDashMpdUrl() throws ParsingException {
+ throw new ParsingException("blabla");
/*
try {
String dashManifestUrl = videoInfoPage.get("dashmpd");
@@ -428,7 +429,6 @@ public class YoutubeStreamExtractor implements StreamExtractor {
"Could not get \"dashmpd\" maybe VideoInfoPage is broken.", e);
}
*/
- return "";
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0edc9e353..95ed0e1a6 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -97,7 +97,7 @@
REPORT
Info:
What happened:
- What:\\nRequest:\\nContent Lang:\\nService:\\nVersion:\\nOS version:
+ What:\\nRequest:\\nContent Lang:\\nService:\\nGMT Time:\\nVersion:\\nOS version:\\nGlob. IP range:
Searched for:
Requested stream:
Your comment (in English):