[Jrisk-cvs] SF.net SVN: jrisk-code:[1057] Grasshopper
Brought to you by:
yuranet
|
From: <yu...@us...> - 2024-12-27 16:47:28
|
Revision: 1057
http://sourceforge.net/p/jrisk/code/1057
Author: yuranet
Date: 2024-12-27 16:47:27 +0000 (Fri, 27 Dec 2024)
Log Message:
-----------
send end of log, not start
Modified Paths:
--------------
Grasshopper/src/net/yura/grasshopper/submitter/BugSubmitterMultipart.java
Grasshopper/test/net/yura/grasshopper/PopupBugTest.java
Added Paths:
-----------
Grasshopper/src/net/yura/grasshopper/util/TailOutputStream.java
Grasshopper/test/net/yura/grasshopper/util/TailOutputStreamTest.java
Modified: Grasshopper/src/net/yura/grasshopper/submitter/BugSubmitterMultipart.java
===================================================================
--- Grasshopper/src/net/yura/grasshopper/submitter/BugSubmitterMultipart.java 2024-12-27 15:58:33 UTC (rev 1056)
+++ Grasshopper/src/net/yura/grasshopper/submitter/BugSubmitterMultipart.java 2024-12-27 16:47:27 UTC (rev 1057)
@@ -1,6 +1,5 @@
package net.yura.grasshopper.submitter;
-import net.yura.grasshopper.util.LimitedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
@@ -13,6 +12,7 @@
import net.yura.grasshopper.BugUIInfo;
import net.yura.grasshopper.info.LogText;
import net.yura.grasshopper.info.ScreenShot;
+import net.yura.grasshopper.util.TailOutputStream;
import org.apache.http.entity.mime.MIME;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.AbstractContentBody;
@@ -36,6 +36,21 @@
// get Screenshots of windows first, so any paint errors will go into the logs
ScreenShot[] images = BugUIInfo.getFrames();
+ for (int c=0;c<images.length;c++) {
+ ScreenShot ss = images[c];
+ byte[] data = ss.getEncodedData();
+ if (data!=null) {
+ // we need to use img0 - img9 for the name of this field as this is what we set up in default.trc
+ // upload_img0: gif jpg jpeg png xxx
+ // ...
+ // upload_img9: gif jpg jpeg png xxx
+ requestContent.addPart("img"+c, new ByteArrayBody(data, "frame_"+c+"."+ss.getFileType() ));
+ }
+ String error = ss.getError();
+ if (error!=null) {
+ requestContent.addPart("img"+c+"Error", new StringBody( error ));
+ }
+ }
Iterator it = BugSubmitter.getKeysLogTextLast(map).iterator();
while (it.hasNext()) {
@@ -61,7 +76,7 @@
else {
truncate = -1L;
}
-
+
requestContent.addPart(String.valueOf(key), new AbstractContentBody("text/plain") {
public long getContentLength() {
return truncate == -1L ? logtext.getContentLength() : truncate;
@@ -71,7 +86,7 @@
logtext.writeTo(out);
}
else {
- logtext.writeTo(new LimitedOutputStream(out, truncate));
+ logtext.writeTo(new TailOutputStream(out, logtext.getContentLength() - truncate));
}
}
public String getFilename() {
@@ -90,22 +105,6 @@
}
}
- for (int c=0;c<images.length;c++) {
- ScreenShot ss = images[c];
- byte[] data = ss.getEncodedData();
- if (data!=null) {
- // we need to use img0 - img9 for the name of this field as this is what we set up in default.trc
- // upload_img0: gif jpg jpeg png xxx
- // ...
- // upload_img9: gif jpg jpeg png xxx
- requestContent.addPart("img"+c, new ByteArrayBody(data, "frame_"+c+"."+ss.getFileType() ));
- }
- String error = ss.getError();
- if (error!=null) {
- requestContent.addPart("img"+c+"Error", new StringBody( error ));
- }
- }
-
doPost(url, requestContent);
}
Added: Grasshopper/src/net/yura/grasshopper/util/TailOutputStream.java
===================================================================
--- Grasshopper/src/net/yura/grasshopper/util/TailOutputStream.java (rev 0)
+++ Grasshopper/src/net/yura/grasshopper/util/TailOutputStream.java 2024-12-27 16:47:27 UTC (rev 1057)
@@ -0,0 +1,47 @@
+package net.yura.grasshopper.util;
+
+import java.io.FilterOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+public class TailOutputStream extends FilterOutputStream {
+
+ private final long skipBytes;
+ private long bytesWritten;
+
+ public TailOutputStream(OutputStream out, long skipBytes) {
+ super(out);
+ this.skipBytes = skipBytes;
+ }
+
+ public void write(int b) throws IOException {
+ if (skipCapacity(1) == 0) {
+ out.write(b);
+ }
+ }
+
+ public void write(byte[] b) throws IOException {
+ int skip = skipCapacity(b.length);
+ if (skip == 0) {
+ out.write(b);
+ }
+ else {
+ out.write(b, skip, b.length - skip);
+ }
+ }
+
+ public void write(byte[] b, int off, int len) throws IOException {
+ int skip = skipCapacity(len);
+ out.write(b, off + skip, len - skip);
+ }
+
+ private int skipCapacity(int len) throws IOException {
+ long newBytesWritten = bytesWritten + len;
+ if (newBytesWritten > skipBytes) {
+ bytesWritten = skipBytes;
+ return len - (int)(newBytesWritten - bytesWritten);
+ }
+ bytesWritten = newBytesWritten;
+ return len;
+ }
+}
Modified: Grasshopper/test/net/yura/grasshopper/PopupBugTest.java
===================================================================
--- Grasshopper/test/net/yura/grasshopper/PopupBugTest.java 2024-12-27 15:58:33 UTC (rev 1056)
+++ Grasshopper/test/net/yura/grasshopper/PopupBugTest.java 2024-12-27 16:47:27 UTC (rev 1057)
@@ -64,9 +64,9 @@
logger.info("testing 1 " + Thread.currentThread().isInterrupted());
logger.info("testing 2 " + Thread.currentThread().isInterrupted());
logger.info("testing 3 " + Thread.currentThread().isInterrupted());
-
+
Thread.currentThread().interrupt();
-
+
logger.info("testing 4 " + Thread.currentThread().isInterrupted());
logger.info("testing 5 " + Thread.currentThread().isInterrupted());
logger.info("testing 6 " + Thread.currentThread().isInterrupted());
Added: Grasshopper/test/net/yura/grasshopper/util/TailOutputStreamTest.java
===================================================================
--- Grasshopper/test/net/yura/grasshopper/util/TailOutputStreamTest.java (rev 0)
+++ Grasshopper/test/net/yura/grasshopper/util/TailOutputStreamTest.java 2024-12-27 16:47:27 UTC (rev 1057)
@@ -0,0 +1,45 @@
+package net.yura.grasshopper.util;
+
+import java.io.ByteArrayOutputStream;
+import junit.framework.TestCase;
+
+public class TailOutputStreamTest extends TestCase {
+
+ public static void testLimit() throws Exception {
+
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+
+ TailOutputStream lout = new TailOutputStream(bout, 5);
+
+ lout.write('a');
+ lout.write(new byte[] {'b','c'});
+ lout.write(new byte[] {'a','b','c','d','e','f','g','h'}, 3, 3); // f
+
+ lout.write('a');
+ lout.write(new byte[] {'b','c'});
+ lout.write(new byte[] {'a','b','c','d','e','f','g','h'}, 3, 3); // d e f
+
+ lout.close();
+
+ assertEquals("fabcdef", new String(bout.toByteArray()));
+ }
+
+ public static void testLimit2() throws Exception {
+
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+
+ TailOutputStream lout = new TailOutputStream(bout, 5);
+
+ lout.write('a');
+ lout.write(new byte[] {'a','b','c','d','e','f','g','h'}, 1, 2);
+ lout.write(new byte[] {'d','e','f','g'});
+
+ lout.write('a');
+ lout.write(new byte[] {'a','b','c','d','e','f','g','h'}, 1, 2);
+ lout.write(new byte[] {'d','e','f','g'});
+
+ lout.close();
+
+ assertEquals("fgabcdefg", new String(bout.toByteArray()));
+ }
+}
|