Remove Amazon results, per request

This commit is contained in:
Sean Owen 2014-01-21 18:25:06 +00:00
parent a17ea97455
commit 1fa90e7074
2 changed files with 0 additions and 192 deletions

View file

@ -1,177 +0,0 @@
/*
* Copyright 2013 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.zxing.client.android.result.supplement;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Locale;
import android.content.Context;
import android.widget.TextView;
import com.google.zxing.client.android.HttpHelper;
import com.google.zxing.client.android.LocaleManager;
import com.google.zxing.client.android.history.HistoryManager;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
/**
* @author Sean Owen
*/
final class AmazonInfoRetriever extends SupplementalInfoRetriever {
private final String type;
private final String productID;
private final String country;
AmazonInfoRetriever(TextView textView,
String type,
String productID,
HistoryManager historyManager,
Context context) {
super(textView, historyManager);
String country = LocaleManager.getCountry(context);
if ("ISBN".equals(type) && !Locale.US.getCountry().equals(country)) {
type = "EAN";
}
this.type = type;
this.productID = productID;
this.country = country;
}
@Override
void retrieveSupplementalInfo() throws IOException {
boolean success = doRetrieveForCountry(country);
if (!success && !"US".equals(country)) {
// Also show US results to expand scope of results
doRetrieveForCountry("US");
}
}
private boolean doRetrieveForCountry(String theCountry) throws IOException {
CharSequence contents =
HttpHelper.downloadViaHttp("https://bsplus.srowen.com/ss?c=" + theCountry + "&t=" + type + "&i=" + productID,
HttpHelper.ContentType.XML);
String detailPageURL = null;
Collection<String> authors = new ArrayList<>();
String title = null;
String formattedNewPrice = null;
String formattedUsedPrice = null;
boolean error = false;
try {
XmlPullParser xpp = buildParser(contents);
boolean seenItem = false;
boolean seenLowestNewPrice = false;
boolean seenLowestUsedPrice = false;
boolean done = false;
for (int eventType = xpp.getEventType();
!done && eventType != XmlPullParser.END_DOCUMENT;
eventType = xpp.next()) {
if (eventType == XmlPullParser.START_TAG) {
String name = xpp.getName();
switch (name) {
case "Item":
if (seenItem) {
done = true; // terminates loop
} else {
seenItem = true;
}
break;
case "DetailPageURL":
assertTextNext(xpp);
detailPageURL = xpp.getText();
break;
case "Author":
assertTextNext(xpp);
authors.add(xpp.getText());
break;
case "Title":
assertTextNext(xpp);
title = xpp.getText();
break;
case "LowestNewPrice":
seenLowestNewPrice = true;
seenLowestUsedPrice = false;
break;
case "LowestUsedPrice":
seenLowestNewPrice = false;
seenLowestUsedPrice = true;
break;
case "FormattedPrice":
if (seenLowestNewPrice || seenLowestUsedPrice) {
assertTextNext(xpp);
String theText = xpp.getText();
if (seenLowestNewPrice) {
formattedNewPrice = theText;
} else {
formattedUsedPrice = theText;
}
seenLowestNewPrice = false;
seenLowestUsedPrice = false;
}
break;
case "Errors":
error = true;
done = true; // terminates loop
break;
}
}
}
} catch (XmlPullParserException xppe) {
throw new IOException(xppe);
}
if (error || detailPageURL == null) {
return false;
}
Collection<String> newTexts = new ArrayList<>();
maybeAddText(title, newTexts);
maybeAddTextSeries(authors, newTexts);
if (formattedNewPrice != null) {
maybeAddText(formattedNewPrice, newTexts);
} else if (formattedUsedPrice != null) {
maybeAddText(formattedUsedPrice, newTexts);
}
append(productID, "Amazon " + theCountry, newTexts.toArray(new String[newTexts.size()]), detailPageURL);
return true;
}
private static void assertTextNext(XmlPullParser xpp) throws XmlPullParserException, IOException {
if (xpp.next() != XmlPullParser.TEXT) {
throw new IOException();
}
}
private static XmlPullParser buildParser(CharSequence contents) throws XmlPullParserException {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(new StringReader(contents.toString()));
return xpp;
}
}

View file

@ -59,18 +59,6 @@ public abstract class SupplementalInfoRetriever extends AsyncTask<Object,Object,
SupplementalInfoRetriever productRetriever =
new ProductResultInfoRetriever(textView, productID, historyManager, context);
productRetriever.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
switch (productID.length()) {
case 12:
SupplementalInfoRetriever upcInfoRetriever =
new AmazonInfoRetriever(textView, "UPC", normalizedProductID, historyManager, context);
upcInfoRetriever.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
break;
case 13:
SupplementalInfoRetriever eanInfoRetriever =
new AmazonInfoRetriever(textView, "EAN", normalizedProductID, historyManager, context);
eanInfoRetriever.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
break;
}
} else if (result instanceof ISBNParsedResult) {
String isbn = ((ISBNParsedResult) result).getISBN();
SupplementalInfoRetriever productInfoRetriever =
@ -79,9 +67,6 @@ public abstract class SupplementalInfoRetriever extends AsyncTask<Object,Object,
SupplementalInfoRetriever bookInfoRetriever =
new BookResultInfoRetriever(textView, isbn, historyManager, context);
bookInfoRetriever.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
SupplementalInfoRetriever amazonInfoRetriever =
new AmazonInfoRetriever(textView, "ISBN", isbn, historyManager, context);
amazonInfoRetriever.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
}