chiark / gitweb /
pctb: use definite island setting like yarrg
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sat, 4 Sep 2010 15:32:07 +0000 (16:32 +0100)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sat, 4 Sep 2010 15:32:07 +0000 (16:32 +0100)
and abolish the hardwired list of ocean numbers (!)

src/com/tedpearson/ypp/market/MarketUploader.java

index 790ecdbac6e7ac66d5c4967c4c21c2dd8cb6290e..4cd16dde3c648005fddd61d364c5e3f12f64ab71 100644 (file)
@@ -62,14 +62,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
 
        private AccessibleContext sidePanel;
        private HashMap<String,Integer> commodMap;
-       private HashMap<String,String> islandNumbers = new HashMap<String,String>();
-       {
-               String[] nums = new String[]
-                       {"","Viridian","Midnight","Hunter","Cobalt","Sage","Ice","Malachite","Crimson","Opal"};
-               for(int i=1;i<nums.length;i++) {
-                       islandNumbers.put(nums[i],""+i);
-               }
-       }
+
        private PropertyChangeListener changeListener = new PropertyChangeListener() {
                public void propertyChange(PropertyChangeEvent e) {
                        if(e.getNewValue() != null && 
@@ -872,85 +865,36 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
        private boolean finishUpload(InputStream in) throws IOException {
                String html = readstreamstring(in);
                //System.out.println(html);
-               String topIsland = "0", ocean, islandNum, action, forceReload, filename;
                Matcher m;
-               Pattern whoIsland = Pattern.compile("<option value=\"\\d+\">" + islandName + ", ([^<]+)</ocean>");
-               m = whoIsland.matcher(html);
-               if(m.find()) {
-                       // the server agrees with us
-                       ocean = islandNumbers.get(m.group(1));
-               } else {
-                       // if the server doesn't agree with us:
-                       Pattern island = Pattern.compile("<option value=\"(\\d+)\">([^,]+), ([^<]+)</ocean>");
-                       m = island.matcher(html);
-                       if(!m.find()) {
-                               // server doesn't know what island. if we do, let's select it.
-                               if(islandName != null && !islandName.equals("")) {
-                                       // find the island name in the list as many times as it occurs
-                                       // if more than once, present a dialog
-                                       // set the ocean, we have the islandname, topIsland = 0
-                                       Pattern myIsland = Pattern.compile("islands\\[(\\d+)\\]\\[\\d+\\]=new Option\\(\"" + islandName +
-                                               "\",\\d+");
-                                       Matcher m1 = myIsland.matcher(html);
-                                       ArrayList<Integer> myOceanNums = new ArrayList<Integer>();
-                                       while(m1.find()) {
-                                               myOceanNums.add(new Integer(m1.group(1)));
-                                       }
-                                       if(myOceanNums.size() > 0) {
-                                               if(myOceanNums.size() > 1) {
-                                                       String[] myOceansList = new String[myOceanNums.size()];
-                                                       int i = 0;
-                                                       for(int myOcean : myOceanNums) {
-                                                               Pattern oceanNumPat = Pattern.compile("<option value=\"\\" + myOcean + "\">([^<]+)</option>");
-                                                               m1 = oceanNumPat.matcher(html);
-                                                               if(m1.find()) {
-                                                                       myOceansList[i++] = m1.group(1);
-                                                               }
-                                                       }
-                                                       Object option = JOptionPane.showInputDialog(null,"We found islands named \"" +
-                                                               islandName +"\" on " + myOceansList.length + " oceans:","Choose Ocean",
-                                                               JOptionPane.QUESTION_MESSAGE, null, myOceansList, null);
-                                                       if(option == null) {
-                                                               error_html("Unable to determine the current island!", html);
-                                                               return false;
-                                                       }
-                                                       ocean = islandNumbers.get(option).toString();
-                                               } else {
-                                                       ocean = myOceanNums.get(0).toString();
-                                               }
-                                       } else {
-                                               error_html("Unknown island or other problem!", html);
-                                               return false;
-                                       }
-                               } else {
-                                       error_html("Unable to determine island name from the client!", html);
-                                       return false;
-                               }
-                       } else {
-                               topIsland = m.group(1);
-                               islandName = m.group(2);
-                               ocean = islandNumbers.get(m.group(3));
-                       }
-               }
-               Pattern oceanIslandNum = Pattern.compile("islands\\[" + ocean + "\\]\\[\\d+\\]=new Option\\(\"" + islandName + "\",(\\d+)");
-               m = oceanIslandNum.matcher(html);
-               if(!m.find()) {
-                       error_html("This does not seem to be a valid island! Unable to upload.", html);
-                       return false;
-               }
-               islandNum = m.group(1);
-               Pattern params = Pattern.compile("(?s)<input type=\"hidden\" name=\"action\" value=\"([^\"]+)\" />.+?<input type=\"hidden\" name=\"forcereload\" value=\"([^\"]+)\" />.+?<input type=\"hidden\" name=\"filename\" value=\"([^\"]+)\" />");
+
+               Pattern params = Pattern.compile("(?s)<input type=\"hidden\" name=\"action\" value=\"setisland\" />.+?<input type=\"hidden\" name=\"forcereload\" value=\"([^\"]+)\" />.+?<input type=\"hidden\" name=\"filename\" value=\"([^\"]+)\" />");
                m = params.matcher(html);
                if(!m.find()) {
                        error_html("The PCTB server returned unusual data. Maybe you're using an old version of the uploader?",
                                   html);
                        return false;
                }
-               action = m.group(1);
-               forceReload = m.group(2);
-               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);
+               String forceReload = m.group(1);
+               String filename = m.group(2);
+
+               Pattern oceanNumPat = Pattern.compile("<option value=\"(\\d+)\">"+oceanName+"</option>");
+               m = oceanNumPat.matcher(html);
+               if (!m.find()) {
+                       error_html("Unable to find the ocean in the server's list of oceans!", html);
+                       return false;
+               }
+               String oceanNum = m.group(1);
+
+               Pattern oceanIslandNum = Pattern.compile("islands\\[" + oceanNum + "\\]\\[\\d+\\]=new Option\\(\"" + islandName + "\",(\\d+)");
+               m = oceanIslandNum.matcher(html);
+               if(!m.find()) {
+                       error_html("This does not seem to be a valid island! Unable to upload.", html);
+                       return false;
+               }
+               String islandNum = m.group(1);
+
+               URL get = new URL(PCTB_HOST_URL + "upload.php?action=setisland&ocean=" + oceanNum + "&island="
+                       + islandNum + "&forcereload=" + forceReload + "&filename=" + filename);
                String complete = readstreamstring(get.openStream());
                Pattern done = Pattern.compile("Your data has been integrated into the database. Thank you!");
                m = done.matcher(complete);