From f84400ae967dab7573e63d5cb2635c66c5edf9ee Mon Sep 17 00:00:00 2001 From: CaptainDaVinci Date: Fri, 27 Mar 2020 22:20:40 +0530 Subject: [PATCH] Restructured --- .../musicdownloader/MainActivity.java | 43 ++++---- .../api/APIClientInstance.java | 43 ++++---- .../api/github/{ => model}/GithubData.java | 2 +- .../{ => service}/GithubDataService.java | 4 +- .../api/server/ServerDataService.java | 14 --- .../ServerDownloadData.java} | 4 +- .../api/server/model/ServerQueryData.java | 26 +++++ .../api/server/service/ServerDataService.java | 22 +++++ .../api/youtube/YouTubeData.java | 97 ------------------- .../api/youtube/YouTubeDataService.java | 16 --- app/src/main/res/xml/remote_config.xml | 5 - 11 files changed, 95 insertions(+), 181 deletions(-) rename app/src/main/java/com/example/application/musicdownloader/api/github/{ => model}/GithubData.java (83%) rename app/src/main/java/com/example/application/musicdownloader/api/github/{ => service}/GithubDataService.java (51%) delete mode 100644 app/src/main/java/com/example/application/musicdownloader/api/server/ServerDataService.java rename app/src/main/java/com/example/application/musicdownloader/api/server/{ServerData.java => model/ServerDownloadData.java} (67%) create mode 100644 app/src/main/java/com/example/application/musicdownloader/api/server/model/ServerQueryData.java create mode 100644 app/src/main/java/com/example/application/musicdownloader/api/server/service/ServerDataService.java delete mode 100644 app/src/main/java/com/example/application/musicdownloader/api/youtube/YouTubeData.java delete mode 100644 app/src/main/java/com/example/application/musicdownloader/api/youtube/YouTubeDataService.java diff --git a/app/src/main/java/com/example/application/musicdownloader/MainActivity.java b/app/src/main/java/com/example/application/musicdownloader/MainActivity.java index 8dfbc16..f88c142 100644 --- a/app/src/main/java/com/example/application/musicdownloader/MainActivity.java +++ b/app/src/main/java/com/example/application/musicdownloader/MainActivity.java @@ -27,12 +27,11 @@ import androidx.appcompat.app.AppCompatActivity; import com.example.application.musicdownloader.api.APIClientInstance; -import com.example.application.musicdownloader.api.github.GithubData; -import com.example.application.musicdownloader.api.github.GithubDataService; -import com.example.application.musicdownloader.api.server.ServerData; -import com.example.application.musicdownloader.api.server.ServerDataService; -import com.example.application.musicdownloader.api.youtube.YouTubeData; -import com.example.application.musicdownloader.api.youtube.YouTubeDataService; +import com.example.application.musicdownloader.api.github.model.GithubData; +import com.example.application.musicdownloader.api.github.service.GithubDataService; +import com.example.application.musicdownloader.api.server.model.ServerDownloadData; +import com.example.application.musicdownloader.api.server.model.ServerQueryData; +import com.example.application.musicdownloader.api.server.service.ServerDataService; import com.example.application.musicdownloader.query.Encoding; import com.example.application.musicdownloader.query.Quality; import com.example.application.musicdownloader.query.Query; @@ -101,7 +100,7 @@ private void checkForUpdate() { } }); - GithubDataService service = APIClientInstance.getGithubRetrofitInstance().create(GithubDataService.class); + GithubDataService service = APIClientInstance.getGithubDataService(); Call call = service.getLatestRelease(); call.enqueue(new Callback() { @@ -203,16 +202,12 @@ void searchQuery() { setStatus("Searching", Color.BLACK); spinningProgress.setVisibility(View.VISIBLE); - YouTubeDataService service = APIClientInstance.getYouTubeRetrofitInstance().create(YouTubeDataService.class); - Call call = service.getYouTubeData("snippet", - query.getSearch(), - "video", - "1", - APIClientInstance.YOUTUBE_API_KEY); + ServerDataService service = APIClientInstance.getServerDataService(); + Call call = service.getYouTubeId(query.getSearch()); - call.enqueue(new Callback() { + call.enqueue(new Callback() { @Override - public void onResponse(Call call, Response response) { + public void onResponse(Call call, Response response) { Log.i(TAG, "Obtained YouTube response"); if (!response.isSuccessful() || response.body() == null) { spinningProgress.setVisibility(View.GONE); @@ -227,7 +222,7 @@ public void onResponse(Call call, Response response) { } @Override - public void onFailure(Call call, Throwable t) { + public void onFailure(Call call, Throwable t) { spinningProgress.setVisibility(View.GONE); setStatus("Oh, snap! Search failed", Color.BLACK); Log.d(TAG, "YouTube error: " + t.getMessage()); @@ -235,7 +230,7 @@ public void onFailure(Call call, Throwable t) { }); } - private void showResponse(final YouTubeData data) { + private void showResponse(final ServerQueryData data) { spinningProgress.setVisibility(View.GONE); setStatus("", Color.BLACK); @@ -246,7 +241,7 @@ private void showResponse(final YouTubeData data) { Log.i(TAG, "Set information for confirmation dialog"); titleTextView.setText(data.getTitle()); - setThumbnail(imageView, data.getThumbnailURL()); + setThumbnail(imageView, data.getThumbnailUrl()); DialogInterface.OnClickListener dialogClickListener = (dialog, which) -> { switch (which) { @@ -291,18 +286,18 @@ public void onResponse(okhttp3.Call call, okhttp3.Response response) { }); } - private void getDownloadLink(final YouTubeData data) { + private void getDownloadLink(final ServerQueryData data) { spinningProgress.setVisibility(View.VISIBLE); setStatus("Converting...", Color.BLACK); - ServerDataService service = APIClientInstance.getServerRetrofitInstance().create(ServerDataService.class); - Call call = service.getDownloadLink(data.getId(), + ServerDataService service = APIClientInstance.getServerDataService(); + Call call = service.getDownloadLink(data.getId(), query.getEncoding().toString(), query.getQuality().toString()); - call.enqueue(new Callback() { + call.enqueue(new Callback() { @Override - public void onResponse(Call call, Response response) { + public void onResponse(Call call, Response response) { spinningProgress.setVisibility(View.GONE); Log.i(TAG, "Obtained server response"); @@ -320,7 +315,7 @@ public void onResponse(Call call, Response response) { } @Override - public void onFailure(Call call, Throwable t) { + public void onFailure(Call call, Throwable t) { spinningProgress.setVisibility(View.GONE); Log.d(TAG, "Server error: " + t.getMessage()); setStatus("Oh, snap! Conversion failed.", Color.BLACK); diff --git a/app/src/main/java/com/example/application/musicdownloader/api/APIClientInstance.java b/app/src/main/java/com/example/application/musicdownloader/api/APIClientInstance.java index fd63147..6945523 100644 --- a/app/src/main/java/com/example/application/musicdownloader/api/APIClientInstance.java +++ b/app/src/main/java/com/example/application/musicdownloader/api/APIClientInstance.java @@ -1,8 +1,7 @@ package com.example.application.musicdownloader.api; -import android.util.Log; - -import com.example.application.musicdownloader.MainActivity; +import com.example.application.musicdownloader.api.github.service.GithubDataService; +import com.example.application.musicdownloader.api.server.service.ServerDataService; import com.google.firebase.remoteconfig.FirebaseRemoteConfig; import java.util.concurrent.TimeUnit; @@ -12,27 +11,15 @@ import retrofit2.converter.gson.GsonConverterFactory; public class APIClientInstance { - private static final String YOUTUBE_URL = "https://www.googleapis.com/youtube/v3/"; private static final String GITHUB_URL = "https://api.github.com/repos/CaptainDaVinci/Music-DL/releases/"; - public static String YOUTUBE_API_KEY ; private static String SERVER_URL; - private static Retrofit youTubeRetrofit, serverRetrofit, githubRetrofit; - - public static Retrofit getYouTubeRetrofitInstance() { - YOUTUBE_API_KEY = FirebaseRemoteConfig.getInstance().getString("YOUTUBE_API_KEY"); - Log.d(MainActivity.TAG, "YouTube API key " + YOUTUBE_API_KEY); - if (youTubeRetrofit == null) { - youTubeRetrofit = new Retrofit.Builder() - .baseUrl(YOUTUBE_URL) - .addConverterFactory(GsonConverterFactory.create()) - .build(); - } - return youTubeRetrofit; - } + private static Retrofit serverRetrofit, githubRetrofit; + private static ServerDataService serverDataService; + private static GithubDataService githubDataService; + - public static Retrofit getServerRetrofitInstance() { + private static Retrofit getServerRetrofitInstance() { SERVER_URL = FirebaseRemoteConfig.getInstance().getString("SERVER_URL"); - Log.d(MainActivity.TAG, "Server URL " + SERVER_URL); if (serverRetrofit == null) { OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(20, TimeUnit.SECONDS) @@ -49,7 +36,7 @@ public static Retrofit getServerRetrofitInstance() { return serverRetrofit; } - public static Retrofit getGithubRetrofitInstance() { + private static Retrofit getGithubRetrofitInstance() { if (githubRetrofit == null) { githubRetrofit = new Retrofit.Builder() .baseUrl(GITHUB_URL) @@ -58,4 +45,18 @@ public static Retrofit getGithubRetrofitInstance() { } return githubRetrofit; } + + public static ServerDataService getServerDataService() { + if (serverDataService == null) { + serverDataService = APIClientInstance.getServerRetrofitInstance().create(ServerDataService.class); + } + return serverDataService; + } + + public static GithubDataService getGithubDataService() { + if (githubDataService == null) { + githubDataService = APIClientInstance.getGithubRetrofitInstance().create(GithubDataService.class); + } + return githubDataService; + } } diff --git a/app/src/main/java/com/example/application/musicdownloader/api/github/GithubData.java b/app/src/main/java/com/example/application/musicdownloader/api/github/model/GithubData.java similarity index 83% rename from app/src/main/java/com/example/application/musicdownloader/api/github/GithubData.java rename to app/src/main/java/com/example/application/musicdownloader/api/github/model/GithubData.java index bd49564..5eb7531 100644 --- a/app/src/main/java/com/example/application/musicdownloader/api/github/GithubData.java +++ b/app/src/main/java/com/example/application/musicdownloader/api/github/model/GithubData.java @@ -1,4 +1,4 @@ -package com.example.application.musicdownloader.api.github; +package com.example.application.musicdownloader.api.github.model; import com.google.gson.annotations.SerializedName; diff --git a/app/src/main/java/com/example/application/musicdownloader/api/github/GithubDataService.java b/app/src/main/java/com/example/application/musicdownloader/api/github/service/GithubDataService.java similarity index 51% rename from app/src/main/java/com/example/application/musicdownloader/api/github/GithubDataService.java rename to app/src/main/java/com/example/application/musicdownloader/api/github/service/GithubDataService.java index 064ec80..57ea9bd 100644 --- a/app/src/main/java/com/example/application/musicdownloader/api/github/GithubDataService.java +++ b/app/src/main/java/com/example/application/musicdownloader/api/github/service/GithubDataService.java @@ -1,4 +1,6 @@ -package com.example.application.musicdownloader.api.github; +package com.example.application.musicdownloader.api.github.service; + +import com.example.application.musicdownloader.api.github.model.GithubData; import retrofit2.Call; import retrofit2.http.GET; diff --git a/app/src/main/java/com/example/application/musicdownloader/api/server/ServerDataService.java b/app/src/main/java/com/example/application/musicdownloader/api/server/ServerDataService.java deleted file mode 100644 index 2255f9a..0000000 --- a/app/src/main/java/com/example/application/musicdownloader/api/server/ServerDataService.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.example.application.musicdownloader.api.server; - -import retrofit2.Call; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface ServerDataService { - @GET("download") - Call getDownloadLink( - @Query("id") String id, - @Query("encoding") String format, - @Query("quality") String quality - ); -} diff --git a/app/src/main/java/com/example/application/musicdownloader/api/server/ServerData.java b/app/src/main/java/com/example/application/musicdownloader/api/server/model/ServerDownloadData.java similarity index 67% rename from app/src/main/java/com/example/application/musicdownloader/api/server/ServerData.java rename to app/src/main/java/com/example/application/musicdownloader/api/server/model/ServerDownloadData.java index cbd7f04..a013a7e 100644 --- a/app/src/main/java/com/example/application/musicdownloader/api/server/ServerData.java +++ b/app/src/main/java/com/example/application/musicdownloader/api/server/model/ServerDownloadData.java @@ -1,8 +1,8 @@ -package com.example.application.musicdownloader.api.server; +package com.example.application.musicdownloader.api.server.model; import com.google.gson.annotations.SerializedName; -public class ServerData { +public class ServerDownloadData { @SerializedName("download_link") private String downloadLink; diff --git a/app/src/main/java/com/example/application/musicdownloader/api/server/model/ServerQueryData.java b/app/src/main/java/com/example/application/musicdownloader/api/server/model/ServerQueryData.java new file mode 100644 index 0000000..c9416ca --- /dev/null +++ b/app/src/main/java/com/example/application/musicdownloader/api/server/model/ServerQueryData.java @@ -0,0 +1,26 @@ +package com.example.application.musicdownloader.api.server.model; + +import com.google.gson.annotations.SerializedName; + +public class ServerQueryData { + @SerializedName("id") + private String id; + + @SerializedName("title") + private String title; + + @SerializedName("thumbnailUrl") + private String thumbnailUrl; + + public String getId() { + return id; + } + + public String getTitle() { + return title; + } + + public String getThumbnailUrl() { + return thumbnailUrl; + } +} diff --git a/app/src/main/java/com/example/application/musicdownloader/api/server/service/ServerDataService.java b/app/src/main/java/com/example/application/musicdownloader/api/server/service/ServerDataService.java new file mode 100644 index 0000000..4ee0928 --- /dev/null +++ b/app/src/main/java/com/example/application/musicdownloader/api/server/service/ServerDataService.java @@ -0,0 +1,22 @@ +package com.example.application.musicdownloader.api.server.service; + +import com.example.application.musicdownloader.api.server.model.ServerDownloadData; +import com.example.application.musicdownloader.api.server.model.ServerQueryData; + +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface ServerDataService { + @GET("download") + Call getDownloadLink( + @Query("id") String id, + @Query("encoding") String format, + @Query("quality") String quality + ); + + @GET("id") + Call getYouTubeId( + @Query("q") String query + ); +} diff --git a/app/src/main/java/com/example/application/musicdownloader/api/youtube/YouTubeData.java b/app/src/main/java/com/example/application/musicdownloader/api/youtube/YouTubeData.java deleted file mode 100644 index 5865a0b..0000000 --- a/app/src/main/java/com/example/application/musicdownloader/api/youtube/YouTubeData.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.example.application.musicdownloader.api.youtube; - -import com.google.gson.annotations.SerializedName; - -import java.util.ArrayList; - -public class YouTubeData { - @SerializedName("items") - private ArrayList items; - - public String getId() { - return items.get(0).getId().getVideoId(); - } - - public String getTitle() { - return items.get(0).getSnippet().getTitle(); - } - - public String getArtist() { - return items.get(0).getSnippet().getArtist(); - } - - public String getThumbnailURL() { - return items.get(0).getSnippet().getThumbnail().getaDefault().getUrl(); - } - - public String printDebug() { - return getId() + " " + getArtist() + " " + getThumbnailURL(); - } - -} - -class Item { - @SerializedName("id") - private Id id; - - @SerializedName("snippet") - private Snippet snippet; - - public Id getId() { - return this.id; - } - - public Snippet getSnippet() { - return snippet; - } -} - -class Id { - @SerializedName("videoId") - private String videoId; - - public String getVideoId() { - return this.videoId; - } -} - -class Snippet { - @SerializedName("title") - private String title; - - @SerializedName("channelTitle") - private String artist; - - @SerializedName("thumbnails") - private Thumbnail thumbnail; - - public String getTitle() { - return this.title; - } - - public String getArtist() { - return this.artist; - } - - public Thumbnail getThumbnail() { - return this.thumbnail; - } -} - -class Thumbnail { - @SerializedName("default") - private Default aDefault; - - public Default getaDefault() { - return this.aDefault; - } -} - -class Default { - @SerializedName("url") - private String url; - - public String getUrl() { - return this.url; - } -} diff --git a/app/src/main/java/com/example/application/musicdownloader/api/youtube/YouTubeDataService.java b/app/src/main/java/com/example/application/musicdownloader/api/youtube/YouTubeDataService.java deleted file mode 100644 index 479ef55..0000000 --- a/app/src/main/java/com/example/application/musicdownloader/api/youtube/YouTubeDataService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.example.application.musicdownloader.api.youtube; - -import retrofit2.Call; -import retrofit2.http.GET; -import retrofit2.http.Query; - -public interface YouTubeDataService { - @GET("search") - Call getYouTubeData( - @Query("part") String part, - @Query("q") String query, - @Query("type") String type, - @Query("maxResults") String maxResults, - @Query("key") String key - ); -} diff --git a/app/src/main/res/xml/remote_config.xml b/app/src/main/res/xml/remote_config.xml index 9c7ecae..6abacee 100644 --- a/app/src/main/res/xml/remote_config.xml +++ b/app/src/main/res/xml/remote_config.xml @@ -1,10 +1,5 @@ - - YOUTUBE_API_KEY - AIzaSyDBs8dEBTzXOac8jUDnInjvdLirGyMYNZI - - SERVER_URL http://3.84.203.42/