blob: 4675cd925a708cf1cd9466e1da897eea5780c3a5 [file] [log] [blame]
package com.android.bugreportsender;
import android.util.Log;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
/**
* Utility class for parsing a bugreport into its sections.
*/
public final class BugReportParser {
private static final int BUFFER_SIZE = 8*1024;
private static final String SECTION_HEADER = "------";
private static final int MAX_LINES = 1000; // just in case we miss the end of the section.
// utility class
private BugReportParser() {}
public static String extractSystemLogs(InputStream in, String section) throws IOException {
final String sectionWithHeader = SECTION_HEADER + " " + section;
StringBuilder sb = new StringBuilder();
// open a reader around the provided inputstream.
BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"), BUFFER_SIZE);
boolean inSection = false;
int numLines = 0;
// read file contents. loop until we get to the appropriate section header.
// once we reach that header, accumulate all lines until we get to the next section.
String line = null;
while ((line = reader.readLine()) != null) {
if (inSection) {
// finish when we get to:
// -----
if (line.startsWith(SECTION_HEADER) || (numLines > MAX_LINES)) {
break;
}
sb.append(line);
sb.append("\n");
++numLines;
} else if (line.startsWith(sectionWithHeader)) {
sb.append(line);
sb.append("\n");
inSection = true;
}
}
return sb.toString();
}
}