X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=jarrg-ian.git;a=blobdiff_plain;f=src%2Fcom%2Ftedpearson%2Fypp%2Fmarket%2FMarketUploader.java;h=666ad23f844e01f1478453db2db2d3e2836fdbd5;hp=325d7cc27e133107cf9541142e8848bbceeccb3b;hb=cc270d577ac30ff93d3b6ba942f96a4cfd4c7c3d;hpb=51eeef799e34499922a74027c64622be2cc11a6d
diff --git a/src/com/tedpearson/ypp/market/MarketUploader.java b/src/com/tedpearson/ypp/market/MarketUploader.java
index 325d7cc..666ad23 100644
--- a/src/com/tedpearson/ypp/market/MarketUploader.java
+++ b/src/com/tedpearson/ypp/market/MarketUploader.java
@@ -16,11 +16,10 @@ import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilderFactory;
import org.xml.sax.InputSource;
import java.util.zip.GZIPOutputStream;
-import com.myjavatools.web.ClientHttpRequest;
+import net.chiark.yarrg.ClientHttpRequest;
import java.util.regex.*;
import java.util.prefs.Preferences;
import java.beans.*;
-import com.tedpearson.util.update.*;
/**
* MarketUploader is a class that handles the uploading of market
@@ -46,8 +45,9 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
// Yarrg protocol parameters
private final static String YARRG_CLIENTNAME = "jpctb greenend";
- private final static String YARRG_CLIENTVERSION = "0.1";
- private final static String YARRG_CLIENTFIXES = "";
+ private final static String YARRG_CLIENTVERSION =
+ com.tedpearson.ypp.market.Version.version;
+ private final static String YARRG_CLIENTFIXES = "bug-094";
private final static String YARRG_LIVE_URL = "http://upload.yarrg.chiark.net/commod-update-receiver";
private final static String YARRG_TEST_URL = "http://upload.yarrg.chiark.net/test/commod-update-receiver";
private String YARRG_URL;
@@ -340,6 +340,25 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
JOptionPane.showMessageDialog(frame,msg,"Error",JOptionPane.ERROR_MESSAGE);
}
+ private void error_html(String msg, String html) {
+ //System.err.println("===" + html + "===");
+
+ Pattern body = Pattern.compile("
(.*)", Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
+ Matcher m = body.matcher(html);
+ if (m.find()) {
+ html = m.group(1);
+ Pattern fixup = Pattern.compile("<(\\w+) */>");;
+ m = fixup.matcher(html);
+ html = m.replaceAll("<$1>");
+ m = Pattern.compile("[\\r\\n]+").matcher(html);
+ html = m.replaceAll(" ");
+ }
+ String whole_msg = "
Error
"+msg+"
PCTB Server said:
"+html+"
";
+ //System.err.println("###" + whole_msg + "###");
+
+ JOptionPane.showMessageDialog(frame,whole_msg,"Error",JOptionPane.ERROR_MESSAGE);
+ }
+
/**
* Run the data collection process, and upload the results. This is the method
* that calls most of the other worker methods for the process. If an error occurs,
@@ -381,7 +400,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
ArrayList> data = getData(t);
- if (uploadToYarrg) {
+ if (uploadToYarrg && yarrgts != null) {
pm.setNote("Preparing data for Yarrg");
pm.setProgress(10);
@@ -445,12 +464,13 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
GZIPOutputStream out = new GZIPOutputStream(outStream);
//FileOutputStream out = new FileOutputStream(new File("output.text"));
DataOutputStream dos = new DataOutputStream(out);
- dos.writeBytes("005\n");
+ dos.writeBytes("005y\n");
dos.writeBytes(stallMap.size()+"\n");
dos.writeBytes(getAbbrevStallList(stallMap));
writeBuySellOffers(buys,sells,offerCount,out);
out.finish();
InputStream in = sendInitialData(new ByteArrayInputStream(outStream.toByteArray()));
+ if (in == null) return;
pm.setProgress(80);
if(pm.isCanceled()) {
return;
@@ -597,7 +617,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
//System.out.println(xml);
Reader reader = new CharArrayReader(xml.toCharArray());
Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(reader));
- NodeList maps = d.getElementsByTagName("c");
+ NodeList maps = d.getElementsByTagName("CommodMap");
for(int i=0;i.+?.+?");
m = params.matcher(html);
if(!m.find()) {
- error("The PCTB server returned unusual data. Maybe you're using an old version of the uploader?");
+ error_html("The PCTB server returned unusual data. Maybe you're using an old version of the uploader?",
+ html);
return;
}
action = m.group(1);
@@ -900,30 +934,33 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
filename = m.group(3);
URL get = new URL(PCTB_HOST_URL + "upload.php?topisland=" + topIsland + "&ocean=" + ocean + "&island="
+ islandNum + "&action=" + action + "&forcereload=" + forceReload + "&filename=" + filename);
- // System.out.println(get);
- BufferedReader br2 = new BufferedReader(new InputStreamReader(get.openStream()));
- sb = new StringBuilder();
- while((str = br2.readLine()) != null) {
- sb.append(str+"\n");
- }
+ String complete = readstreamstring(get.openStream());
Pattern done = Pattern.compile("Your data has been integrated into the database. Thank you!");
- m = done.matcher(sb.toString());
+ m = done.matcher(complete);
if(m.find()) {
//System.out.println("FILE upload successful!!!");
} else {
- error("Something was wrong with the final upload parameters!");
- System.err.println(sb.toString());
- System.err.println(html);
+ error_html("Something was wrong with the final upload parameters!", complete);
}
}
+ private InputStream post_for_yarrg(ClientHttpRequest http) throws IOException {
+ if (!http.post()) {
+ String err = readstreamstring(http.resultstream());
+ error("
Error reported by YARRG server
\n" + err);
+ return null;
+ }
+ return http.resultstream();
+ }
+
private String getYarrgTimestamp() throws IOException {
ClientHttpRequest http = new ClientHttpRequest (YARRG_URL);
http.setParameter("clientname", YARRG_CLIENTNAME);
http.setParameter("clientversion", YARRG_CLIENTVERSION);
http.setParameter("clientfixes", YARRG_CLIENTFIXES);
http.setParameter("requesttimestamp", "y");
- InputStream in = http.post();
+ InputStream in = post_for_yarrg(http);
+ if (in == null) return null;
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String tsresult = br.readLine();
return tsresult.substring(3, tsresult.length()-1);
@@ -944,7 +981,8 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
http.setParameter("ocean", ocean);
http.setParameter("island", island);
http.setParameter("data", "deduped.tsv.gz", file, "application/octet-stream");
- InputStream in = http.post();
+ InputStream in = post_for_yarrg(http);
+ if (in == null) return;
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String yarrgresult;
while((yarrgresult = br.readLine()) != null) {