From 299a6e47898df8b6a7da37a2c54dfd22dc5e282f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johan=20Liese=CC=81n?= Date: Fri, 21 Mar 2014 15:11:31 +0100 Subject: Backup and restore feed list Use the Backup API to backup and restore the list of feed subscriptions, i.e. the OPML file. --- AndroidManifest.xml | 4 + .../danoeh/antennapod/backup/OpmlBackupAgent.java | 211 +++++++++++++++++++++ src/de/danoeh/antennapod/storage/PodDBAdapter.java | 17 +- 3 files changed, 228 insertions(+), 4 deletions(-) create mode 100644 src/de/danoeh/antennapod/backup/OpmlBackupAgent.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 767f7a9b9..d1fe5dad0 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -35,8 +35,12 @@ android:name="de.danoeh.antennapod.PodcastApp" android:icon="@drawable/ic_launcher" android:label="@string/app_name" + android:backupAgent=".backup.OpmlBackupAgent" android:logo="@drawable/ic_launcher" android:theme="@style/Theme.AntennaPod.Light"> + 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); + } + } + } +} diff --git a/src/de/danoeh/antennapod/storage/PodDBAdapter.java b/src/de/danoeh/antennapod/storage/PodDBAdapter.java index 7ccefde94..993d5d23c 100644 --- a/src/de/danoeh/antennapod/storage/PodDBAdapter.java +++ b/src/de/danoeh/antennapod/storage/PodDBAdapter.java @@ -1,5 +1,6 @@ package de.danoeh.antennapod.storage; +import android.app.backup.BackupManager; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; @@ -205,6 +206,8 @@ public class PodDBAdapter { private final Context context; private PodDBHelper helper; + private final BackupManager mBackupManager; + /** * Select all columns from the feed-table */ @@ -317,6 +320,7 @@ public class PodDBAdapter { public PodDBAdapter(Context c) { this.context = c; helper = getDbHelperSingleton(c.getApplicationContext()); + mBackupManager = new BackupManager(context); } public PodDBAdapter open() { @@ -381,11 +385,14 @@ public class PodDBAdapter { if (AppConfig.DEBUG) Log.d(this.toString(), "Inserting new Feed into db"); feed.setId(db.insert(TABLE_NAME_FEEDS, null, values)); + mBackupManager.dataChanged(); } else { if (AppConfig.DEBUG) Log.d(this.toString(), "Updating existing Feed in db"); - db.update(TABLE_NAME_FEEDS, values, KEY_ID + "=?", - new String[]{String.valueOf(feed.getId())}); + if (db.update(TABLE_NAME_FEEDS, values, KEY_ID + "=?", + new String[]{String.valueOf(feed.getId())}) > 0) { + mBackupManager.dataChanged(); + } } return feed.getId(); } @@ -844,8 +851,10 @@ public class PodDBAdapter { removeFeedItem(item); } } - db.delete(TABLE_NAME_FEEDS, KEY_ID + "=?", - new String[]{String.valueOf(feed.getId())}); + if (db.delete(TABLE_NAME_FEEDS, KEY_ID + "=?", + new String[]{String.valueOf(feed.getId())}) > 0) { + mBackupManager.dataChanged(); + } db.setTransactionSuccessful(); db.endTransaction(); } -- cgit v1.2.3 From ffac53f9edbd59a0157284a2c1892c73d5dce79d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johan=20Liese=CC=81n?= Date: Fri, 21 Mar 2014 16:55:06 +0100 Subject: Restore subscriptions when the app is first started Perform a subscription list restore when the app is started for the first time. Use a preference setting to figure out if the app is freshly installed or not. --- res/values/strings.xml | 3 +++ .../danoeh/antennapod/activity/MainActivity.java | 24 ++++++++++++++++++++++ .../antennapod/preferences/UserPreferences.java | 17 +++++++++++++++ 3 files changed, 44 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index 376320ad2..6d36a5c07 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -354,6 +354,9 @@ Number of new episodes Number of episodes you have started listening to + + "Restored feed subscriptions from backup" + Importing subscriptions from single-purpose apps… diff --git a/src/de/danoeh/antennapod/activity/MainActivity.java b/src/de/danoeh/antennapod/activity/MainActivity.java index 9edb312de..8e84f08f8 100644 --- a/src/de/danoeh/antennapod/activity/MainActivity.java +++ b/src/de/danoeh/antennapod/activity/MainActivity.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import android.app.SearchManager; import android.app.SearchableInfo; +import android.app.backup.BackupManager; +import android.app.backup.RestoreObserver; import android.content.Context; import android.content.Intent; import android.media.AudioManager; @@ -22,6 +24,8 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.Window; +import android.widget.Toast; + import de.danoeh.antennapod.AppConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.feed.EventDistributor; @@ -114,6 +118,26 @@ public class MainActivity extends ActionBarActivity { updateProgressBarVisibility(); EventDistributor.getInstance().register(contentUpdate); + // Possibly restore feed subscriptions from backup + if (UserPreferences.isFreshInstall()) { + new BackupManager(this).requestRestore(new BackupRestoreObserver(this)); + UserPreferences.setIsFreshInstall(false); + } + } + + private static class BackupRestoreObserver extends RestoreObserver { + private final Context mContext; + + public BackupRestoreObserver(final Context context) { + mContext = context; + } + + @Override + public void restoreFinished(int error) { + if (error == 0) { + Toast.makeText(mContext, R.string.backup_restored, Toast.LENGTH_SHORT).show(); + } + } } private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() { diff --git a/src/de/danoeh/antennapod/preferences/UserPreferences.java b/src/de/danoeh/antennapod/preferences/UserPreferences.java index 2b4b66362..1ba1b4962 100644 --- a/src/de/danoeh/antennapod/preferences/UserPreferences.java +++ b/src/de/danoeh/antennapod/preferences/UserPreferences.java @@ -50,6 +50,7 @@ public class UserPreferences implements private static final String PREF_PLAYBACK_SPEED = "prefPlaybackSpeed"; private static final String PREF_PLAYBACK_SPEED_ARRAY = "prefPlaybackSpeedArray"; public static final String PREF_PAUSE_PLAYBACK_FOR_FOCUS_LOSS = "prefPauseForFocusLoss"; + private static final String PREF_IS_FRESH_INSTALL = "prefIsFreshInstall"; // TODO: Make this value configurable private static final double PLAYED_DURATION_AUTOFLATTR_THRESHOLD = 0.8; @@ -76,6 +77,7 @@ public class UserPreferences implements private String playbackSpeed; private String[] playbackSpeedArray; private boolean pauseForFocusLoss; + private boolean isFreshInstall; private UserPreferences(Context context) { this.context = context; @@ -130,6 +132,7 @@ public class UserPreferences implements playbackSpeedArray = readPlaybackSpeedArray(sp.getString( PREF_PLAYBACK_SPEED_ARRAY, null)); pauseForFocusLoss = sp.getBoolean(PREF_PAUSE_PLAYBACK_FOR_FOCUS_LOSS, false); + isFreshInstall = sp.getBoolean(PREF_IS_FRESH_INSTALL, true); } private int readThemeValue(String valueFromPrefs) { @@ -284,6 +287,11 @@ public class UserPreferences implements return instance.pauseForFocusLoss; } + public static boolean isFreshInstall() { + instanceAvailable(); + return instance.isFreshInstall; + } + @Override public void onSharedPreferenceChanged(SharedPreferences sp, String key) { if (AppConfig.DEBUG) @@ -334,6 +342,8 @@ public class UserPreferences implements pauseForFocusLoss = sp.getBoolean(PREF_PAUSE_PLAYBACK_FOR_FOCUS_LOSS, false); } else if (key.equals(PREF_PAUSE_ON_HEADSET_DISCONNECT)) { pauseOnHeadsetDisconnect = sp.getBoolean(PREF_PAUSE_ON_HEADSET_DISCONNECT, true); + } else if (key.equals(PREF_IS_FRESH_INSTALL)) { + isFreshInstall = sp.getBoolean(PREF_IS_FRESH_INSTALL, true); } } @@ -526,4 +536,11 @@ public class UserPreferences implements instanceAvailable(); return PLAYED_DURATION_AUTOFLATTR_THRESHOLD; } + + public static void setIsFreshInstall(boolean isFreshInstall) { + instanceAvailable(); + PreferenceManager.getDefaultSharedPreferences(instance.context).edit() + .putBoolean(PREF_IS_FRESH_INSTALL, isFreshInstall) + .apply(); + } } -- cgit v1.2.3 From 238cac93528c2f8748239a9d8f52a27b0017de38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johan=20Liese=CC=81n?= Date: Sun, 23 Mar 2014 19:49:18 +0100 Subject: Allow restore from any AntennaPod version --- AndroidManifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index d1fe5dad0..fa003cf3a 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -36,6 +36,7 @@ android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:backupAgent=".backup.OpmlBackupAgent" + android:restoreAnyVersion="true" android:logo="@drawable/ic_launcher" android:theme="@style/Theme.AntennaPod.Light"> Date: Mon, 24 Mar 2014 20:57:24 +0100 Subject: Restore happens by itself upon app install --- src/de/danoeh/antennapod/activity/MainActivity.java | 21 --------------------- .../antennapod/preferences/UserPreferences.java | 11 ----------- 2 files changed, 32 deletions(-) diff --git a/src/de/danoeh/antennapod/activity/MainActivity.java b/src/de/danoeh/antennapod/activity/MainActivity.java index 8e84f08f8..1637bd53a 100644 --- a/src/de/danoeh/antennapod/activity/MainActivity.java +++ b/src/de/danoeh/antennapod/activity/MainActivity.java @@ -117,27 +117,6 @@ public class MainActivity extends ActionBarActivity { StorageUtils.checkStorageAvailability(this); updateProgressBarVisibility(); EventDistributor.getInstance().register(contentUpdate); - - // Possibly restore feed subscriptions from backup - if (UserPreferences.isFreshInstall()) { - new BackupManager(this).requestRestore(new BackupRestoreObserver(this)); - UserPreferences.setIsFreshInstall(false); - } - } - - private static class BackupRestoreObserver extends RestoreObserver { - private final Context mContext; - - public BackupRestoreObserver(final Context context) { - mContext = context; - } - - @Override - public void restoreFinished(int error) { - if (error == 0) { - Toast.makeText(mContext, R.string.backup_restored, Toast.LENGTH_SHORT).show(); - } - } } private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() { diff --git a/src/de/danoeh/antennapod/preferences/UserPreferences.java b/src/de/danoeh/antennapod/preferences/UserPreferences.java index 1ba1b4962..b45f20af4 100644 --- a/src/de/danoeh/antennapod/preferences/UserPreferences.java +++ b/src/de/danoeh/antennapod/preferences/UserPreferences.java @@ -50,7 +50,6 @@ public class UserPreferences implements private static final String PREF_PLAYBACK_SPEED = "prefPlaybackSpeed"; private static final String PREF_PLAYBACK_SPEED_ARRAY = "prefPlaybackSpeedArray"; public static final String PREF_PAUSE_PLAYBACK_FOR_FOCUS_LOSS = "prefPauseForFocusLoss"; - private static final String PREF_IS_FRESH_INSTALL = "prefIsFreshInstall"; // TODO: Make this value configurable private static final double PLAYED_DURATION_AUTOFLATTR_THRESHOLD = 0.8; @@ -132,7 +131,6 @@ public class UserPreferences implements playbackSpeedArray = readPlaybackSpeedArray(sp.getString( PREF_PLAYBACK_SPEED_ARRAY, null)); pauseForFocusLoss = sp.getBoolean(PREF_PAUSE_PLAYBACK_FOR_FOCUS_LOSS, false); - isFreshInstall = sp.getBoolean(PREF_IS_FRESH_INSTALL, true); } private int readThemeValue(String valueFromPrefs) { @@ -342,8 +340,6 @@ public class UserPreferences implements pauseForFocusLoss = sp.getBoolean(PREF_PAUSE_PLAYBACK_FOR_FOCUS_LOSS, false); } else if (key.equals(PREF_PAUSE_ON_HEADSET_DISCONNECT)) { pauseOnHeadsetDisconnect = sp.getBoolean(PREF_PAUSE_ON_HEADSET_DISCONNECT, true); - } else if (key.equals(PREF_IS_FRESH_INSTALL)) { - isFreshInstall = sp.getBoolean(PREF_IS_FRESH_INSTALL, true); } } @@ -536,11 +532,4 @@ public class UserPreferences implements instanceAvailable(); return PLAYED_DURATION_AUTOFLATTR_THRESHOLD; } - - public static void setIsFreshInstall(boolean isFreshInstall) { - instanceAvailable(); - PreferenceManager.getDefaultSharedPreferences(instance.context).edit() - .putBoolean(PREF_IS_FRESH_INSTALL, isFreshInstall) - .apply(); - } } -- cgit v1.2.3 From a4b78501dc2d32664fbdfdbe617a19defb2f213e Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Mon, 31 Mar 2014 19:47:06 +0200 Subject: Disabled downloading of episode images. closes #390 Uses too much bandwidth --- src/de/danoeh/antennapod/feed/FeedItem.java | 13 ++++++++--- src/de/danoeh/antennapod/feed/FeedMedia.java | 6 ++--- .../service/download/DownloadService.java | 26 ---------------------- 3 files changed, 13 insertions(+), 32 deletions(-) diff --git a/src/de/danoeh/antennapod/feed/FeedItem.java b/src/de/danoeh/antennapod/feed/FeedItem.java index 921a03bff..956131ab2 100644 --- a/src/de/danoeh/antennapod/feed/FeedItem.java +++ b/src/de/danoeh/antennapod/feed/FeedItem.java @@ -280,7 +280,7 @@ public class FeedItem extends FeedComponent implements @Override public InputStream openImageInputStream() { InputStream out = null; - if (hasItemImage()) { + if (hasItemImageDownloaded()) { out = image.openImageInputStream(); } else if (hasMedia()) { out = media.openImageInputStream(); @@ -293,7 +293,7 @@ public class FeedItem extends FeedComponent implements @Override public InputStream reopenImageInputStream(InputStream input) { InputStream out = null; - if (hasItemImage()) { + if (hasItemImageDownloaded()) { out = image.reopenImageInputStream(input); } else if (hasMedia()) { out = media.reopenImageInputStream(input); @@ -306,7 +306,7 @@ public class FeedItem extends FeedComponent implements @Override public String getImageLoaderCacheKey() { String out = null; - if (hasItemImage()) { + if (hasItemImageDownloaded()) { out = image.getImageLoaderCacheKey(); } else if (hasMedia()) { out = media.getImageLoaderCacheKey(); @@ -346,6 +346,13 @@ public class FeedItem extends FeedComponent implements return image != null; } + /** + * Returns true if this FeedItem has its own image and the image has been downloaded. + */ + public boolean hasItemImageDownloaded() { + return image != null && image.isDownloaded(); + } + @Override public String getHumanReadableIdentifier() { return title; diff --git a/src/de/danoeh/antennapod/feed/FeedMedia.java b/src/de/danoeh/antennapod/feed/FeedMedia.java index f38e92398..16bb9cc6a 100644 --- a/src/de/danoeh/antennapod/feed/FeedMedia.java +++ b/src/de/danoeh/antennapod/feed/FeedMedia.java @@ -204,7 +204,7 @@ public class FeedMedia extends FeedFile implements Playable { public FeedImage getImage() { if (item != null) { - return (item.hasItemImage()) ? item.getImage() : item.getFeed().getImage(); + return (item.hasItemImageDownloaded()) ? item.getImage() : item.getFeed().getImage(); } return null; } @@ -384,7 +384,7 @@ public class FeedMedia extends FeedFile implements Playable { @Override public InputStream openImageInputStream() { InputStream out; - if (item.hasItemImage()) { + if (item.hasItemImageDownloaded()) { out = item.openImageInputStream(); } else { out = new Playable.DefaultPlayableImageLoader(this) @@ -401,7 +401,7 @@ public class FeedMedia extends FeedFile implements Playable { @Override public String getImageLoaderCacheKey() { String out; - if (item.hasItemImage()) { + if (item.hasItemImageDownloaded()) { out = item.getImageLoaderCacheKey(); } else { out = new Playable.DefaultPlayableImageLoader(this) diff --git a/src/de/danoeh/antennapod/service/download/DownloadService.java b/src/de/danoeh/antennapod/service/download/DownloadService.java index 72e0852bb..f5883babc 100644 --- a/src/de/danoeh/antennapod/service/download/DownloadService.java +++ b/src/de/danoeh/antennapod/service/download/DownloadService.java @@ -678,32 +678,6 @@ public class DownloadService extends Service { ); } } - // download FeedItem images if provided and not downloaded - for (FeedItem item : savedFeed.getItems()) { - if (item.hasItemImage() && (!item.getImage().isDownloaded())) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Item has image; Downloading...."); - try { - requester.downloadImage(DownloadService.this, - item.getImage()); - } catch (DownloadRequestException e) { - e.printStackTrace(); - DBWriter.addDownloadStatus( - DownloadService.this, - new DownloadStatus( - item.getImage(), - item - .getImage() - .getHumanReadableIdentifier(), - DownloadError.ERROR_REQUEST_ERROR, - false, e.getMessage() - ) - ); - } - } - } - - } catch (SAXException e) { successful = false; e.printStackTrace(); -- cgit v1.2.3 From 05b22955214f1d8447e856a26ba9d5746ff0aab2 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Sun, 6 Apr 2014 19:39:52 +0200 Subject: Changed backup API key Now using key for 'de.danoeh.antennapod' instead of 'de.danoeh.antennapod.debug' --- AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index fa003cf3a..c14d4bfe7 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -41,7 +41,7 @@ android:theme="@style/Theme.AntennaPod.Light"> + android:value="AEdPqrEAAAAI3a05VToCTlqBymJrbFGaKQMvF-bBAuLsOdavBA" /> Date: Sat, 26 Apr 2014 11:30:05 +0200 Subject: Bugfix: Hebrew translation was not displayed --- .tx/config | 2 +- res/values-he-rIL/strings.xml | 329 ------------------------------------------ res/values-iw-rIL/strings.xml | 329 ++++++++++++++++++++++++++++++++++++++++++ res/values-ru/strings.xml | 22 ++- 4 files changed, 348 insertions(+), 334 deletions(-) delete mode 100644 res/values-he-rIL/strings.xml create mode 100644 res/values-iw-rIL/strings.xml diff --git a/.tx/config b/.tx/config index 1bf937efc..e45dcd70c 100644 --- a/.tx/config +++ b/.tx/config @@ -12,7 +12,7 @@ trans.de = res/values-de/strings.xml trans.es = res/values-es/strings.xml trans.es_ES = res/values-es-rES/strings.xml trans.fr = res/values-fr/strings.xml -trans.he_IL = res/values-he-rIL/strings.xml +trans.he_IL = res/values-iw-rIL/strings.xml trans.hi_IN = res/values-hi-rIN/strings.xml trans.it_IT = res/values-it-rIT/strings.xml trans.ko = res/values-ko/strings.xml diff --git a/res/values-he-rIL/strings.xml b/res/values-he-rIL/strings.xml deleted file mode 100644 index af9f546ea..000000000 --- a/res/values-he-rIL/strings.xml +++ /dev/null @@ -1,329 +0,0 @@ - - - - אנטנה-פוד - הזנות - פודקאסטים - פרקים - חדש - רשימת המתנה - הגדרות - הוסף פודקאסט - הורדות - בטל הורדה - יומן הורדות - היסטוריית ניגון - gpodder.net - התחברות אל gpodder.net - - פתח בדפדפן - העתק כתובת אתר - שתף כתובת אתר - כתובת אתרהועתקה ללוח. - - נקה היסטוריה - - אישור - בטל - מחבר - שפה - הגדרות - תמונה - שגיאה - אירעה שגיאה: - רענן - אין אחסון חיצוני זמין. אנא ודא כי אחסון חיצוני הוא מותקן כך שהאפליקציה תוכל לעבוד כמו שצריך. - פרקים - הערות פרק - תיאור - הפרק האחרון:\u0020 - \u0020פרקים - פורסם:\u0020 - אורך:\u0020 - גודל:\u0020 - מעבד - טוען... - תמונה של:\u0020 - שמור שם משתמש וססמה - סגור - נסה שוב - כלול בהורדות אוטומטיות - - כתובת הזנה - הוסף פודקאסט לפי כתובת אתר - מדריכי פודקאסט - - סמן הכל כנקרא - הצג מידע - הסר הזנה - שתף קישור אתר - שתף קישור הזנה - אשר מחיקת הזנה זו ואת כל פרקי ההזנה שהורדת. - הסר הזנה - - הורד - נגן - השהה - הזרם - הסר - סמן כנקרא - סמן כלא נקרא - הוסף לתור - הסר מהתור - בקר באתר - תרום באמצעות Flattr - הכנס לתור הכל - הורד הכל - דלג על הפרק - - הורדה מוצלחת - הורדה נכשלה - הורדה עתידית - הורדה מתבצעת - התקן איחסון לא נמצא - אין די שטח איחסון - שגיאת קובץ - שגיאת מידע HTTP - שגיאה לא ידועה - שגיאת תוכנית ניתוח - סוג ההזנה אינו נתמך - שגיאת חיבור - שרת לא ידוע - שגיאת אימות - בטל את כל ההורדות - הורדה בוטלה - הורדות הושלמו - כתובת אתר שגויה - שגיאת קלט פלט - שגיאת בקשה - שגיאת גישה למסד הנתונים - הורדות נותרוu0020\ - מוריד פודקאסט - %1$d הורדות הצליחו, %2$d ניכשלו - כותרת לא ידועה - הזנה - קובץ מדיה - תמונה - שגיאה אירעה בעת הניסיון הורדת הקובץ:\u0020 - נידרש אימות - המשאב אותה ביקשת דורש שם משתמש וססמה - - שגיאה! - מדיה לא מתנגנת - מתכונן - מוכן - מחפש - שרת מת - שגיאה לא ידועה - מדיה לא מתנגנת - 00:00:00 - ממלא חוצץ - מנגן פודקאסט - הקש כאן לעוד מידע - - הצג יומן - הצג נגן - - נקה תור - סדר תור - בטל - הסר פריט - העבר למעלה - העבר למטה - - כניסה ל-Fattr - לחץ על הכפתור למטה כדי להתחיל את תהליך האימות. אתה תועבר למסך כניסת flattr בדפדפן שלך ותתבקש לתת לאנטנה-פוד רשות לתרום באמצעות flattr. לאחר שקבלת אישור, תוכל לחזור למסך זה באופן אוטומטי. - אימות - חזור למסך הבית - האימות הצליח! עכשיו אתה יכול לתרום באמצעות flattr מתוך האפליקציה. - אסימון flattr לא נמצא - חשבון ה-flattr שלך אינו מחובר לאנטנה-פוד. אתה יכול לקשראת לחשבונך לאנטנה-פוד לתרום באמצעות flattr מתוך האפליקציה או שאתה יכול לבקר באתר האינטרנט של הדבר לו תרצה לתרום. - אמת - הפעולה אסורה - לאנטנה-פוד אין הרשאה לפעולה זו. הסיבה לכך יכולה להיות שאסימון הגישה של אנטנה-פוד לחשבון שלך בוטל. אתה יכול לבצע אימות מחדש או לבקר באתר האינטרנט של הדבר במקום. - גישה בוטלה - אסימון הגישה של אנטנה-פוד לחשבונך בוטל. על מנת להשלים את התהליך, אתה צריך להסיר יישום זה מהרשימת היישומים שאושרו בהגדרות החשבונך באתר flattr. - - תרמת ב-Flattr! - תרמת ב-Flattr %d פעמים! - תרומות Flattr: %s. - כישלון לתרום ב-Flattr %d! - לא נתרם ב-Flattr: %s. - תרומות ב-Flattr מאוחר יותר - תורם ב-Flattr %s - אנטנה-פוד תורם ב-Flattr - אנטנה-פוד תרם ב-Flattr - כישלון תרומת אנטנה-פוד ב-Flattr - איחזור תרומות Flattr - - הורד תוסף - תוסף לא מותקן - לניגון במהירות משתנה תוסף מגורם שלישי צריך להיות מותקן. \n\nהקש על \'הורד תוסף\' להוריד תוסף חינמי מחנות Play\n\nבעיות בשימוש עם תוסף זה אינן באחריות אנטנה-פוד וצריך לדווחן ליוצר התוסף. - מהירויות ניגון - - אין פריטים ברשימה זו. - לא נרשמת עדיין להזנות. - - אחר - אודות - תור - שירותים - Flattr - השהה השמעה בניתוק האוזניות - עבור לפריט הבא בתור כאשר הניגון מסתיים - ניגון - רשת - זמן בין עידכונים - ציין פרק זמן שבו ההזנות עוברות רענון באופן אוטומטי או לבטל ריענון - הורד קבצי מדיה רק דרך חיבור אינטרנט אלחוטי - ניגון מתמשך - הורדת מדיה דרך אינטרנט אלחוטי - ניתוק אוזניות - עידכון דרך רשת סלולרית - אפשר עידכונים דרך רשת סלולרית - מרענן - הגדרות Flattr - כניסה ל-Fattr - היכנס לחשבון שלך לflattr לתרום ישירות מתוך האפליקציה. - תרום באמצעות Flattr לאפליקציה זו - תמוך בפיתוח אנטנה-פוד בתרומה עם Flattr. תודה! - בטל גישה - בטל הרשאת גישה לחשבון flattr ליישום זה. - תרומות Flattr אוטומטיות - תרום לפרקים ש80% מתוכם נוגן - הצג רק פרקים - הצג רק פריטים שלהם פרק. - ממשק משתמש - בחר ערכת נושא - שנה את מראה אנטנה-פוד - הורדה אוטומטית - הגדר הורדה אטומטית של פרקים. - אפשר סינון אינטרנט אלחוטי - אפשר הורדה אוטומטית דרך רשתות אלחוטייות נבחרות. - מטמון פרקים - בהיר - כהה - בלתי מוגבל - שעות - שעה - ידני - כניסה - כנס עם חשבון gpodder.net שלך על מנת לסנכרן את ההרשמות שלך. - התנתקות - ההתנתקות הייתה מוצלחת - שינוי פרטי התחברות - שנה פרטי התחברות של חשבון gpodder.net. - מהירויות ניגון - התאמת המהיריות הזמינות לניגון במהירות משתנה - הגדר שם שרת - השתמש בשרת ברירת מידל - - חפש הזנות או פרקים - נמצא בהערות פרק - נמצא בפרקים - מחפש... - אין תוצאות - תוצאות חיפוש - חיפשת:\u0020 - חיפוש - נמצא בכותרת - - קבצי OPML יאפשרו לכך לנייד פודקאסטים מלוכד פודקאסטים אחד למשנו. - לייבא קובץ OPML, אתה צריך למקם אותו בספרייה הבאה וללחוץ על הכפתור למטה כדי להתחיל את תהליך היבוא. - התחל יבוא - יבוא OPML - שגיאה! - קורא קובץ OPML - אירעה שגיאה בזמן קריאת קובץ OPML: - ספריית היבוא ריקה. - בחר הכל - בטל בחירות - בחר קובץ ליבוא - יצוא OPML - מייצא... - שגיאת יצוא - יצוא OPML הצליח. - קובץ OPML נכתב ל:\u0020 - - קבע טיימר שינה - בטל טיימר שינה - קבע זמן - טיימר שינה - זמן נותר:\u0020 - קלט לא חוקי, זמן חייב להיות מספר שלם - - טוען קטגוריות... - עיין במדריך Miro - או עיין במדריך Miro: - מדריך Miro - חפש במדריך Miro - פופולארי - הדירוג הטוב ביותר - הוסף פודקאסט - הזנה מוספת - - קטגוריות - פודקאסטים בכירים - המלצות - חפש ב-gpodder.net - התחברות - ברוך הבא להתחברות ל-gpodder.net. ראשית, הקלד את פרטי הכניסה שלך: - התחברות - אם אין לך עדיין חשבון, אתה יכול ליצור אחד כאן:\nhttps://gpodder.net/register/ - שם משתמש: - ססמה: - בחירת מכשיר - צור מכשיר חדש לשימוש עבור חשבון gpodder.net או לבחר אחד קיים: - מזהה מכשיר:\u0020 - כותרת - צור מכשיר חדש - בחר מכשיר קיים: - מזהה המכשיר אינו יכול להיות ריק - מזהה המכשיר בשימוש - בחר - התחברות מוצלחת! - מזל טוב! חשבון gpodder.net שלך מקושר כעת עם המכשיר שלך. אנטנה-פוד מעתה יסנכרן באופן אוטומטי הרשמות במכשיר שלך עם חשבון gpodder.net שלך. - התחל סנכרון כעת - עבור למסך הראשי - שגיאת אימות של gpodder.net - שם משתמש או ססמה שגויים - שגיאת סנכרון של gpodder.net - שגיאה במהל סינכרון:\u0020 - - תיקיה נבחרת: - צור תיקיה - בחר תיקיית מידע - צור תיקיה חדשה בשם \"%1$s\"? - תיקיה חדשה נוצרה - לא ניתן לכתוב לתיקה זו - תיקה כבר קיימת - לא ניתן ליצור תיקיה - התיקיה אינה ריקה - התיקייה שבחרת אינה ריקה. הורדות מדיה וקבצים אחרים יהיו ממוקמות ישירות בתיקייה זו. להמשיך בכל זאת? - בחר תיקיית ברירת מחדל - השהה ניגון במקום החלשת עוצמת שמע כשאפליקציה אחרת מנגנת - השהה בזמן הפרעה - - הרשם - נרשם - מוריד... - - הצג פרקים - הצג הערות פרק - הצג תמונה - הרץ לאחור - הרץ קדימה - שמע - וידאו - נווט למעלה - עוד פעולות - הפרק מתנגן - הפרק יורד - הפרק ירד - פריט חדש - הפרק בתור - מספר הפרקים החדשים - מספר הפרקים שהתחלת להאזין להם - - מייבא רישום מאפליקציות יעודיות... - diff --git a/res/values-iw-rIL/strings.xml b/res/values-iw-rIL/strings.xml new file mode 100644 index 000000000..af9f546ea --- /dev/null +++ b/res/values-iw-rIL/strings.xml @@ -0,0 +1,329 @@ + + + + אנטנה-פוד + הזנות + פודקאסטים + פרקים + חדש + רשימת המתנה + הגדרות + הוסף פודקאסט + הורדות + בטל הורדה + יומן הורדות + היסטוריית ניגון + gpodder.net + התחברות אל gpodder.net + + פתח בדפדפן + העתק כתובת אתר + שתף כתובת אתר + כתובת אתרהועתקה ללוח. + + נקה היסטוריה + + אישור + בטל + מחבר + שפה + הגדרות + תמונה + שגיאה + אירעה שגיאה: + רענן + אין אחסון חיצוני זמין. אנא ודא כי אחסון חיצוני הוא מותקן כך שהאפליקציה תוכל לעבוד כמו שצריך. + פרקים + הערות פרק + תיאור + הפרק האחרון:\u0020 + \u0020פרקים + פורסם:\u0020 + אורך:\u0020 + גודל:\u0020 + מעבד + טוען... + תמונה של:\u0020 + שמור שם משתמש וססמה + סגור + נסה שוב + כלול בהורדות אוטומטיות + + כתובת הזנה + הוסף פודקאסט לפי כתובת אתר + מדריכי פודקאסט + + סמן הכל כנקרא + הצג מידע + הסר הזנה + שתף קישור אתר + שתף קישור הזנה + אשר מחיקת הזנה זו ואת כל פרקי ההזנה שהורדת. + הסר הזנה + + הורד + נגן + השהה + הזרם + הסר + סמן כנקרא + סמן כלא נקרא + הוסף לתור + הסר מהתור + בקר באתר + תרום באמצעות Flattr + הכנס לתור הכל + הורד הכל + דלג על הפרק + + הורדה מוצלחת + הורדה נכשלה + הורדה עתידית + הורדה מתבצעת + התקן איחסון לא נמצא + אין די שטח איחסון + שגיאת קובץ + שגיאת מידע HTTP + שגיאה לא ידועה + שגיאת תוכנית ניתוח + סוג ההזנה אינו נתמך + שגיאת חיבור + שרת לא ידוע + שגיאת אימות + בטל את כל ההורדות + הורדה בוטלה + הורדות הושלמו + כתובת אתר שגויה + שגיאת קלט פלט + שגיאת בקשה + שגיאת גישה למסד הנתונים + הורדות נותרוu0020\ + מוריד פודקאסט + %1$d הורדות הצליחו, %2$d ניכשלו + כותרת לא ידועה + הזנה + קובץ מדיה + תמונה + שגיאה אירעה בעת הניסיון הורדת הקובץ:\u0020 + נידרש אימות + המשאב אותה ביקשת דורש שם משתמש וססמה + + שגיאה! + מדיה לא מתנגנת + מתכונן + מוכן + מחפש + שרת מת + שגיאה לא ידועה + מדיה לא מתנגנת + 00:00:00 + ממלא חוצץ + מנגן פודקאסט + הקש כאן לעוד מידע + + הצג יומן + הצג נגן + + נקה תור + סדר תור + בטל + הסר פריט + העבר למעלה + העבר למטה + + כניסה ל-Fattr + לחץ על הכפתור למטה כדי להתחיל את תהליך האימות. אתה תועבר למסך כניסת flattr בדפדפן שלך ותתבקש לתת לאנטנה-פוד רשות לתרום באמצעות flattr. לאחר שקבלת אישור, תוכל לחזור למסך זה באופן אוטומטי. + אימות + חזור למסך הבית + האימות הצליח! עכשיו אתה יכול לתרום באמצעות flattr מתוך האפליקציה. + אסימון flattr לא נמצא + חשבון ה-flattr שלך אינו מחובר לאנטנה-פוד. אתה יכול לקשראת לחשבונך לאנטנה-פוד לתרום באמצעות flattr מתוך האפליקציה או שאתה יכול לבקר באתר האינטרנט של הדבר לו תרצה לתרום. + אמת + הפעולה אסורה + לאנטנה-פוד אין הרשאה לפעולה זו. הסיבה לכך יכולה להיות שאסימון הגישה של אנטנה-פוד לחשבון שלך בוטל. אתה יכול לבצע אימות מחדש או לבקר באתר האינטרנט של הדבר במקום. + גישה בוטלה + אסימון הגישה של אנטנה-פוד לחשבונך בוטל. על מנת להשלים את התהליך, אתה צריך להסיר יישום זה מהרשימת היישומים שאושרו בהגדרות החשבונך באתר flattr. + + תרמת ב-Flattr! + תרמת ב-Flattr %d פעמים! + תרומות Flattr: %s. + כישלון לתרום ב-Flattr %d! + לא נתרם ב-Flattr: %s. + תרומות ב-Flattr מאוחר יותר + תורם ב-Flattr %s + אנטנה-פוד תורם ב-Flattr + אנטנה-פוד תרם ב-Flattr + כישלון תרומת אנטנה-פוד ב-Flattr + איחזור תרומות Flattr + + הורד תוסף + תוסף לא מותקן + לניגון במהירות משתנה תוסף מגורם שלישי צריך להיות מותקן. \n\nהקש על \'הורד תוסף\' להוריד תוסף חינמי מחנות Play\n\nבעיות בשימוש עם תוסף זה אינן באחריות אנטנה-פוד וצריך לדווחן ליוצר התוסף. + מהירויות ניגון + + אין פריטים ברשימה זו. + לא נרשמת עדיין להזנות. + + אחר + אודות + תור + שירותים + Flattr + השהה השמעה בניתוק האוזניות + עבור לפריט הבא בתור כאשר הניגון מסתיים + ניגון + רשת + זמן בין עידכונים + ציין פרק זמן שבו ההזנות עוברות רענון באופן אוטומטי או לבטל ריענון + הורד קבצי מדיה רק דרך חיבור אינטרנט אלחוטי + ניגון מתמשך + הורדת מדיה דרך אינטרנט אלחוטי + ניתוק אוזניות + עידכון דרך רשת סלולרית + אפשר עידכונים דרך רשת סלולרית + מרענן + הגדרות Flattr + כניסה ל-Fattr + היכנס לחשבון שלך לflattr לתרום ישירות מתוך האפליקציה. + תרום באמצעות Flattr לאפליקציה זו + תמוך בפיתוח אנטנה-פוד בתרומה עם Flattr. תודה! + בטל גישה + בטל הרשאת גישה לחשבון flattr ליישום זה. + תרומות Flattr אוטומטיות + תרום לפרקים ש80% מתוכם נוגן + הצג רק פרקים + הצג רק פריטים שלהם פרק. + ממשק משתמש + בחר ערכת נושא + שנה את מראה אנטנה-פוד + הורדה אוטומטית + הגדר הורדה אטומטית של פרקים. + אפשר סינון אינטרנט אלחוטי + אפשר הורדה אוטומטית דרך רשתות אלחוטייות נבחרות. + מטמון פרקים + בהיר + כהה + בלתי מוגבל + שעות + שעה + ידני + כניסה + כנס עם חשבון gpodder.net שלך על מנת לסנכרן את ההרשמות שלך. + התנתקות + ההתנתקות הייתה מוצלחת + שינוי פרטי התחברות + שנה פרטי התחברות של חשבון gpodder.net. + מהירויות ניגון + התאמת המהיריות הזמינות לניגון במהירות משתנה + הגדר שם שרת + השתמש בשרת ברירת מידל + + חפש הזנות או פרקים + נמצא בהערות פרק + נמצא בפרקים + מחפש... + אין תוצאות + תוצאות חיפוש + חיפשת:\u0020 + חיפוש + נמצא בכותרת + + קבצי OPML יאפשרו לכך לנייד פודקאסטים מלוכד פודקאסטים אחד למשנו. + לייבא קובץ OPML, אתה צריך למקם אותו בספרייה הבאה וללחוץ על הכפתור למטה כדי להתחיל את תהליך היבוא. + התחל יבוא + יבוא OPML + שגיאה! + קורא קובץ OPML + אירעה שגיאה בזמן קריאת קובץ OPML: + ספריית היבוא ריקה. + בחר הכל + בטל בחירות + בחר קובץ ליבוא + יצוא OPML + מייצא... + שגיאת יצוא + יצוא OPML הצליח. + קובץ OPML נכתב ל:\u0020 + + קבע טיימר שינה + בטל טיימר שינה + קבע זמן + טיימר שינה + זמן נותר:\u0020 + קלט לא חוקי, זמן חייב להיות מספר שלם + + טוען קטגוריות... + עיין במדריך Miro + או עיין במדריך Miro: + מדריך Miro + חפש במדריך Miro + פופולארי + הדירוג הטוב ביותר + הוסף פודקאסט + הזנה מוספת + + קטגוריות + פודקאסטים בכירים + המלצות + חפש ב-gpodder.net + התחברות + ברוך הבא להתחברות ל-gpodder.net. ראשית, הקלד את פרטי הכניסה שלך: + התחברות + אם אין לך עדיין חשבון, אתה יכול ליצור אחד כאן:\nhttps://gpodder.net/register/ + שם משתמש: + ססמה: + בחירת מכשיר + צור מכשיר חדש לשימוש עבור חשבון gpodder.net או לבחר אחד קיים: + מזהה מכשיר:\u0020 + כותרת + צור מכשיר חדש + בחר מכשיר קיים: + מזהה המכשיר אינו יכול להיות ריק + מזהה המכשיר בשימוש + בחר + התחברות מוצלחת! + מזל טוב! חשבון gpodder.net שלך מקושר כעת עם המכשיר שלך. אנטנה-פוד מעתה יסנכרן באופן אוטומטי הרשמות במכשיר שלך עם חשבון gpodder.net שלך. + התחל סנכרון כעת + עבור למסך הראשי + שגיאת אימות של gpodder.net + שם משתמש או ססמה שגויים + שגיאת סנכרון של gpodder.net + שגיאה במהל סינכרון:\u0020 + + תיקיה נבחרת: + צור תיקיה + בחר תיקיית מידע + צור תיקיה חדשה בשם \"%1$s\"? + תיקיה חדשה נוצרה + לא ניתן לכתוב לתיקה זו + תיקה כבר קיימת + לא ניתן ליצור תיקיה + התיקיה אינה ריקה + התיקייה שבחרת אינה ריקה. הורדות מדיה וקבצים אחרים יהיו ממוקמות ישירות בתיקייה זו. להמשיך בכל זאת? + בחר תיקיית ברירת מחדל + השהה ניגון במקום החלשת עוצמת שמע כשאפליקציה אחרת מנגנת + השהה בזמן הפרעה + + הרשם + נרשם + מוריד... + + הצג פרקים + הצג הערות פרק + הצג תמונה + הרץ לאחור + הרץ קדימה + שמע + וידאו + נווט למעלה + עוד פעולות + הפרק מתנגן + הפרק יורד + הפרק ירד + פריט חדש + הפרק בתור + מספר הפרקים החדשים + מספר הפרקים שהתחלת להאזין להם + + מייבא רישום מאפליקציות יעודיות... + diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 351dd8a1d..d9d091869 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -28,7 +28,7 @@ Автор Язык Настройки - Изображение + Обложка Ошибка Произошла ошибка: Обновить @@ -36,7 +36,7 @@ Разделы Заметки к эпизоду Описание - Следующий эпизод:\u0020 + Последний выпуск:\u0020 \u0020выпуск(ов) Опубликовано:\u0020 Продолжительность:\u0020 @@ -71,7 +71,7 @@ Добавить в очередь Удалить из очереди Посетить сайт - Поддержать посредством Flattr + Поддержать через Flattr Добавить все в очередь Загрузить все Пропустить выпуск @@ -89,6 +89,7 @@ Неподдерживаемый тип канала Ошибка соединения Неизвестный хост + Ошибка авторизации Отменить все загрузки Загрузка отменена Загрузки завершены @@ -104,6 +105,8 @@ Медиа файл Изображение Ошибка при загрузки файла:\u0020 + Необходима авторизация + Для доступа к ресурсу необходимо ввести имя пользователя и пароль Ошибка! Ничего не воспроизводится @@ -141,7 +144,17 @@ Доступ отозван Вы успешно отключили AntennaPod от вашего аккаунта в Flattr. Чтобы завершить этот процесс вам нужно удалить AntennaPod из списка приложений подключенных к вашему аккаунту на сайте Flattr. + Один поддержан через Flattr! + Поддержано через Flattr: %d. Поддержано через Flattr: %s. + Не удалось поддержать через Flattr: %d! + Не поддержано через Flattr: %s. + Будет поддержано через Flattr потом + %s поддерживается через Flattr + AntennaPod поддерживает через Flattr + Вы поддержали AntennaPod через Flattr + Ошибка + Получение списка поддержаного через Flattr Загрузить плагин Плагин не установлен @@ -216,7 +229,7 @@ Найдено в заголовке OPML файлы позволяют перемещать ваши подкасты из одного менеджера подкастов в другой. - Для импорта файла OPML его нужно поместить каталог указанный ниже и нажать кнопку чтобы начать процесс импорта. + Для импорта файла OPML его нужно поместить в указанный каталог и нажать кнопку внизу для запуска импорта. Начать импорт Импорт OPML ОШИБКА! @@ -312,4 +325,5 @@ Количество новых эпизодов Количество начатых эпизодов + Импорт подписок из одноцелевых приложений… -- cgit v1.2.3 From 6672f0106e11a9ef2868826ca0a58b63e46026ba Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Sat, 26 Apr 2014 23:32:45 +0200 Subject: Fixed potential image loading issue of FeedMedia --- src/de/danoeh/antennapod/feed/FeedMedia.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/de/danoeh/antennapod/feed/FeedMedia.java b/src/de/danoeh/antennapod/feed/FeedMedia.java index 16bb9cc6a..1f8e7f8f8 100644 --- a/src/de/danoeh/antennapod/feed/FeedMedia.java +++ b/src/de/danoeh/antennapod/feed/FeedMedia.java @@ -418,7 +418,11 @@ public class FeedMedia extends FeedFile implements Playable { @Override public InputStream reopenImageInputStream(InputStream input) { if (input instanceof FileInputStream) { - return item.getImage().reopenImageInputStream(input); + if (item.hasItemImageDownloaded()) { + return item.getImage().reopenImageInputStream(input); + } else { + return item.getFeed().getImage().reopenImageInputStream(input); + } } else { return new Playable.DefaultPlayableImageLoader(this) .reopenImageInputStream(input); -- cgit v1.2.3 From df55792d27b2753a04c2f545cbfc52a2f72fa9b1 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Sat, 26 Apr 2014 23:51:07 +0200 Subject: Updated dependencies --- build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 8c12c60fd..64727cfc0 100644 --- a/build.gradle +++ b/build.gradle @@ -17,9 +17,9 @@ dependencies { println "Creating libs directory" libsdir.mkdir() } - - compile 'com.android.support:appcompat-v7:19.0.+' - compile 'org.apache.commons:commons-lang3:3.2.1' + compile 'com.android.support:support-v4:19.1.+' + compile 'com.android.support:appcompat-v7:19.1.+' + compile 'org.apache.commons:commons-lang3:3.3.2' compile ('org.shredzone.flattr4j:flattr4j-core:2.8') { exclude group: 'org.apache.httpcomponents', module: 'httpcore' exclude group: 'org.apache.httpcomponents', module: 'httpclient' -- cgit v1.2.3