diff --git a/app/src/main/java/net/nullsum/audinaut/fragments/SettingsFragment.java b/app/src/main/java/net/nullsum/audinaut/fragments/SettingsFragment.java index f5638ee..7712d04 100644 --- a/app/src/main/java/net/nullsum/audinaut/fragments/SettingsFragment.java +++ b/app/src/main/java/net/nullsum/audinaut/fragments/SettingsFragment.java @@ -530,6 +530,15 @@ public class SettingsFragment extends PreferenceCompatFragment implements Shared return false; }); + Preference serverStartScanPreference = new Preference(context); + serverStartScanPreference.setKey(Constants.PREFERENCES_KEY_START_SCAN + instance); + serverStartScanPreference.setPersistent(false); + serverStartScanPreference.setTitle(R.string.settings_start_scan_title); + serverStartScanPreference.setOnPreferenceClickListener(preference -> { + startScan(instance); + return false; + }); + screen.addPreference(serverNamePreference); screen.addPreference(serverUrlPreference); screen.addPreference(serverInternalUrlPreference); @@ -538,6 +547,7 @@ public class SettingsFragment extends PreferenceCompatFragment implements Shared screen.addPreference(serverPasswordPreference); screen.addPreference(authMethodPreference); screen.addPreference(serverTestConnectionPreference); + screen.addPreference(serverStartScanPreference); screen.addPreference(serverOpenBrowser); screen.addPreference(serverRemoveServerPreference); @@ -607,6 +617,42 @@ public class SettingsFragment extends PreferenceCompatFragment implements Shared } } + private void startScan(final int instance) { + LoadingTask task = new LoadingTask(context) { + @Override + protected Boolean doInBackground() throws Throwable { + MusicService musicService = MusicServiceFactory.getOnlineService(); + + try { + musicService.setInstance(instance); + musicService.startScan(context); + return true; + } finally { + musicService.setInstance(null); + } + } + + @Override + protected void done(Boolean licenseValid) { + Log.d(TAG, "Finished media scan start"); + Util.toast(context, R.string.settings_media_scan_started); + } + + @Override + public void cancel() { + super.cancel(); + } + + @Override + protected void error(Throwable error) { + Log.w(TAG, error.toString(), error); + new ErrorDialog(context, getResources().getString(R.string.settings_media_scan_start_failed) + + " " + getErrorMessage(error), false); + } + }; + task.execute(); + } + private void testConnection(final int instance) { LoadingTask task = new LoadingTask(context) { private int previousInstance; diff --git a/app/src/main/java/net/nullsum/audinaut/service/CachedMusicService.java b/app/src/main/java/net/nullsum/audinaut/service/CachedMusicService.java index 0052a74..35a357d 100644 --- a/app/src/main/java/net/nullsum/audinaut/service/CachedMusicService.java +++ b/app/src/main/java/net/nullsum/audinaut/service/CachedMusicService.java @@ -634,6 +634,11 @@ public class CachedMusicService implements MusicService { return result; } + @Override + public void startScan(Context c) throws Exception { + musicService.startScan(c); + } + @Override public void setInstance(Integer instance) { musicService.setInstance(instance); diff --git a/app/src/main/java/net/nullsum/audinaut/service/MusicService.java b/app/src/main/java/net/nullsum/audinaut/service/MusicService.java index 292f92b..d7438b1 100644 --- a/app/src/main/java/net/nullsum/audinaut/service/MusicService.java +++ b/app/src/main/java/net/nullsum/audinaut/service/MusicService.java @@ -89,5 +89,7 @@ public interface MusicService { User getUser(boolean refresh, String username, Context context, ProgressListener progressListener) throws Exception; + void startScan(Context c) throws Exception; + void setInstance(Integer instance) throws Exception; } diff --git a/app/src/main/java/net/nullsum/audinaut/service/OfflineMusicService.java b/app/src/main/java/net/nullsum/audinaut/service/OfflineMusicService.java index b189580..90bc8cd 100644 --- a/app/src/main/java/net/nullsum/audinaut/service/OfflineMusicService.java +++ b/app/src/main/java/net/nullsum/audinaut/service/OfflineMusicService.java @@ -44,6 +44,7 @@ import java.io.FileReader; import java.io.Reader; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; import java.util.HashSet; import java.util.LinkedList; import java.util.List; @@ -503,6 +504,11 @@ public class OfflineMusicService implements MusicService { throw new OfflineException(); } + @Override + public void startScan(Context c) throws Exception { + throw new OfflineException(); + } + @Override public void setInstance(Integer instance) throws Exception { throw new OfflineException(); diff --git a/app/src/main/java/net/nullsum/audinaut/service/RESTMusicService.java b/app/src/main/java/net/nullsum/audinaut/service/RESTMusicService.java index b778c7d..e66e6dd 100644 --- a/app/src/main/java/net/nullsum/audinaut/service/RESTMusicService.java +++ b/app/src/main/java/net/nullsum/audinaut/service/RESTMusicService.java @@ -25,6 +25,7 @@ import android.util.Log; import androidx.annotation.Nullable; +import net.nullsum.audinaut.R; import net.nullsum.audinaut.domain.Genre; import net.nullsum.audinaut.domain.Indexes; import net.nullsum.audinaut.domain.MusicDirectory; @@ -678,6 +679,22 @@ public class RESTMusicService implements MusicService { } } + @Override + public void startScan(Context context) throws Exception { + String url = getRestUrl(context, "startScan", null); + + Request request = new Request.Builder().url(url).build(); + + try (Response response = client.newCall(request).execute()) { + if (response.isSuccessful()) { + Log.d(TAG, "Media scan started" + response.toString()); + } else { + Log.w(TAG, "media scan start failed" + response.toString()); + Util.toast(context, R.string.settings_media_scan_start_failed); + } + } + } + private String getOfflineSongId(String id, Context context, ProgressListener progressListener) throws Exception { SharedPreferences prefs = Util.getPreferences(context); String cacheLocn = prefs.getString(Constants.PREFERENCES_KEY_CACHE_LOCATION, null); diff --git a/app/src/main/java/net/nullsum/audinaut/util/Constants.java b/app/src/main/java/net/nullsum/audinaut/util/Constants.java index 84d09c7..e9a9380 100644 --- a/app/src/main/java/net/nullsum/audinaut/util/Constants.java +++ b/app/src/main/java/net/nullsum/audinaut/util/Constants.java @@ -67,6 +67,7 @@ public final class Constants { public static final String PREFERENCES_KEY_SERVER_INTERNAL_URL = "serverInternalUrl"; public static final String PREFERENCES_KEY_SERVER_LOCAL_NETWORK_SSID = "serverLocalNetworkSSID"; public static final String PREFERENCES_KEY_TEST_CONNECTION = "serverTestConnection"; + public static final String PREFERENCES_KEY_START_SCAN = "serverStartScan"; public static final String PREFERENCES_KEY_OPEN_BROWSER = "openBrowser"; public static final String PREFERENCES_KEY_MUSIC_FOLDER_ID = "musicFolderId"; public static final String PREFERENCES_KEY_USERNAME = "username"; diff --git a/app/src/main/java/net/nullsum/audinaut/util/ThemeUtil.java b/app/src/main/java/net/nullsum/audinaut/util/ThemeUtil.java index 3165e6b..27efe6d 100644 --- a/app/src/main/java/net/nullsum/audinaut/util/ThemeUtil.java +++ b/app/src/main/java/net/nullsum/audinaut/util/ThemeUtil.java @@ -18,6 +18,7 @@ package net.nullsum.audinaut.util; import android.content.Context; import android.content.SharedPreferences; import android.content.res.Configuration; +import android.util.Log; import net.nullsum.audinaut.R; import net.nullsum.audinaut.activity.SettingsActivity; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 56845cf..de4dfa7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -124,6 +124,7 @@ Settings Test connection + Start Media Scan Now Add Server Remove Server Servers @@ -152,6 +153,8 @@ Testing connection… Connection is OK Connection failure. + Media scan started + Could not start media scan Please specify a valid URL. Please specify a valid username (no trailing spaces). Appearance