From 2e87ee322324ad6c50c9ed9763a308a44108704f Mon Sep 17 00:00:00 2001 From: Poussinou Date: Mon, 27 Mar 2017 16:31:32 +0200 Subject: [PATCH 01/10] add buttons to fdroid and google play store --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3a75af7b..7f00f83c 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,15 @@ Transdroid ========== [www.transdroid.org](http://www.transdroid.org) -[Google+](https://plus.google.com/u/0/b/106240944422491053650/106240944422491053650) - [Twitter](https://twitter.com/transdroid) - [transdroid@2312.nl](transdroid@2312.nl) - [Transdrone in Play Store](https://play.google.com/store/apps/details?id=org.transdroid.lite) +[Google+](https://plus.google.com/u/0/b/106240944422491053650/106240944422491053650) - [Twitter](https://twitter.com/transdroid) - [transdroid@2312.nl](transdroid@2312.nl) "Manage your torrents from your Android device" + +Get it on F-Droid + +Get it on Google Play + Screen shot of the main torrents listing screen Manage your torrents from your Android device with Transdroid. All popular clients are supported: µTorrent, Transmission, rTorrent, Vuze, Deluge, BitTorrent 6, qBittorrent and many more. You can view and manage the running torrents and individual files. Adding is easy via the integrated search, RSS feeds or the barcode scanner (full version required). Monitor progress using the home screen widget or background alarm service. From 7f8523fd96528ce66afe2b6282182f3a8e8c7292 Mon Sep 17 00:00:00 2001 From: Alon Albert Date: Tue, 2 Jan 2018 08:02:48 +0200 Subject: [PATCH 02/10] Use "application/x-bittorrent" instead of "file/*" in File Picker --- .../java/org/transdroid/core/gui/search/FilePickerHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/transdroid/core/gui/search/FilePickerHelper.java b/app/src/main/java/org/transdroid/core/gui/search/FilePickerHelper.java index f6b91ced..2b02f4e7 100644 --- a/app/src/main/java/org/transdroid/core/gui/search/FilePickerHelper.java +++ b/app/src/main/java/org/transdroid/core/gui/search/FilePickerHelper.java @@ -42,7 +42,7 @@ public class FilePickerHelper { public static void startFilePicker(final Activity activity) { try { // Start a file manager that can handle the file/* file/* intents - activity.startActivityForResult(new Intent(Intent.ACTION_GET_CONTENT).setType("file/*"), + activity.startActivityForResult(new Intent(Intent.ACTION_GET_CONTENT).setType("application/x-bittorrent"), ACTIVITY_FILEPICKER); } catch (Exception e1) { try { From 8216742d68cb1657793dcb2cca70a81b4391df0b Mon Sep 17 00:00:00 2001 From: Alon Albert Date: Mon, 8 Jan 2018 12:29:51 +0200 Subject: [PATCH 03/10] Add Synology AddByFile support --- .../daemon/Synology/SynologyAdapter.java | 63 ++++++++++++++++++- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/transdroid/daemon/Synology/SynologyAdapter.java b/app/src/main/java/org/transdroid/daemon/Synology/SynologyAdapter.java index 0ec63909..dca623f1 100644 --- a/app/src/main/java/org/transdroid/daemon/Synology/SynologyAdapter.java +++ b/app/src/main/java/org/transdroid/daemon/Synology/SynologyAdapter.java @@ -17,9 +17,15 @@ */ package org.transdroid.daemon.Synology; +import com.android.internalcopy.http.multipart.FilePart; +import com.android.internalcopy.http.multipart.MultipartEntity; +import com.android.internalcopy.http.multipart.Part; +import com.android.internalcopy.http.multipart.Utf8StringPart; + import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONArray; import org.json.JSONException; @@ -35,6 +41,7 @@ import org.transdroid.daemon.Torrent; import org.transdroid.daemon.TorrentDetails; import org.transdroid.daemon.TorrentFile; import org.transdroid.daemon.TorrentStatus; +import org.transdroid.daemon.task.AddByFileTask; import org.transdroid.daemon.task.AddByMagnetUrlTask; import org.transdroid.daemon.task.AddByUrlTask; import org.transdroid.daemon.task.DaemonTask; @@ -51,8 +58,11 @@ import org.transdroid.daemon.task.SetTransferRatesTask; import org.transdroid.daemon.util.Collections2; import org.transdroid.daemon.util.HttpHelper; +import java.io.File; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.UnsupportedEncodingException; +import java.net.URI; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Date; @@ -91,7 +101,8 @@ public class SynologyAdapter implements IDaemonAdapter { tid = task.getTargetTorrent().getUniqueID(); return new GetFileListTaskSuccessResult((GetFileListTask) task, fileList(log, tid)); case AddByFile: - return null; + createTask(log, new File(URI.create(((AddByFileTask) task).getFile()))); + return new DaemonTaskSuccessResult(task); case AddByUrl: String url = ((AddByUrlTask) task).getUrl(); createTask(log, url); @@ -176,6 +187,17 @@ public class SynologyAdapter implements IDaemonAdapter { } } + private void createTask(Log log, File file) throws DaemonException { + try { + authPost(log, "SYNO.DownloadStation.Task", "1", "DownloadStation/task.cgi", + new Utf8StringPart("method", "create"), + new FilePart("file", file)) + .ensureSuccess(log); + } catch (FileNotFoundException e) { + throw new DaemonException(ExceptionType.FileAccessError, e.getMessage()); + } + } + private void removeTask(Log log, String tid) throws DaemonException { List tids = new ArrayList(); tids.add(tid); @@ -394,6 +416,18 @@ public class SynologyAdapter implements IDaemonAdapter { return new SynoRequest(path, api, version).get(params + "&_sid=" + sid); } + /** + * Authenticated POST. If no session open, a login authGet will be done before-hand. Params are + * sent as {@link Part}s, + */ + private SynoResponse authPost(Log log, String api, String version, String path, Part... params) + throws DaemonException { + if (sid == null) { + sid = login(log); + } + return new SynoRequest(path, api, version).post(sid, params); + } + private DefaultHttpClient getHttpClient() throws DaemonException { if (httpClient == null) { httpClient = HttpHelper.createStandardHttpClient(settings, true); @@ -477,9 +511,34 @@ public class SynologyAdapter implements IDaemonAdapter { } } + // Synolgy POST API seems to work only if all params are sent as POST data despite the docs + // saying otherwise. + public SynoResponse post(String sid, Part... params) throws DaemonException { + try { + final HttpPost request = new HttpPost(buildUrl()); + final Part[] baseParams = { + new Utf8StringPart("_sid", sid), + new Utf8StringPart("version", version), + new Utf8StringPart("api", api), + }; + final Part[] allParams = new Part[params.length + baseParams.length]; + System.arraycopy(baseParams, 0, allParams, 0, baseParams.length); + System.arraycopy(params, 0, allParams, baseParams.length, params.length); + + request.setEntity(new MultipartEntity(allParams)); + return new SynoResponse(getHttpClient().execute(request)); + } catch (IOException e) { + throw new DaemonException(ExceptionType.ConnectionError, e.toString()); + } + } + private String buildURL(String params) { + return buildUrl() + "?api=" + api + "&version=" + version + params; + } + + private String buildUrl() { return (settings.getSsl() ? "https://" : "http://") + settings.getAddress() + ":" + settings.getPort() + - "/webapi/" + path + "?api=" + api + "&version=" + version + params; + "/webapi/" + path; } } From 43ed12b0834e7ac9ad949427c5b7793c7e603693 Mon Sep 17 00:00:00 2001 From: Alon Albert Date: Tue, 9 Jan 2018 09:56:37 +0200 Subject: [PATCH 04/10] Add Sort-By Action to Search Activity --- .../app/settings/ApplicationSettings.java | 39 ++++++++++++++----- .../core/gui/search/SearchActivity.java | 33 +++++++++++++++- .../gui/search/SearchResultsFragment.java | 8 ++-- app/src/main/res/menu/activity_search.xml | 18 +++++++++ app/src/main/res/values/strings.xml | 1 + 5 files changed, 83 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/org/transdroid/core/app/settings/ApplicationSettings.java b/app/src/main/java/org/transdroid/core/app/settings/ApplicationSettings.java index 7e88e1c9..1ab34c3e 100644 --- a/app/src/main/java/org/transdroid/core/app/settings/ApplicationSettings.java +++ b/app/src/main/java/org/transdroid/core/app/settings/ApplicationSettings.java @@ -16,11 +16,11 @@ */ package org.transdroid.core.app.settings; -import java.security.InvalidParameterException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.List; +import android.content.Context; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; +import android.preference.PreferenceManager; +import android.text.TextUtils; import org.androidannotations.annotations.Bean; import org.androidannotations.annotations.EBean; @@ -29,6 +29,7 @@ import org.androidannotations.annotations.RootContext; import org.json.JSONArray; import org.json.JSONException; import org.transdroid.core.app.search.SearchHelper; +import org.transdroid.core.app.search.SearchHelper.SearchSortOrder; import org.transdroid.core.app.search.SearchSite; import org.transdroid.core.gui.navigation.NavigationFilter; import org.transdroid.core.gui.navigation.StatusType; @@ -39,11 +40,11 @@ import org.transdroid.daemon.Daemon; import org.transdroid.daemon.OS; import org.transdroid.daemon.TorrentsSortBy; -import android.content.Context; -import android.content.SharedPreferences; -import android.content.SharedPreferences.Editor; -import android.preference.PreferenceManager; -import android.text.TextUtils; +import java.security.InvalidParameterException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; /** * Singleton object to access all application settings, including stored servers, web search sites and RSS feeds. @@ -558,6 +559,24 @@ public class ApplicationSettings { .getStatus(prefs.getInt("system_lastusedsortorder", TorrentsSortBy.Alphanumeric.getCode())); } + /** + * Registers the search list sort order as being last used by the user + * @param currentSortOrder The sort order property the user selected last + */ + public void setLastUsedSearchSortOrder(SearchSortOrder currentSortOrder) { + Editor edit = prefs.edit(); + edit.putInt("system_lastusedsearchsortorder", currentSortOrder.ordinal()); + edit.apply(); + } + + /** + * Returns the search sort order property that the user last used. + * @return The last used sort order enumeration value + */ + public SearchSortOrder getLastUsedSearchSortOrder() { + return SearchSortOrder.values()[(prefs.getInt("system_lastusedsearchsortorder", SearchSortOrder.BySeeders.ordinal()))]; + } + /** * Returns the sort order direction that the user last used. Use together with {@link #getLastUsedSortOrder()} to * get the full last used sort settings. diff --git a/app/src/main/java/org/transdroid/core/gui/search/SearchActivity.java b/app/src/main/java/org/transdroid/core/gui/search/SearchActivity.java index ad10d9af..5b8188a9 100644 --- a/app/src/main/java/org/transdroid/core/gui/search/SearchActivity.java +++ b/app/src/main/java/org/transdroid/core/gui/search/SearchActivity.java @@ -25,7 +25,6 @@ import android.os.Bundle; import android.provider.SearchRecentSuggestions; import android.support.v4.view.MenuItemCompat; import android.support.v7.app.AppCompatActivity; -import android.support.v7.view.ContextThemeWrapper; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; @@ -46,6 +45,7 @@ import org.androidannotations.annotations.SystemService; import org.androidannotations.annotations.ViewById; import org.transdroid.R; import org.transdroid.core.app.search.SearchHelper; +import org.transdroid.core.app.search.SearchHelper.SearchSortOrder; import org.transdroid.core.app.search.SearchSite; import org.transdroid.core.app.settings.ApplicationSettings; import org.transdroid.core.app.settings.SystemSettings_; @@ -85,6 +85,8 @@ public class SearchActivity extends AppCompatActivity { private List searchSites; private SearchSetting lastUsedSite; private String lastUsedQuery; + private MenuItem sortByAdded; + private MenuItem sortBySeeders; @Override public void onCreate(Bundle savedInstanceState) { @@ -177,6 +179,14 @@ public class SearchActivity extends AppCompatActivity { searchView.setIconifiedByDefault(false); MenuItemCompat.setActionView(item, searchView); searchMenu = item; + sortBySeeders = menu.findItem(R.id.action_sort_seeders); + sortByAdded = menu.findItem(R.id.action_sort_added); + final SearchSortOrder sortOrder = applicationSettings.getLastUsedSearchSortOrder(); + if (sortOrder == SearchSortOrder.BySeeders) { + sortBySeeders.setChecked(true); + } else { + sortByAdded.setChecked(true); + } return true; } @@ -304,7 +314,7 @@ public class SearchActivity extends AppCompatActivity { getSupportActionBar() .setTitle(NavigationHelper.buildCondensedFontString(getString(R.string.search_queryonsite, lastUsedQuery, lastUsedSite.getName()))); // Ask the results fragment to start a search for the specified query - fragmentResults.startSearch(lastUsedQuery, (SearchSite) lastUsedSite); + fragmentResults.startSearch(lastUsedQuery, (SearchSite) lastUsedSite, applicationSettings.getLastUsedSearchSortOrder()); } } @@ -314,4 +324,23 @@ public class SearchActivity extends AppCompatActivity { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.transdroid.org/latest-search"))); } + @OptionsItem(R.id.action_sort_added) + protected void sortByDateAdded() { + if (sortByAdded.isChecked()) { + return; + } + sortByAdded.setChecked(true); + applicationSettings.setLastUsedSearchSortOrder(SearchSortOrder.Combined); + refreshSearch(); + } + + @OptionsItem(R.id.action_sort_seeders) + protected void sortBySeeders() { + if (sortBySeeders.isChecked()) { + return; + } + sortBySeeders.setChecked(true); + applicationSettings.setLastUsedSearchSortOrder(SearchSortOrder.BySeeders); + refreshSearch(); + } } diff --git a/app/src/main/java/org/transdroid/core/gui/search/SearchResultsFragment.java b/app/src/main/java/org/transdroid/core/gui/search/SearchResultsFragment.java index 6ecbbea9..2aa5c3bd 100644 --- a/app/src/main/java/org/transdroid/core/gui/search/SearchResultsFragment.java +++ b/app/src/main/java/org/transdroid/core/gui/search/SearchResultsFragment.java @@ -102,16 +102,16 @@ public class SearchResultsFragment extends Fragment { } - public void startSearch(String query, SearchSite site) { + public void startSearch(String query, SearchSite site, SearchSortOrder sortBy) { loadingProgress.setVisibility(View.VISIBLE); resultsList.setVisibility(View.GONE); emptyText.setVisibility(View.GONE); - performSearch(query, site); + performSearch(query, site, sortBy); } @Background - protected void performSearch(String query, SearchSite site) { - results = searchHelper.search(query, site, SearchSortOrder.BySeeders); + protected void performSearch(String query, SearchSite site, SearchSortOrder sortBy) { + results = searchHelper.search(query, site, sortBy); resultsSource = site.isPrivate() ? site.getKey() : null; showResults(); } diff --git a/app/src/main/res/menu/activity_search.xml b/app/src/main/res/menu/activity_search.xml index 1d81b7fd..1af4a3f9 100644 --- a/app/src/main/res/menu/activity_search.xml +++ b/app/src/main/res/menu/activity_search.xml @@ -28,6 +28,24 @@ android:icon="@drawable/ic_action_refresh" android:title="@string/action_refresh" app:showAsAction="ifRoom" /> + + + + + + + + + Status Date done Date added + Seeders Percent downloaded Download speed Upload speed From 0461162759ef8ead08838f39cdc8386484400fdb Mon Sep 17 00:00:00 2001 From: Alon Albert Date: Thu, 11 Jan 2018 12:37:45 +0200 Subject: [PATCH 05/10] Fix bug when removing a server. header_defaultserver is a string everywhere else but here. --- .../org/transdroid/core/app/settings/ApplicationSettings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/transdroid/core/app/settings/ApplicationSettings.java b/app/src/main/java/org/transdroid/core/app/settings/ApplicationSettings.java index 7e88e1c9..f4c9619c 100644 --- a/app/src/main/java/org/transdroid/core/app/settings/ApplicationSettings.java +++ b/app/src/main/java/org/transdroid/core/app/settings/ApplicationSettings.java @@ -258,7 +258,7 @@ public class ApplicationSettings { edit.remove("header_defaultserver"); } else if (defaultServer > order) { // Move 'up' one place to account for the removed server setting - edit.putInt("header_defaultserver", --order); + edit.putString("header_defaultserver", String.valueOf(--order)); } edit.apply(); From 61ddff9da4055c2f9828d06817ea3a16724dce5e Mon Sep 17 00:00:00 2001 From: Alon Albert Date: Thu, 11 Jan 2018 17:26:30 +0200 Subject: [PATCH 06/10] Remove menuitem fields --- .../transdroid/core/gui/search/SearchActivity.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/transdroid/core/gui/search/SearchActivity.java b/app/src/main/java/org/transdroid/core/gui/search/SearchActivity.java index 5b8188a9..d65f66ca 100644 --- a/app/src/main/java/org/transdroid/core/gui/search/SearchActivity.java +++ b/app/src/main/java/org/transdroid/core/gui/search/SearchActivity.java @@ -85,8 +85,6 @@ public class SearchActivity extends AppCompatActivity { private List searchSites; private SearchSetting lastUsedSite; private String lastUsedQuery; - private MenuItem sortByAdded; - private MenuItem sortBySeeders; @Override public void onCreate(Bundle savedInstanceState) { @@ -179,8 +177,8 @@ public class SearchActivity extends AppCompatActivity { searchView.setIconifiedByDefault(false); MenuItemCompat.setActionView(item, searchView); searchMenu = item; - sortBySeeders = menu.findItem(R.id.action_sort_seeders); - sortByAdded = menu.findItem(R.id.action_sort_added); + final MenuItem sortBySeeders = menu.findItem(R.id.action_sort_seeders); + final MenuItem sortByAdded = menu.findItem(R.id.action_sort_added); final SearchSortOrder sortOrder = applicationSettings.getLastUsedSearchSortOrder(); if (sortOrder == SearchSortOrder.BySeeders) { sortBySeeders.setChecked(true); @@ -326,20 +324,20 @@ public class SearchActivity extends AppCompatActivity { @OptionsItem(R.id.action_sort_added) protected void sortByDateAdded() { - if (sortByAdded.isChecked()) { + if (applicationSettings.getLastUsedSearchSortOrder() == SearchSortOrder.Combined) { return; } - sortByAdded.setChecked(true); + invalidateOptionsMenu(); applicationSettings.setLastUsedSearchSortOrder(SearchSortOrder.Combined); refreshSearch(); } @OptionsItem(R.id.action_sort_seeders) protected void sortBySeeders() { - if (sortBySeeders.isChecked()) { + if (applicationSettings.getLastUsedSearchSortOrder() == SearchSortOrder.BySeeders) { return; } - sortBySeeders.setChecked(true); + invalidateOptionsMenu(); applicationSettings.setLastUsedSearchSortOrder(SearchSortOrder.BySeeders); refreshSearch(); } From 5c37790fcc7e111f9e0d87fde3a9199e9845a730 Mon Sep 17 00:00:00 2001 From: Alon Albert Date: Tue, 30 Jan 2018 09:27:06 +0200 Subject: [PATCH 07/10] Remove setTitle() call which was causing NPE on orientation change --- .../core/gui/settings/PreferenceCompatActivity.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/src/main/java/org/transdroid/core/gui/settings/PreferenceCompatActivity.java b/app/src/main/java/org/transdroid/core/gui/settings/PreferenceCompatActivity.java index b6b713da..6553f068 100644 --- a/app/src/main/java/org/transdroid/core/gui/settings/PreferenceCompatActivity.java +++ b/app/src/main/java/org/transdroid/core/gui/settings/PreferenceCompatActivity.java @@ -32,12 +32,6 @@ public class PreferenceCompatActivity extends PreferenceActivity implements AppC acd.onConfigurationChanged(newConfig); } - @Override - public void setTitle(CharSequence title) { - super.setTitle(title); - acd.setTitle(title); - } - @Override protected void onStop() { super.onStop(); From 3e6b7cdfe9123a01e7ad0e489ea2ed68753f6ae2 Mon Sep 17 00:00:00 2001 From: Eric Kok Date: Sun, 18 Feb 2018 12:10:40 +0100 Subject: [PATCH 08/10] Update changelog and readme. --- README.md | 4 +++- app/src/main/res/values/changelog.xml | 7 ++++++- latest-app.html | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7f00f83c..d5f96be7 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,12 @@ Transdroid ========== [www.transdroid.org](http://www.transdroid.org) -[Google+](https://plus.google.com/u/0/b/106240944422491053650/106240944422491053650) - [Twitter](https://twitter.com/transdroid) - [transdroid@2312.nl](transdroid@2312.nl) +[Twitter](https://twitter.com/transdroid) - [transdroid@2312.nl](transdroid@2312.nl) "Manage your torrents from your Android device" + +Get it on transdroid.org Get it on F-Droid diff --git a/app/src/main/res/values/changelog.xml b/app/src/main/res/values/changelog.xml index a2d0e0b7..132b60af 100644 --- a/app/src/main/res/values/changelog.xml +++ b/app/src/main/res/values/changelog.xml @@ -17,6 +17,12 @@ --> +Transdroid 2.5.10\n +Many thanks to alonalbert for his contributions!\n +- Added Deluge via RPC adapter\n +- Fixed issues with adding by file on newer Android versions\n +- Small crash fixes here and there\n +\n Transdroid 2.5.9\n - rTorrent improved parsing speed\n - qBittorrent label support\n @@ -27,7 +33,6 @@ Transdroid 2.5.9\n - Explicit leanback (Android TV) support\n - FTP url link construction fix\n \n -Transdroid 2.5.7\n Transdroid 2.5.8\n - Deluge 1.3.14+ fix\n \n diff --git a/latest-app.html b/latest-app.html index f2a669eb..f93e0706 100644 --- a/latest-app.html +++ b/latest-app.html @@ -1 +1 @@ -228|2.5.8 +229|2.5.9 From dbbed95cda99f0b0358a160dfc310697b8ca8942 Mon Sep 17 00:00:00 2001 From: Eric Kok Date: Mon, 19 Feb 2018 12:46:08 +0100 Subject: [PATCH 09/10] Guard against a user not entering a / in the folder setting. --- app/src/main/java/org/transdroid/daemon/DaemonSettings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/transdroid/daemon/DaemonSettings.java b/app/src/main/java/org/transdroid/daemon/DaemonSettings.java index d9e88d44..52218b7d 100644 --- a/app/src/main/java/org/transdroid/daemon/DaemonSettings.java +++ b/app/src/main/java/org/transdroid/daemon/DaemonSettings.java @@ -122,7 +122,7 @@ public final class DaemonSettings { return sslTrustKey; } public String getFolder() { - return folder; + return folder == null? null: (folder.startsWith("/")? folder: folder + "/"); } public boolean shouldUseAuthentication() { return useAuthentication; From 8e587245209762a354eedc177e6a29be0f64a6d1 Mon Sep 17 00:00:00 2001 From: Eric Kok Date: Mon, 19 Feb 2018 12:56:15 +0100 Subject: [PATCH 10/10] Add missing latest-search file which is checked by the Transdroid app checker service. --- latest-search.html | 1 + 1 file changed, 1 insertion(+) create mode 100644 latest-search.html diff --git a/latest-search.html b/latest-search.html new file mode 100644 index 00000000..a5ad21d5 --- /dev/null +++ b/latest-search.html @@ -0,0 +1 @@ +31|3.8