Move download service to module (#7041)
This commit is contained in:
parent
6f3a9b1676
commit
2fd73b148d
|
@ -68,7 +68,10 @@ dependencies {
|
||||||
implementation project(':net:common')
|
implementation project(':net:common')
|
||||||
implementation project(':net:discovery')
|
implementation project(':net:discovery')
|
||||||
implementation project(':net:download:service-interface')
|
implementation project(':net:download:service-interface')
|
||||||
|
implementation project(':net:download:service')
|
||||||
|
implementation project(':net:ssl')
|
||||||
implementation project(':net:sync:gpoddernet')
|
implementation project(':net:sync:gpoddernet')
|
||||||
|
implementation project(':net:sync:service')
|
||||||
implementation project(':net:sync:model')
|
implementation project(':net:sync:model')
|
||||||
implementation project(':parser:feed')
|
implementation project(':parser:feed')
|
||||||
implementation project(':playback:base')
|
implementation project(':playback:base')
|
||||||
|
@ -83,6 +86,7 @@ dependencies {
|
||||||
implementation project(':ui:episodes')
|
implementation project(':ui:episodes')
|
||||||
implementation project(':ui:glide')
|
implementation project(':ui:glide')
|
||||||
implementation project(':ui:i18n')
|
implementation project(':ui:i18n')
|
||||||
|
implementation project(':ui:notifications')
|
||||||
implementation project(':ui:widget')
|
implementation project(':ui:widget')
|
||||||
implementation project(':ui:preferences')
|
implementation project(':ui:preferences')
|
||||||
implementation project(':ui:statistics')
|
implementation project(':ui:statistics')
|
||||||
|
|
|
@ -8,11 +8,11 @@ import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import de.danoeh.antennapod.model.feed.Feed;
|
import de.danoeh.antennapod.model.feed.Feed;
|
||||||
|
import de.danoeh.antennapod.net.download.service.feed.remote.Downloader;
|
||||||
|
import de.danoeh.antennapod.net.download.service.feed.remote.HttpDownloader;
|
||||||
import de.danoeh.antennapod.storage.preferences.UserPreferences;
|
import de.danoeh.antennapod.storage.preferences.UserPreferences;
|
||||||
import de.danoeh.antennapod.model.download.DownloadRequest;
|
import de.danoeh.antennapod.model.download.DownloadRequest;
|
||||||
import de.danoeh.antennapod.model.download.DownloadResult;
|
import de.danoeh.antennapod.model.download.DownloadResult;
|
||||||
import de.danoeh.antennapod.core.service.download.Downloader;
|
|
||||||
import de.danoeh.antennapod.core.service.download.HttpDownloader;
|
|
||||||
import de.danoeh.antennapod.model.download.DownloadError;
|
import de.danoeh.antennapod.model.download.DownloadError;
|
||||||
import de.test.antennapod.util.service.download.HTTPBin;
|
import de.test.antennapod.util.service.download.HTTPBin;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:roundIcon="@mipmap/ic_launcher"
|
android:roundIcon="@mipmap/ic_launcher"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:backupAgent=".core.backup.OpmlBackupAgent"
|
android:backupAgent=".storage.importexport.OpmlBackupAgent"
|
||||||
android:restoreAnyVersion="true"
|
android:restoreAnyVersion="true"
|
||||||
android:theme="@style/Theme.AntennaPod.Splash"
|
android:theme="@style/Theme.AntennaPod.Splash"
|
||||||
android:usesCleartextTraffic="true"
|
android:usesCleartextTraffic="true"
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
package de.danoeh.antennapod.core;
|
package de.danoeh.antennapod;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import de.danoeh.antennapod.core.storage.AutoDownloadManagerImpl;
|
import de.danoeh.antennapod.core.storage.AutoDownloadManagerImpl;
|
||||||
import de.danoeh.antennapod.core.util.download.FeedUpdateManagerImpl;
|
import de.danoeh.antennapod.net.download.service.feed.FeedUpdateManagerImpl;
|
||||||
import de.danoeh.antennapod.net.download.serviceinterface.AutoDownloadManager;
|
import de.danoeh.antennapod.net.download.serviceinterface.AutoDownloadManager;
|
||||||
import de.danoeh.antennapod.net.download.serviceinterface.FeedUpdateManager;
|
import de.danoeh.antennapod.net.download.serviceinterface.FeedUpdateManager;
|
||||||
import de.danoeh.antennapod.net.sync.service.SyncService;
|
import de.danoeh.antennapod.net.sync.service.SyncService;
|
||||||
|
@ -18,7 +18,7 @@ import de.danoeh.antennapod.net.common.UserAgentInterceptor;
|
||||||
import de.danoeh.antennapod.storage.preferences.UserPreferences;
|
import de.danoeh.antennapod.storage.preferences.UserPreferences;
|
||||||
import de.danoeh.antennapod.net.common.AntennapodHttpClient;
|
import de.danoeh.antennapod.net.common.AntennapodHttpClient;
|
||||||
import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterface;
|
import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterface;
|
||||||
import de.danoeh.antennapod.core.service.download.DownloadServiceInterfaceImpl;
|
import de.danoeh.antennapod.net.download.service.feed.DownloadServiceInterfaceImpl;
|
||||||
import de.danoeh.antennapod.net.common.NetworkUtils;
|
import de.danoeh.antennapod.net.common.NetworkUtils;
|
||||||
import de.danoeh.antennapod.core.util.download.NetworkConnectionChangeHandler;
|
import de.danoeh.antennapod.core.util.download.NetworkConnectionChangeHandler;
|
||||||
import de.danoeh.antennapod.net.ssl.SslProviderInstaller;
|
import de.danoeh.antennapod.net.ssl.SslProviderInstaller;
|
|
@ -6,7 +6,6 @@ import android.os.StrictMode;
|
||||||
import com.google.android.material.color.DynamicColors;
|
import com.google.android.material.color.DynamicColors;
|
||||||
|
|
||||||
import de.danoeh.antennapod.core.ApCoreEventBusIndex;
|
import de.danoeh.antennapod.core.ApCoreEventBusIndex;
|
||||||
import de.danoeh.antennapod.core.ClientConfigurator;
|
|
||||||
import de.danoeh.antennapod.error.CrashReportWriter;
|
import de.danoeh.antennapod.error.CrashReportWriter;
|
||||||
import de.danoeh.antennapod.error.RxJavaErrorHandlerSetup;
|
import de.danoeh.antennapod.error.RxJavaErrorHandlerSetup;
|
||||||
import de.danoeh.antennapod.preferences.PreferenceUpgrader;
|
import de.danoeh.antennapod.preferences.PreferenceUpgrader;
|
||||||
|
|
|
@ -35,7 +35,7 @@ import com.google.android.material.appbar.MaterialToolbar;
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior;
|
import com.google.android.material.bottomsheet.BottomSheetBehavior;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.core.util.download.FeedUpdateManagerImpl;
|
import de.danoeh.antennapod.net.download.service.feed.FeedUpdateManagerImpl;
|
||||||
import de.danoeh.antennapod.net.download.serviceinterface.FeedUpdateManager;
|
import de.danoeh.antennapod.net.download.serviceinterface.FeedUpdateManager;
|
||||||
import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationQueueSink;
|
import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationQueueSink;
|
||||||
import de.danoeh.antennapod.ui.appstartintent.MediaButtonStarter;
|
import de.danoeh.antennapod.ui.appstartintent.MediaButtonStarter;
|
||||||
|
|
|
@ -28,9 +28,11 @@ import com.google.android.material.snackbar.Snackbar;
|
||||||
|
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.adapter.FeedItemlistDescriptionAdapter;
|
import de.danoeh.antennapod.adapter.FeedItemlistDescriptionAdapter;
|
||||||
|
import de.danoeh.antennapod.net.download.service.feed.remote.Downloader;
|
||||||
|
import de.danoeh.antennapod.net.download.service.feed.remote.HttpDownloader;
|
||||||
import de.danoeh.antennapod.ui.appstartintent.MainActivityStarter;
|
import de.danoeh.antennapod.ui.appstartintent.MainActivityStarter;
|
||||||
import de.danoeh.antennapod.ui.common.ThemeSwitcher;
|
import de.danoeh.antennapod.ui.common.ThemeSwitcher;
|
||||||
import de.danoeh.antennapod.core.service.download.DownloadRequestCreator;
|
import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequestCreator;
|
||||||
import de.danoeh.antennapod.net.discovery.FeedUrlNotFoundException;
|
import de.danoeh.antennapod.net.discovery.FeedUrlNotFoundException;
|
||||||
import de.danoeh.antennapod.storage.database.FeedDatabaseWriter;
|
import de.danoeh.antennapod.storage.database.FeedDatabaseWriter;
|
||||||
import de.danoeh.antennapod.core.service.playback.PlaybackServiceInterface;
|
import de.danoeh.antennapod.core.service.playback.PlaybackServiceInterface;
|
||||||
|
@ -45,8 +47,6 @@ import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterfa
|
||||||
import de.danoeh.antennapod.storage.preferences.UserPreferences;
|
import de.danoeh.antennapod.storage.preferences.UserPreferences;
|
||||||
import de.danoeh.antennapod.model.download.DownloadRequest;
|
import de.danoeh.antennapod.model.download.DownloadRequest;
|
||||||
import de.danoeh.antennapod.model.download.DownloadResult;
|
import de.danoeh.antennapod.model.download.DownloadResult;
|
||||||
import de.danoeh.antennapod.core.service.download.Downloader;
|
|
||||||
import de.danoeh.antennapod.core.service.download.HttpDownloader;
|
|
||||||
import de.danoeh.antennapod.storage.database.DBReader;
|
import de.danoeh.antennapod.storage.database.DBReader;
|
||||||
import de.danoeh.antennapod.storage.database.DBWriter;
|
import de.danoeh.antennapod.storage.database.DBWriter;
|
||||||
import de.danoeh.antennapod.net.discovery.CombinedSearcher;
|
import de.danoeh.antennapod.net.discovery.CombinedSearcher;
|
||||||
|
|
|
@ -7,7 +7,7 @@ import android.net.ConnectivityManager;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import de.danoeh.antennapod.core.ClientConfigurator;
|
import de.danoeh.antennapod.ClientConfigurator;
|
||||||
import de.danoeh.antennapod.core.util.download.NetworkConnectionChangeHandler;
|
import de.danoeh.antennapod.core.util.download.NetworkConnectionChangeHandler;
|
||||||
|
|
||||||
public class ConnectivityActionReceiver extends BroadcastReceiver {
|
public class ConnectivityActionReceiver extends BroadcastReceiver {
|
||||||
|
|
|
@ -5,7 +5,7 @@ import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import de.danoeh.antennapod.core.ClientConfigurator;
|
import de.danoeh.antennapod.ClientConfigurator;
|
||||||
import de.danoeh.antennapod.net.download.serviceinterface.AutoDownloadManager;
|
import de.danoeh.antennapod.net.download.serviceinterface.AutoDownloadManager;
|
||||||
import de.danoeh.antennapod.storage.preferences.UserPreferences;
|
import de.danoeh.antennapod.storage.preferences.UserPreferences;
|
||||||
import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterface;
|
import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterface;
|
||||||
|
|
|
@ -11,7 +11,7 @@ import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.core.ClientConfigurator;
|
import de.danoeh.antennapod.ClientConfigurator;
|
||||||
import de.danoeh.antennapod.net.download.serviceinterface.FeedUpdateManager;
|
import de.danoeh.antennapod.net.download.serviceinterface.FeedUpdateManager;
|
||||||
import de.danoeh.antennapod.storage.database.FeedDatabaseWriter;
|
import de.danoeh.antennapod.storage.database.FeedDatabaseWriter;
|
||||||
import de.danoeh.antennapod.model.feed.Feed;
|
import de.danoeh.antennapod.model.feed.Feed;
|
||||||
|
|
|
@ -27,22 +27,16 @@ dependencies {
|
||||||
implementation project(':model')
|
implementation project(':model')
|
||||||
implementation project(':net:common')
|
implementation project(':net:common')
|
||||||
implementation project(':net:download:service-interface')
|
implementation project(':net:download:service-interface')
|
||||||
implementation project(':net:ssl')
|
|
||||||
implementation project(':net:sync:gpoddernet')
|
|
||||||
implementation project(':net:sync:model')
|
|
||||||
implementation project(':net:sync:service')
|
|
||||||
implementation project(':net:sync:service-interface')
|
implementation project(':net:sync:service-interface')
|
||||||
implementation project(':parser:feed')
|
implementation project(':parser:feed')
|
||||||
implementation project(':parser:media')
|
implementation project(':parser:media')
|
||||||
implementation project(':playback:base')
|
implementation project(':playback:base')
|
||||||
implementation project(':playback:cast')
|
implementation project(':playback:cast')
|
||||||
implementation project(':storage:database')
|
implementation project(':storage:database')
|
||||||
implementation project(':storage:importexport')
|
|
||||||
implementation project(':storage:preferences')
|
implementation project(':storage:preferences')
|
||||||
implementation project(':ui:app-start-intent')
|
implementation project(':ui:app-start-intent')
|
||||||
implementation project(':ui:common')
|
implementation project(':ui:common')
|
||||||
implementation project(':ui:episodes')
|
implementation project(':ui:episodes')
|
||||||
implementation project(':ui:i18n')
|
|
||||||
implementation project(':ui:notifications')
|
implementation project(':ui:notifications')
|
||||||
implementation project(':ui:widget')
|
implementation project(':ui:widget')
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import de.danoeh.antennapod.core.ClientConfigurator;
|
|
||||||
import de.danoeh.antennapod.net.download.serviceinterface.FeedUpdateManager;
|
import de.danoeh.antennapod.net.download.serviceinterface.FeedUpdateManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -18,8 +17,6 @@ public class FeedUpdateReceiver extends BroadcastReceiver {
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
Log.d(TAG, "Received intent");
|
Log.d(TAG, "Received intent");
|
||||||
ClientConfigurator.initialize(context);
|
|
||||||
|
|
||||||
FeedUpdateManager.getInstance().runOnce(context);
|
FeedUpdateManager.getInstance().runOnce(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,6 @@ import androidx.core.content.ContextCompat;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
|
|
||||||
import de.danoeh.antennapod.core.ClientConfigurator;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Receives media button events.
|
* Receives media button events.
|
||||||
*/
|
*/
|
||||||
|
@ -30,7 +28,6 @@ public class MediaButtonReceiver extends BroadcastReceiver {
|
||||||
}
|
}
|
||||||
KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
|
KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
|
||||||
if (event != null && event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) {
|
if (event != null && event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) {
|
||||||
ClientConfigurator.initialize(context);
|
|
||||||
Intent serviceIntent = new Intent(PLAYBACK_SERVICE_INTENT);
|
Intent serviceIntent = new Intent(PLAYBACK_SERVICE_INTENT);
|
||||||
serviceIntent.setPackage(context.getPackageName());
|
serviceIntent.setPackage(context.getPackageName());
|
||||||
serviceIntent.putExtra(EXTRA_KEYCODE, event.getKeyCode());
|
serviceIntent.putExtra(EXTRA_KEYCODE, event.getKeyCode());
|
||||||
|
|
|
@ -16,10 +16,6 @@
|
||||||
<item name="view_type_episode_item" type="id"/>
|
<item name="view_type_episode_item" type="id"/>
|
||||||
|
|
||||||
<!-- Notifications need unique IDs to update/cancel them -->
|
<!-- Notifications need unique IDs to update/cancel them -->
|
||||||
<item name="notification_downloading" type="id"/>
|
|
||||||
<item name="notification_updating_feeds" type="id"/>
|
|
||||||
<item name="notification_download_report" type="id"/>
|
|
||||||
<item name="notification_auto_download_report" type="id"/>
|
|
||||||
<item name="notification_playing" type="id"/>
|
<item name="notification_playing" type="id"/>
|
||||||
<item name="notification_streaming_confirmation" type="id"/>
|
<item name="notification_streaming_confirmation" type="id"/>
|
||||||
</resources>
|
</resources>
|
|
@ -5,6 +5,7 @@ import android.text.TextUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
|
import de.danoeh.antennapod.net.download.serviceinterface.FileNameGenerator;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
|
|
@ -16,8 +16,11 @@ android {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation project(':model')
|
implementation project(':model')
|
||||||
implementation project(':net:common')
|
implementation project(':net:common')
|
||||||
|
implementation project(':storage:preferences')
|
||||||
|
|
||||||
annotationProcessor "androidx.annotation:annotation:$annotationVersion"
|
annotationProcessor "androidx.annotation:annotation:$annotationVersion"
|
||||||
|
implementation "org.apache.commons:commons-lang3:$commonslangVersion"
|
||||||
|
implementation "commons-io:commons-io:$commonsioVersion"
|
||||||
|
|
||||||
testImplementation "junit:junit:$junitVersion"
|
testImplementation "junit:junit:$junitVersion"
|
||||||
testImplementation "org.robolectric:robolectric:$robolectricVersion"
|
testImplementation "org.robolectric:robolectric:$robolectricVersion"
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
package de.danoeh.antennapod.core.service.download;
|
package de.danoeh.antennapod.net.download.serviceinterface;
|
||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.webkit.URLUtil;
|
import android.webkit.URLUtil;
|
||||||
import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequestBuilder;
|
|
||||||
import de.danoeh.antennapod.storage.preferences.UserPreferences;
|
|
||||||
import de.danoeh.antennapod.core.util.FileNameGenerator;
|
|
||||||
import de.danoeh.antennapod.model.feed.Feed;
|
import de.danoeh.antennapod.model.feed.Feed;
|
||||||
import de.danoeh.antennapod.model.feed.FeedMedia;
|
import de.danoeh.antennapod.model.feed.FeedMedia;
|
||||||
|
import de.danoeh.antennapod.storage.preferences.UserPreferences;
|
||||||
import org.apache.commons.io.FilenameUtils;
|
import org.apache.commons.io.FilenameUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -22,7 +20,8 @@ public class DownloadRequestCreator {
|
||||||
public static DownloadRequestBuilder create(Feed feed) {
|
public static DownloadRequestBuilder create(Feed feed) {
|
||||||
File dest = new File(getFeedfilePath(), getFeedfileName(feed));
|
File dest = new File(getFeedfilePath(), getFeedfileName(feed));
|
||||||
if (dest.exists()) {
|
if (dest.exists()) {
|
||||||
dest.delete();
|
boolean deleted = dest.delete();
|
||||||
|
Log.d(TAG, "deleted" + dest.getPath() + ": " + deleted);
|
||||||
}
|
}
|
||||||
Log.d(TAG, "Requesting download of url " + feed.getDownloadUrl());
|
Log.d(TAG, "Requesting download of url " + feed.getDownloadUrl());
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package de.danoeh.antennapod.core.util;
|
package de.danoeh.antennapod.net.download.serviceinterface;
|
||||||
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
# :net:download:service
|
||||||
|
|
||||||
|
The download service.
|
|
@ -0,0 +1,47 @@
|
||||||
|
plugins {
|
||||||
|
id("com.android.library")
|
||||||
|
id("java-test-fixtures")
|
||||||
|
}
|
||||||
|
apply from: "../../../common.gradle"
|
||||||
|
apply from: "../../../playFlavor.gradle"
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace "de.danoeh.antennapod.net.download.service"
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation project(":core")
|
||||||
|
implementation project(':event')
|
||||||
|
implementation project(':model')
|
||||||
|
implementation project(':net:common')
|
||||||
|
implementation project(':net:download:service-interface')
|
||||||
|
implementation project(':net:sync:model')
|
||||||
|
implementation project(':net:sync:service-interface')
|
||||||
|
implementation project(':parser:media')
|
||||||
|
implementation project(':parser:feed')
|
||||||
|
implementation project(':storage:database')
|
||||||
|
implementation project(':ui:notifications')
|
||||||
|
implementation project(':storage:preferences')
|
||||||
|
implementation project(':ui:app-start-intent')
|
||||||
|
|
||||||
|
annotationProcessor "androidx.annotation:annotation:$annotationVersion"
|
||||||
|
implementation "androidx.core:core:$coreVersion"
|
||||||
|
implementation 'androidx.documentfile:documentfile:1.0.1'
|
||||||
|
implementation "androidx.work:work-runtime:$workManagerVersion"
|
||||||
|
implementation "com.google.android.material:material:$googleMaterialVersion"
|
||||||
|
|
||||||
|
implementation "com.squareup.okhttp3:okhttp:$okhttpVersion"
|
||||||
|
implementation "com.squareup.okhttp3:okhttp-urlconnection:$okhttpVersion"
|
||||||
|
implementation "commons-io:commons-io:$commonsioVersion"
|
||||||
|
implementation "org.apache.commons:commons-lang3:$commonslangVersion"
|
||||||
|
implementation "org.greenrobot:eventbus:$eventbusVersion"
|
||||||
|
implementation "com.github.bumptech.glide:glide:$glideVersion"
|
||||||
|
implementation "io.reactivex.rxjava2:rxandroid:$rxAndroidVersion"
|
||||||
|
implementation "io.reactivex.rxjava2:rxjava:$rxJavaVersion"
|
||||||
|
implementation "com.google.guava:guava:31.0.1-android"
|
||||||
|
|
||||||
|
testImplementation "junit:junit:$junitVersion"
|
||||||
|
testImplementation "org.robolectric:robolectric:$robolectricVersion"
|
||||||
|
testImplementation "org.awaitility:awaitility:$awaitilityVersion"
|
||||||
|
testImplementation 'org.mockito:mockito-core:5.11.0'
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||||
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||||
|
</manifest>
|
|
@ -1,4 +1,4 @@
|
||||||
package de.danoeh.antennapod.core.service.download;
|
package de.danoeh.antennapod.net.download.service.episode;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.app.Notification;
|
import android.app.Notification;
|
||||||
|
@ -19,9 +19,10 @@ import androidx.work.Worker;
|
||||||
import androidx.work.WorkerParameters;
|
import androidx.work.WorkerParameters;
|
||||||
import com.google.common.util.concurrent.Futures;
|
import com.google.common.util.concurrent.Futures;
|
||||||
import com.google.common.util.concurrent.ListenableFuture;
|
import com.google.common.util.concurrent.ListenableFuture;
|
||||||
import de.danoeh.antennapod.core.ClientConfigurator;
|
import de.danoeh.antennapod.net.download.service.R;
|
||||||
import de.danoeh.antennapod.core.R;
|
import de.danoeh.antennapod.net.download.service.feed.remote.DefaultDownloaderFactory;
|
||||||
import de.danoeh.antennapod.core.service.download.handler.MediaDownloadedHandler;
|
import de.danoeh.antennapod.net.download.service.feed.remote.Downloader;
|
||||||
|
import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequestCreator;
|
||||||
import de.danoeh.antennapod.storage.database.DBReader;
|
import de.danoeh.antennapod.storage.database.DBReader;
|
||||||
import de.danoeh.antennapod.storage.database.DBWriter;
|
import de.danoeh.antennapod.storage.database.DBWriter;
|
||||||
import de.danoeh.antennapod.event.MessageEvent;
|
import de.danoeh.antennapod.event.MessageEvent;
|
||||||
|
@ -55,7 +56,6 @@ public class EpisodeDownloadWorker extends Worker {
|
||||||
@Override
|
@Override
|
||||||
@NonNull
|
@NonNull
|
||||||
public Result doWork() {
|
public Result doWork() {
|
||||||
ClientConfigurator.initialize(getApplicationContext());
|
|
||||||
long mediaId = getInputData().getLong(DownloadServiceInterface.WORK_DATA_MEDIA_ID, 0);
|
long mediaId = getInputData().getLong(DownloadServiceInterface.WORK_DATA_MEDIA_ID, 0);
|
||||||
FeedMedia media = DBReader.getFeedMedia(mediaId);
|
FeedMedia media = DBReader.getFeedMedia(mediaId);
|
||||||
if (media == null) {
|
if (media == null) {
|
|
@ -1,4 +1,4 @@
|
||||||
package de.danoeh.antennapod.core.service.download.handler;
|
package de.danoeh.antennapod.net.download.service.episode;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.media.MediaMetadataRetriever;
|
import android.media.MediaMetadataRetriever;
|
|
@ -1,4 +1,4 @@
|
||||||
package de.danoeh.antennapod.core.service.download;
|
package de.danoeh.antennapod.net.download.service.feed;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import androidx.work.Constraints;
|
import androidx.work.Constraints;
|
||||||
|
@ -9,6 +9,7 @@ import androidx.work.OneTimeWorkRequest;
|
||||||
import androidx.work.OutOfQuotaPolicy;
|
import androidx.work.OutOfQuotaPolicy;
|
||||||
import androidx.work.WorkInfo;
|
import androidx.work.WorkInfo;
|
||||||
import androidx.work.WorkManager;
|
import androidx.work.WorkManager;
|
||||||
|
import de.danoeh.antennapod.net.download.service.episode.EpisodeDownloadWorker;
|
||||||
import de.danoeh.antennapod.storage.database.DBWriter;
|
import de.danoeh.antennapod.storage.database.DBWriter;
|
||||||
import de.danoeh.antennapod.model.feed.FeedItem;
|
import de.danoeh.antennapod.model.feed.FeedItem;
|
||||||
import de.danoeh.antennapod.model.feed.FeedMedia;
|
import de.danoeh.antennapod.model.feed.FeedMedia;
|
|
@ -1,4 +1,4 @@
|
||||||
package de.danoeh.antennapod.core.util.download;
|
package de.danoeh.antennapod.net.download.service.feed;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
@ -15,7 +15,6 @@ import androidx.work.PeriodicWorkRequest;
|
||||||
import androidx.work.WorkManager;
|
import androidx.work.WorkManager;
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
import de.danoeh.antennapod.core.R;
|
import de.danoeh.antennapod.core.R;
|
||||||
import de.danoeh.antennapod.core.service.FeedUpdateWorker;
|
|
||||||
import de.danoeh.antennapod.net.common.NetworkUtils;
|
import de.danoeh.antennapod.net.common.NetworkUtils;
|
||||||
import de.danoeh.antennapod.event.MessageEvent;
|
import de.danoeh.antennapod.event.MessageEvent;
|
||||||
import de.danoeh.antennapod.model.feed.Feed;
|
import de.danoeh.antennapod.model.feed.Feed;
|
|
@ -1,4 +1,4 @@
|
||||||
package de.danoeh.antennapod.core.service;
|
package de.danoeh.antennapod.net.download.service.feed;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.app.Notification;
|
import android.app.Notification;
|
||||||
|
@ -16,16 +16,13 @@ import androidx.work.Worker;
|
||||||
import androidx.work.WorkerParameters;
|
import androidx.work.WorkerParameters;
|
||||||
import com.google.common.util.concurrent.Futures;
|
import com.google.common.util.concurrent.Futures;
|
||||||
import com.google.common.util.concurrent.ListenableFuture;
|
import com.google.common.util.concurrent.ListenableFuture;
|
||||||
import de.danoeh.antennapod.core.ClientConfigurator;
|
import de.danoeh.antennapod.net.download.service.R;
|
||||||
import de.danoeh.antennapod.core.R;
|
import de.danoeh.antennapod.net.download.service.feed.local.LocalFeedUpdater;
|
||||||
import de.danoeh.antennapod.core.feed.LocalFeedUpdater;
|
import de.danoeh.antennapod.net.download.service.feed.remote.DefaultDownloaderFactory;
|
||||||
import de.danoeh.antennapod.core.service.download.DefaultDownloaderFactory;
|
import de.danoeh.antennapod.net.download.service.feed.remote.Downloader;
|
||||||
import de.danoeh.antennapod.core.service.download.DownloadRequestCreator;
|
import de.danoeh.antennapod.net.download.service.feed.remote.FeedParserTask;
|
||||||
import de.danoeh.antennapod.core.service.download.Downloader;
|
|
||||||
import de.danoeh.antennapod.core.service.download.NewEpisodesNotification;
|
|
||||||
import de.danoeh.antennapod.core.service.download.handler.FeedParserTask;
|
|
||||||
import de.danoeh.antennapod.core.util.download.FeedUpdateManagerImpl;
|
|
||||||
import de.danoeh.antennapod.net.download.serviceinterface.AutoDownloadManager;
|
import de.danoeh.antennapod.net.download.serviceinterface.AutoDownloadManager;
|
||||||
|
import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequestCreator;
|
||||||
import de.danoeh.antennapod.storage.database.DBReader;
|
import de.danoeh.antennapod.storage.database.DBReader;
|
||||||
import de.danoeh.antennapod.storage.database.FeedDatabaseWriter;
|
import de.danoeh.antennapod.storage.database.FeedDatabaseWriter;
|
||||||
import de.danoeh.antennapod.storage.database.DBWriter;
|
import de.danoeh.antennapod.storage.database.DBWriter;
|
||||||
|
@ -58,7 +55,6 @@ public class FeedUpdateWorker extends Worker {
|
||||||
@Override
|
@Override
|
||||||
@NonNull
|
@NonNull
|
||||||
public Result doWork() {
|
public Result doWork() {
|
||||||
ClientConfigurator.initialize(getApplicationContext());
|
|
||||||
newEpisodesNotification.loadCountersBeforeRefresh();
|
newEpisodesNotification.loadCountersBeforeRefresh();
|
||||||
|
|
||||||
List<Feed> toUpdate;
|
List<Feed> toUpdate;
|
||||||
|
@ -125,14 +121,14 @@ public class FeedUpdateWorker extends Worker {
|
||||||
.setStyle(new NotificationCompat.BigTextStyle().bigText(bigText))
|
.setStyle(new NotificationCompat.BigTextStyle().bigText(bigText))
|
||||||
.setSmallIcon(R.drawable.ic_notification_sync)
|
.setSmallIcon(R.drawable.ic_notification_sync)
|
||||||
.setOngoing(true)
|
.setOngoing(true)
|
||||||
.addAction(R.drawable.ic_cancel, context.getString(R.string.cancel_label),
|
.addAction(R.drawable.ic_notification_cancel, context.getString(R.string.cancel_label),
|
||||||
WorkManager.getInstance(context).createCancelPendingIntent(getId()))
|
WorkManager.getInstance(context).createCancelPendingIntent(getId()))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ListenableFuture<ForegroundInfo> getForegroundInfoAsync() {
|
public ListenableFuture getForegroundInfoAsync() {
|
||||||
return Futures.immediateFuture(new ForegroundInfo(R.id.notification_updating_feeds, createNotification(null)));
|
return Futures.immediateFuture(new ForegroundInfo(R.id.notification_updating_feeds, createNotification(null)));
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package de.danoeh.antennapod.core.service.download;
|
package de.danoeh.antennapod.net.download.service.feed;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.app.Notification;
|
import android.app.Notification;
|
|
@ -1,4 +1,4 @@
|
||||||
package de.danoeh.antennapod.core.util;
|
package de.danoeh.antennapod.net.download.service.feed.local;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
|
@ -1,4 +1,4 @@
|
||||||
package de.danoeh.antennapod.core.feed;
|
package de.danoeh.antennapod.net.download.service.feed.local;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.media.MediaMetadataRetriever;
|
import android.media.MediaMetadataRetriever;
|
||||||
|
@ -26,10 +26,9 @@ import java.util.UUID;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.documentfile.provider.DocumentFile;
|
import androidx.documentfile.provider.DocumentFile;
|
||||||
import de.danoeh.antennapod.core.R;
|
|
||||||
import de.danoeh.antennapod.core.util.FastDocumentFile;
|
|
||||||
import de.danoeh.antennapod.model.MediaMetadataRetrieverCompat;
|
import de.danoeh.antennapod.model.MediaMetadataRetrieverCompat;
|
||||||
import de.danoeh.antennapod.model.download.DownloadResult;
|
import de.danoeh.antennapod.model.download.DownloadResult;
|
||||||
|
import de.danoeh.antennapod.net.download.service.R;
|
||||||
import de.danoeh.antennapod.storage.database.DBReader;
|
import de.danoeh.antennapod.storage.database.DBReader;
|
||||||
import de.danoeh.antennapod.storage.database.FeedDatabaseWriter;
|
import de.danoeh.antennapod.storage.database.FeedDatabaseWriter;
|
||||||
import de.danoeh.antennapod.storage.database.DBWriter;
|
import de.danoeh.antennapod.storage.database.DBWriter;
|
|
@ -1,4 +1,4 @@
|
||||||
package de.danoeh.antennapod.core.service.download;
|
package de.danoeh.antennapod.net.download.service.feed.remote;
|
||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.webkit.URLUtil;
|
import android.webkit.URLUtil;
|
|
@ -1,13 +1,13 @@
|
||||||
package de.danoeh.antennapod.core.service.download;
|
package de.danoeh.antennapod.net.download.service.feed.remote;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
|
|
||||||
import de.danoeh.antennapod.core.R;
|
|
||||||
import de.danoeh.antennapod.model.download.DownloadResult;
|
import de.danoeh.antennapod.model.download.DownloadResult;
|
||||||
import de.danoeh.antennapod.model.download.DownloadRequest;
|
import de.danoeh.antennapod.model.download.DownloadRequest;
|
||||||
|
import de.danoeh.antennapod.net.download.service.R;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Downloads files
|
* Downloads files
|
|
@ -1,4 +1,4 @@
|
||||||
package de.danoeh.antennapod.core.service.download;
|
package de.danoeh.antennapod.net.download.service.feed.remote;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
|
@ -1,4 +1,4 @@
|
||||||
package de.danoeh.antennapod.core.service.download.handler;
|
package de.danoeh.antennapod.net.download.service.feed.remote;
|
||||||
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
@ -13,7 +13,6 @@ import de.danoeh.antennapod.parser.feed.FeedHandler;
|
||||||
import de.danoeh.antennapod.parser.feed.FeedHandlerResult;
|
import de.danoeh.antennapod.parser.feed.FeedHandlerResult;
|
||||||
import de.danoeh.antennapod.parser.feed.UnsupportedFeedtypeException;
|
import de.danoeh.antennapod.parser.feed.UnsupportedFeedtypeException;
|
||||||
import de.danoeh.antennapod.model.download.DownloadError;
|
import de.danoeh.antennapod.model.download.DownloadError;
|
||||||
import de.danoeh.antennapod.core.util.InvalidFeedException;
|
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
import javax.xml.parsers.ParserConfigurationException;
|
|
@ -1,4 +1,4 @@
|
||||||
package de.danoeh.antennapod.core.service.download;
|
package de.danoeh.antennapod.net.download.service.feed.remote;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
@ -8,6 +8,7 @@ import de.danoeh.antennapod.net.common.NetworkUtils;
|
||||||
import de.danoeh.antennapod.model.download.DownloadResult;
|
import de.danoeh.antennapod.model.download.DownloadResult;
|
||||||
import de.danoeh.antennapod.model.download.DownloadRequest;
|
import de.danoeh.antennapod.model.download.DownloadRequest;
|
||||||
import de.danoeh.antennapod.net.common.AntennapodHttpClient;
|
import de.danoeh.antennapod.net.common.AntennapodHttpClient;
|
||||||
|
import de.danoeh.antennapod.net.download.service.R;
|
||||||
import okhttp3.CacheControl;
|
import okhttp3.CacheControl;
|
||||||
import okhttp3.internal.http.StatusLine;
|
import okhttp3.internal.http.StatusLine;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
|
@ -24,8 +25,8 @@ import java.net.UnknownHostException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import de.danoeh.antennapod.core.R;
|
|
||||||
import de.danoeh.antennapod.model.feed.FeedMedia;
|
import de.danoeh.antennapod.model.feed.FeedMedia;
|
||||||
import de.danoeh.antennapod.parser.feed.util.DateUtils;
|
import de.danoeh.antennapod.parser.feed.util.DateUtils;
|
||||||
import de.danoeh.antennapod.model.download.DownloadError;
|
import de.danoeh.antennapod.model.download.DownloadError;
|
||||||
|
@ -98,7 +99,7 @@ public class HttpDownloader extends Downloader {
|
||||||
String contentEncodingHeader = response.header("Content-Encoding");
|
String contentEncodingHeader = response.header("Content-Encoding");
|
||||||
boolean isGzip = false;
|
boolean isGzip = false;
|
||||||
if (!TextUtils.isEmpty(contentEncodingHeader)) {
|
if (!TextUtils.isEmpty(contentEncodingHeader)) {
|
||||||
isGzip = TextUtils.equals(contentEncodingHeader.toLowerCase(), "gzip");
|
isGzip = TextUtils.equals(contentEncodingHeader.toLowerCase(Locale.US), "gzip");
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.d(TAG, "Response code is " + response.code());
|
Log.d(TAG, "Response code is " + response.code());
|
|
@ -1,4 +1,4 @@
|
||||||
package de.danoeh.antennapod.core.util;
|
package de.danoeh.antennapod.net.download.service.feed.remote;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Thrown if a feed has invalid attribute values.
|
* Thrown if a feed has invalid attribute values.
|
|
@ -0,0 +1,6 @@
|
||||||
|
<resources>
|
||||||
|
<item name="notification_downloading" type="id"/>
|
||||||
|
<item name="notification_updating_feeds" type="id"/>
|
||||||
|
<item name="notification_download_report" type="id"/>
|
||||||
|
<item name="notification_auto_download_report" type="id"/>
|
||||||
|
</resources>
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
@ -1,4 +1,4 @@
|
||||||
package de.danoeh.antennapod.core.feed;
|
package de.danoeh.antennapod.net.download.service.feed.local;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.media.MediaMetadataRetriever;
|
import android.media.MediaMetadataRetriever;
|
||||||
|
@ -11,7 +11,6 @@ import androidx.test.platform.app.InstrumentationRegistry;
|
||||||
import de.danoeh.antennapod.storage.preferences.PlaybackPreferences;
|
import de.danoeh.antennapod.storage.preferences.PlaybackPreferences;
|
||||||
import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterface;
|
import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterface;
|
||||||
import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterfaceStub;
|
import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterfaceStub;
|
||||||
import de.danoeh.antennapod.core.util.FastDocumentFile;
|
|
||||||
import de.danoeh.antennapod.model.feed.Feed;
|
import de.danoeh.antennapod.model.feed.Feed;
|
||||||
import de.danoeh.antennapod.model.feed.FeedItem;
|
import de.danoeh.antennapod.model.feed.FeedItem;
|
||||||
import de.danoeh.antennapod.storage.database.PodDBAdapter;
|
import de.danoeh.antennapod.storage.database.PodDBAdapter;
|
||||||
|
@ -37,13 +36,13 @@ import de.danoeh.antennapod.storage.preferences.UserPreferences;
|
||||||
import de.danoeh.antennapod.storage.database.DBReader;
|
import de.danoeh.antennapod.storage.database.DBReader;
|
||||||
import de.danoeh.antennapod.storage.database.DBWriter;
|
import de.danoeh.antennapod.storage.database.DBWriter;
|
||||||
|
|
||||||
import static org.hamcrest.CoreMatchers.endsWith;
|
|
||||||
import static org.hamcrest.CoreMatchers.is;
|
import static org.hamcrest.CoreMatchers.is;
|
||||||
|
import static org.hamcrest.CoreMatchers.endsWith;
|
||||||
|
import static org.hamcrest.CoreMatchers.startsWith;
|
||||||
import static org.hamcrest.MatcherAssert.assertThat;
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
import static org.hamcrest.Matchers.empty;
|
import static org.hamcrest.Matchers.empty;
|
||||||
import static org.hamcrest.Matchers.startsWith;
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.mockito.Mockito.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.robolectric.Shadows.shadowOf;
|
import static org.robolectric.Shadows.shadowOf;
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -23,6 +23,7 @@ include ':model'
|
||||||
include ':net:common'
|
include ':net:common'
|
||||||
include ':net:discovery'
|
include ':net:discovery'
|
||||||
include ':net:download:service-interface'
|
include ':net:download:service-interface'
|
||||||
|
include ':net:download:service'
|
||||||
include ':net:ssl'
|
include ':net:ssl'
|
||||||
include ':net:sync:gpoddernet'
|
include ':net:sync:gpoddernet'
|
||||||
include ':net:sync:model'
|
include ':net:sync:model'
|
||||||
|
|
|
@ -15,6 +15,7 @@ dependencies {
|
||||||
implementation project(':ui:i18n')
|
implementation project(':ui:i18n')
|
||||||
implementation project(':ui:notifications')
|
implementation project(':ui:notifications')
|
||||||
implementation project(':model')
|
implementation project(':model')
|
||||||
|
implementation project(':net:download:service-interface')
|
||||||
|
|
||||||
annotationProcessor "androidx.annotation:annotation:$annotationVersion"
|
annotationProcessor "androidx.annotation:annotation:$annotationVersion"
|
||||||
implementation "androidx.core:core:$coreVersion"
|
implementation "androidx.core:core:$coreVersion"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package de.danoeh.antennapod.core.backup;
|
package de.danoeh.antennapod.storage.importexport;
|
||||||
|
|
||||||
import android.app.backup.BackupAgentHelper;
|
import android.app.backup.BackupAgentHelper;
|
||||||
import android.app.backup.BackupDataInputStream;
|
import android.app.backup.BackupDataInputStream;
|
||||||
|
@ -10,9 +10,6 @@ import android.util.Log;
|
||||||
|
|
||||||
import de.danoeh.antennapod.net.download.serviceinterface.FeedUpdateManager;
|
import de.danoeh.antennapod.net.download.serviceinterface.FeedUpdateManager;
|
||||||
import de.danoeh.antennapod.storage.database.FeedDatabaseWriter;
|
import de.danoeh.antennapod.storage.database.FeedDatabaseWriter;
|
||||||
import de.danoeh.antennapod.storage.importexport.OpmlElement;
|
|
||||||
import de.danoeh.antennapod.storage.importexport.OpmlReader;
|
|
||||||
import de.danoeh.antennapod.storage.importexport.OpmlWriter;
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
<vector android:height="24dp"
|
||||||
|
android:viewportHeight="24.0" android:viewportWidth="24.0"
|
||||||
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path android:fillColor="#FFFFFFFF" android:pathData="M12,2C6.47,2 2,6.47 2,12s4.47,10 10,10 10,-4.47 10,-10S17.53,2 12,2zM17,15.59L15.59,17 12,13.41 8.41,17 7,15.59 10.59,12 7,8.41 8.41,7 12,10.59 15.59,7 17,8.41 13.41,12 17,15.59z"/>
|
||||||
|
</vector>
|
|
@ -24,7 +24,6 @@ import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationProviderVie
|
||||||
import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationQueueSink;
|
import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationQueueSink;
|
||||||
import de.danoeh.antennapod.storage.preferences.SynchronizationCredentials;
|
import de.danoeh.antennapod.storage.preferences.SynchronizationCredentials;
|
||||||
import de.danoeh.antennapod.storage.preferences.SynchronizationSettings;
|
import de.danoeh.antennapod.storage.preferences.SynchronizationSettings;
|
||||||
import de.danoeh.antennapod.core.util.FileNameGenerator;
|
|
||||||
import de.danoeh.antennapod.net.sync.gpoddernet.GpodnetService;
|
import de.danoeh.antennapod.net.sync.gpoddernet.GpodnetService;
|
||||||
import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetDevice;
|
import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetDevice;
|
||||||
import de.danoeh.antennapod.ui.preferences.R;
|
import de.danoeh.antennapod.ui.preferences.R;
|
||||||
|
@ -215,7 +214,7 @@ public class GpodderAuthenticationFragment extends DialogFragment {
|
||||||
private String generateDeviceId(String name) {
|
private String generateDeviceId(String name) {
|
||||||
// devices names must be of a certain form:
|
// devices names must be of a certain form:
|
||||||
// https://gpoddernet.readthedocs.org/en/latest/api/reference/general.html#devices
|
// https://gpoddernet.readthedocs.org/en/latest/api/reference/general.html#devices
|
||||||
return FileNameGenerator.generateFileName(name).replaceAll("\\W", "_").toLowerCase(Locale.US);
|
return name.replaceAll("[^a-zA-Z0-9]", "_").toLowerCase(Locale.US);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isDeviceInList(String name) {
|
private boolean isDeviceInList(String name) {
|
||||||
|
|
Loading…
Reference in New Issue