project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Downloader/DownloadPackage.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Downloader/DownloadPackage.java Thu Nov 24 13:44:30 2011 +0100
@@ -0,0 +1,186 @@
+/*
+ * Hedgewars for Android. An Android port of Hedgewars, a free turn based strategy game
+ * Copyright (c) 2011 Richard Deurwaarder <xeli@xelification.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+package org.hedgewars.hedgeroid.Downloader;
+
+import java.io.IOException;
+
+import org.hedgewars.hedgeroid.Utils;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.preference.PreferenceManager;
+import android.util.Log;
+
+public class DownloadPackage implements Parcelable{
+ private String url_without_suffix;
+ private String pathToStore;
+ private String representation;
+ private String description;
+ private int versionNumber;
+ private final Status status;
+ private int uniqueId;
+
+
+ public DownloadPackage(Parcel src){
+ url_without_suffix = src.readString();
+ pathToStore = src.readString();
+ representation = src.readString();
+ versionNumber = src.readInt();
+ status = Status.values()[src.readInt()];
+ description = src.readString();
+ uniqueId = src.readInt();
+ }
+
+ public DownloadPackage(Context c, String _url_without_suffix, String path, int version, String _representation, String _description, int _uniqueId){
+ url_without_suffix = _url_without_suffix;
+ pathToStore = path;
+ representation = _representation;
+ versionNumber = version;
+ description = _description;
+ uniqueId = _uniqueId;
+
+
+ //determine if the user has already downloaded this version
+ SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(c);
+ int currentVersion = sharedPref.getInt(representation, -1);
+ if(currentVersion == versionNumber) status = Status.CURRENTVERSION;
+ else if (currentVersion < versionNumber) status = Status.NEWERVERSION;
+ else status = Status.OLDERVERSION;
+ }
+
+ public Status getStatus(){
+ return status;
+ }
+
+ public String getURL(){
+ return url_without_suffix;
+ }
+
+ public String getPathToStore(){
+ return pathToStore;
+ }
+
+ public String toString(){
+ return representation;
+ }
+
+ public int describeContents() {
+ return 0;
+ }
+ public int getId(){
+ return uniqueId;
+ }
+
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(url_without_suffix);
+ dest.writeString(pathToStore);
+ dest.writeString(representation);
+ dest.writeInt(versionNumber);
+ dest.writeInt(status.ordinal());
+ dest.writeString(description);
+ }
+
+ public static final Parcelable.Creator<DownloadPackage> CREATOR = new Parcelable.Creator<DownloadPackage>() {
+ public DownloadPackage createFromParcel(Parcel source) {
+ return new DownloadPackage(source);
+ }
+ public DownloadPackage[] newArray(int size) {
+ return new DownloadPackage[size];
+ }
+ };
+
+ /*
+ * We enter with a XmlPullParser.Start_tag with name "task"
+ */
+ public static DownloadPackage getTaskFromXML(Context c, XmlPullParser xmlPuller) throws XmlPullParserException, IOException{
+ String url = null;
+ String path = null;
+ String representation = null;
+ String description = null;
+ int uniqueId = -1;
+ int version = -1;
+
+ int eventType = DownloadPackage.getEventType(xmlPuller);//get the next token, should be a start tag
+ while(eventType != XmlPullParser.END_DOCUMENT){
+ switch(eventType){
+ case XmlPullParser.START_TAG:
+ String name = xmlPuller.getName().toLowerCase();
+ if(DownloadPackage.getEventType(xmlPuller) == XmlPullParser.TEXT){
+ String text = xmlPuller.getText().trim();
+ if(name.equals("url")){
+ url = text;
+ }else if(name.equals("version")){
+ try{
+ version = Integer.parseInt(text);
+ }catch (NumberFormatException e){
+ e.printStackTrace();
+ version = -1;
+ }
+ }else if(name.equals("path")){
+ path = Utils.getDataPath(c) + text;
+ }else if(name.equals("representation")){
+ representation = text;
+ }else if(name.equals("description")){
+ description = text;
+ }else if(name.equals("uniqueid")){
+ try{
+ uniqueId = Integer.parseInt(text);
+ }catch (NumberFormatException e){
+ e.printStackTrace();
+ version = -1;
+ }
+ }
+ }
+ DownloadPackage.getEventType(xmlPuller);//endtag
+ break;
+ case XmlPullParser.END_TAG:
+ if(xmlPuller.getName().toLowerCase().equals("task") && url != null && path != null && version != -1 && representation != null){
+ return new DownloadPackage(c, url, path, version, representation, description, uniqueId);
+ }else{
+ throw new XmlPullParserException("XML download parsing: missing tags");
+ }
+ case XmlPullParser.TEXT:
+ throw new XmlPullParserException("Wrong tag recieved got TEXT : " + xmlPuller.getText());
+ default:
+ throw new XmlPullParserException("Wrong tag recieved got: " + eventType);
+ }
+ eventType = DownloadPackage.getEventType(xmlPuller);
+ }
+ throw new XmlPullParserException("Xml: unexpected endofdocument tag");
+ }
+
+ /**
+ * Skips whitespaces..
+ */
+ private static int getEventType(XmlPullParser xmlPuller)throws XmlPullParserException, IOException{
+ int eventType = xmlPuller.next();
+ while(eventType == XmlPullParser.TEXT && xmlPuller.isWhitespace()){
+ eventType = xmlPuller.next();
+ }
+ return eventType;
+ }
+}
+
+enum Status{
+ CURRENTVERSION, NEWERVERSION, OLDERVERSION;
+}