From 072639b5b22e816df9f78b5cd8a7d4e5379b6aff Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Wed, 17 Sep 2014 20:51:45 +0200 Subject: Changed project structure Switched from custom layout to standard gradle project structure --- .../danoeh/antennapod/backup/OpmlBackupAgent.java | 212 --------------------- 1 file changed, 212 deletions(-) delete mode 100644 src/de/danoeh/antennapod/backup/OpmlBackupAgent.java (limited to 'src/de/danoeh/antennapod/backup') diff --git a/src/de/danoeh/antennapod/backup/OpmlBackupAgent.java b/src/de/danoeh/antennapod/backup/OpmlBackupAgent.java deleted file mode 100644 index 56d1ca092..000000000 --- a/src/de/danoeh/antennapod/backup/OpmlBackupAgent.java +++ /dev/null @@ -1,212 +0,0 @@ -package de.danoeh.antennapod.backup; - -import android.app.backup.BackupAgentHelper; -import android.app.backup.BackupDataInputStream; -import android.app.backup.BackupDataOutput; -import android.app.backup.BackupHelper; -import android.content.Context; -import android.os.ParcelFileDescriptor; -import android.util.Log; - -import de.danoeh.antennapod.BuildConfig; -import org.xmlpull.v1.XmlPullParserException; - -import java.io.ByteArrayOutputStream; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.io.Reader; -import java.io.Writer; -import java.math.BigInteger; -import java.security.DigestInputStream; -import java.security.DigestOutputStream; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; - -import de.danoeh.antennapod.AppConfig; -import de.danoeh.antennapod.feed.Feed; -import de.danoeh.antennapod.opml.OpmlElement; -import de.danoeh.antennapod.opml.OpmlReader; -import de.danoeh.antennapod.opml.OpmlWriter; -import de.danoeh.antennapod.storage.DBReader; -import de.danoeh.antennapod.storage.DownloadRequestException; -import de.danoeh.antennapod.storage.DownloadRequester; -import de.danoeh.antennapod.util.LangUtils; - -public class OpmlBackupAgent extends BackupAgentHelper { - private static final String OPML_BACKUP_KEY = "opml"; - - @Override - public void onCreate() { - addHelper(OPML_BACKUP_KEY, new OpmlBackupHelper(this)); - } - - private static final void LOGD(String tag, String msg) { - if (BuildConfig.DEBUG && Log.isLoggable(tag, Log.DEBUG)) { - Log.d(tag, msg); - } - } - - private static final void LOGD(String tag, String msg, Throwable tr) { - if (BuildConfig.DEBUG && Log.isLoggable(tag, Log.DEBUG)) { - Log.d(tag, msg, tr); - } - } - - /** Class for backing up and restoring the OPML file. */ - private static class OpmlBackupHelper implements BackupHelper { - private static final String TAG = "OpmlBackupHelper"; - - private static final String OPML_ENTITY_KEY = "antennapod-feeds.opml"; - - private final Context mContext; - - /** Checksum of restored OPML file */ - private byte[] mChecksum; - - public OpmlBackupHelper(Context context) { - mContext = context; - } - - @Override - public void performBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) { - Log.d(TAG, "Performing backup"); - ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); - MessageDigest digester = null; - Writer writer; - - try { - digester = MessageDigest.getInstance("MD5"); - writer = new OutputStreamWriter(new DigestOutputStream(byteStream, digester), - LangUtils.UTF_8); - } catch (NoSuchAlgorithmException e) { - writer = new OutputStreamWriter(byteStream, LangUtils.UTF_8); - } - - try { - // Write OPML - new OpmlWriter().writeDocument(DBReader.getFeedList(mContext), writer); - - // Compare checksum of new and old file to see if we need to perform a backup at all - if (digester != null) { - byte[] newChecksum = digester.digest(); - LOGD(TAG, "New checksum: " + new BigInteger(1, newChecksum).toString(16)); - - // Get the old checksum - if (oldState != null) { - FileInputStream inState = new FileInputStream(oldState.getFileDescriptor()); - int len = inState.read(); - - if (len != -1) { - byte[] oldChecksum = new byte[len]; - inState.read(oldChecksum); - LOGD(TAG, "Old checksum: " + new BigInteger(1, oldChecksum).toString(16)); - - if (Arrays.equals(oldChecksum, newChecksum)) { - LOGD(TAG, "Checksums are the same; won't backup"); - return; - } - } - } - - writeNewStateDescription(newState, newChecksum); - } - - LOGD(TAG, "Backing up OPML"); - byte[] bytes = byteStream.toByteArray(); - data.writeEntityHeader(OPML_ENTITY_KEY, bytes.length); - data.writeEntityData(bytes, bytes.length); - } catch (IOException e) { - Log.e(TAG, "Error during backup", e); - } finally { - if (writer != null) { - try { - writer.close(); - } catch (IOException e) { - } - } - } - } - - @Override - public void restoreEntity(BackupDataInputStream data) { - LOGD(TAG, "Backup restore"); - - if (!OPML_ENTITY_KEY.equals(data.getKey())) { - LOGD(TAG, "Unknown entity key: " + data.getKey()); - return; - } - - MessageDigest digester = null; - Reader reader; - - try { - digester = MessageDigest.getInstance("MD5"); - reader = new InputStreamReader(new DigestInputStream(data, digester), - LangUtils.UTF_8); - } catch (NoSuchAlgorithmException e) { - reader = new InputStreamReader(data, LangUtils.UTF_8); - } - - try { - ArrayList opmlElements = new OpmlReader().readDocument(reader); - mChecksum = digester == null ? null : digester.digest(); - DownloadRequester downloader = DownloadRequester.getInstance(); - Date lastUpdated = new Date(); - - for (OpmlElement opmlElem : opmlElements) { - Feed feed = new Feed(opmlElem.getXmlUrl(), lastUpdated, opmlElem.getText()); - - try { - downloader.downloadFeed(mContext, feed); - } catch (DownloadRequestException e) { - LOGD(TAG, "Error while restoring/downloading feed", e); - } - } - } catch (XmlPullParserException e) { - Log.e(TAG, "Error while parsing the OPML file", e); - } catch (IOException e) { - Log.e(TAG, "Failed to restore OPML backup", e); - } finally { - if (reader != null) { - try { - reader.close(); - } catch (IOException e) { - } - } - } - } - - @Override - public void writeNewStateDescription(ParcelFileDescriptor newState) { - writeNewStateDescription(newState, mChecksum); - } - - /** - * Writes the new state description, which is the checksum of the OPML file. - * - * @param newState - * @param checksum - */ - private void writeNewStateDescription(ParcelFileDescriptor newState, byte[] checksum) { - if (checksum == null) { - return; - } - - try { - FileOutputStream outState = new FileOutputStream(newState.getFileDescriptor()); - outState.write(checksum.length); - outState.write(checksum); - outState.flush(); - outState.close(); - } catch (IOException e) { - Log.e(TAG, "Failed to write new state description", e); - } - } - } -} -- cgit v1.2.3