From 3ed4d691b762a8c1d033211ef0aa56c804aa8674 Mon Sep 17 00:00:00 2001 From: aj Date: Wed, 20 Jun 2018 23:22:40 +0100 Subject: [PATCH] new network implemented, daily count working again --- build.gradle | 19 +- .../java/sarsoo/fmframework/fm/FmNetwork.java | 9 + .../sarsoo/fmframework/fm/FmUserNetwork.java | 194 +++++++++++++++--- .../fx/controller/ControllerMain.java | 43 ++-- .../controller/FMObjListPaneController.java | 5 +- .../FMObjListPaneEditController.java | 9 +- .../java/sarsoo/fmframework/music/Artist.java | 1 + .../java/sarsoo/fmframework/music/Tag.java | 7 + .../sarsoo/fmframework/net/Authenticator.java | 1 + .../java/sarsoo/fmframework/net/Network.java | 1 + .../fmframework/net/ParamAssembler.java | 13 -- .../java/sarsoo/fmframework/net/TestCall.java | 1 + .../sarsoo/fmframework/net/URLBuilder.java | 1 + .../java/sarsoo/fmframework/net/User.java | 1 + .../fmframework/fm/FmUserNetworkTest.java | 6 +- .../fmframework/util/FMObjListTest.java | 2 +- 16 files changed, 241 insertions(+), 72 deletions(-) delete mode 100644 src/main/java/sarsoo/fmframework/net/ParamAssembler.java diff --git a/build.gradle b/build.gradle index 6626d88..94c9bd0 100644 --- a/build.gradle +++ b/build.gradle @@ -14,6 +14,10 @@ apply plugin: 'eclipse' mainClassName = 'sarsoo.fmframework.fx.FmFramework' +version = '0.1.0' +sourceCompatibility = 1.8 +targetCompatibility = 1.8 + // In this section you declare where to find the dependencies of your project repositories { // Use 'jcenter' for resolving your dependencies. @@ -36,6 +40,7 @@ dependencies { testCompile 'junit:junit:4.12' } +/* jar { manifest { attributes 'Implementation-Title': 'fmframework', @@ -43,5 +48,17 @@ jar { 'Main-Class': 'sarsoo.fmframework.fx.FmFramework' } baseName = 'fmframework' - version = '0.1.0' + version = version +}*/ + +//create a single Jar with all dependencies +task fatJar(type: Jar) { + manifest { + attributes 'Implementation-Title': 'fmframework', + 'Implementation-Version': version, + 'Main-Class': 'sarsoo.fmframework.fx.FmFramework' + } + baseName = project.name + '-all' + from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } + with jar } diff --git a/src/main/java/sarsoo/fmframework/fm/FmNetwork.java b/src/main/java/sarsoo/fmframework/fm/FmNetwork.java index 977a2c8..b207abf 100644 --- a/src/main/java/sarsoo/fmframework/fm/FmNetwork.java +++ b/src/main/java/sarsoo/fmframework/fm/FmNetwork.java @@ -358,14 +358,23 @@ public class FmNetwork { } public Album refresh(Album album) { + if (ConsoleHandler.isVerbose()) + ConsoleHandler.getConsole().write(">>refreshAlbum: " + album.getName() + " " + album.getArtist().getName()); + return getAlbum(album.getName(), album.getArtist().getName()); } public Artist refresh(Artist artist) { + if (ConsoleHandler.isVerbose()) + ConsoleHandler.getConsole().write(">>refreshArtist: " + artist.getName()); + return getArtist(artist.getName()); } public Track refresh(Track track) { + if (ConsoleHandler.isVerbose()) + ConsoleHandler.getConsole().write(">>refreshTrack: " + track.getName() + " " + track.getArtist().getName()); + Track refreshedTrack = getTrack(track.getName(), track.getArtist().getName()); refreshedTrack.setAlbum(refresh(track.getAlbum())); diff --git a/src/main/java/sarsoo/fmframework/fm/FmUserNetwork.java b/src/main/java/sarsoo/fmframework/fm/FmUserNetwork.java index 8de413e..53a3e01 100644 --- a/src/main/java/sarsoo/fmframework/fm/FmUserNetwork.java +++ b/src/main/java/sarsoo/fmframework/fm/FmUserNetwork.java @@ -1,5 +1,9 @@ package sarsoo.fmframework.fm; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.ArrayList; + import org.json.JSONArray; import org.json.JSONObject; @@ -8,77 +12,207 @@ import com.mashape.unirest.http.JsonNode; import com.mashape.unirest.http.Unirest; import com.mashape.unirest.http.exceptions.UnirestException; +import sarsoo.fmframework.music.Artist; +import sarsoo.fmframework.music.Tag; import sarsoo.fmframework.music.Track; +import sarsoo.fmframework.util.ConsoleHandler; +import sarsoo.fmframework.util.FMObjList; -public class FmUserNetwork extends FmNetwork{ +public class FmUserNetwork extends FmNetwork { + public enum TaggingType { + ARTIST, ALBUM, TRACK + } + public FmUserNetwork(String key, String userName) { super(key, userName); } - + public User getUser() { + if (ConsoleHandler.isVerbose()) + ConsoleHandler.getConsole().write(">>getUser"); + try { - HttpResponse response = Unirest.get("http://ws.audioscrobbler.com/2.0/"). - header("Accept", "application/json"). - header("User-Agent", "fmframework"). - queryString("method","user.getinfo"). - queryString("user", userName). - queryString("api_key", key). - queryString("format", "json"). - asJson(); - + HttpResponse response = Unirest.get("http://ws.audioscrobbler.com/2.0/") + .header("Accept", "application/json").header("User-Agent", "fmframework") + .queryString("method", "user.getinfo").queryString("user", userName).queryString("api_key", key) + .queryString("format", "json").asJson(); + JSONObject obj = new JSONObject(response.getBody().toString()).getJSONObject("user"); - - return new User(obj.getString("name"), - obj.getString("realname"), - obj.getString("url"), - obj.getString("country"), - obj.getInt("age"), - obj.getString("gender").charAt(0), + + return new User(obj.getString("name"), obj.getString("realname"), obj.getString("url"), + obj.getString("country"), obj.getInt("age"), obj.getString("gender").charAt(0), obj.getInt("playcount")); - + } catch (UnirestException e) { e.printStackTrace(); } - + return null; } - + public String getUserRealName() { + if (ConsoleHandler.isVerbose()) + ConsoleHandler.getConsole().write(">>getUserRealname"); return getUser().getRealName(); } - + public int getUserScrobbleCount() { - + if (ConsoleHandler.isVerbose()) + ConsoleHandler.getConsole().write(">>getUserScrobbleCount"); + return getUser().getScrobbleCount(); } - + public Track getLastTrack() { + if (ConsoleHandler.isVerbose()) + ConsoleHandler.getConsole().write(">>getLastTrack"); + + try { + HttpResponse response = Unirest.get("http://ws.audioscrobbler.com/2.0/") + .header("Accept", "application/json").header("User-Agent", "fmframework") + .queryString("method", "user.getrecenttracks").queryString("user", userName) + .queryString("api_key", key).queryString("format", "json").queryString("limit", "1").asJson(); + + JSONArray obj = new JSONObject(response.getBody().toString()).getJSONObject("recenttracks") + .getJSONArray("track"); + + JSONObject track = (JSONObject) obj.get(0); + + Track trackObj = getTrack(track.getString("name"), track.getJSONObject("artist").getString("#text")); + trackObj.setAlbum(getAlbum(track.getJSONObject("album").getString("#text"), + track.getJSONObject("artist").getString("#text"))); + + return trackObj; + + } catch (UnirestException e) { + e.printStackTrace(); + } + + return null; + } + + public int getScrobblesToday() { + if (ConsoleHandler.isVerbose()) + ConsoleHandler.getConsole().write(">>getScrobblesToday"); + + LocalDate local = LocalDate.now(); + + ZoneId zoneId = ZoneId.systemDefault(); + long epoch = local.atStartOfDay(zoneId).toEpochSecond(); + try { HttpResponse response = Unirest.get("http://ws.audioscrobbler.com/2.0/"). header("Accept", "application/json"). header("User-Agent", "fmframework"). queryString("method","user.getrecenttracks"). queryString("user", userName). + queryString("from", epoch). + queryString("limit", 1). queryString("api_key", key). queryString("format", "json"). - queryString("limit", "1"). asJson(); - JSONArray obj = new JSONObject(response.getBody().toString()).getJSONObject("recenttracks").getJSONArray("track"); + int total = new JSONObject(response.getBody().toString()).getJSONObject("recenttracks").getJSONObject("@attr").getInt("total"); - JSONObject track = (JSONObject) obj.get(0); + return total; - Track trackObj = getTrack(track.getString("name"), track.getJSONObject("artist").getString("#text")); - trackObj.setAlbum(getAlbum(track.getJSONObject("album").getString("#text"), track.getJSONObject("artist").getString("#text"))); + } catch (UnirestException e) { + e.printStackTrace(); + } + + return 0; + } + + public ArrayList getTags(){ + if (ConsoleHandler.isVerbose()) + ConsoleHandler.getConsole().write(">>getTags"); + + try { + HttpResponse response = Unirest.get("http://ws.audioscrobbler.com/2.0/"). + header("Accept", "application/json"). + header("User-Agent", "fmframework"). + queryString("method","user.gettoptags"). + queryString("user", userName). + queryString("api_key", key). + queryString("format", "json"). + asJson(); - return trackObj; + JSONArray tagJsonArray = new JSONObject(response.getBody().toString()).getJSONObject("toptags").getJSONArray("tag"); + + JSONObject tagJson; + + ArrayList tags = new ArrayList(); + + int counter; + for(counter = 0; counter < tagJsonArray.length(); counter++) { + + tagJson = (JSONObject) tagJsonArray.get(counter); + + Tag tag = new Tag(tagJson.getString("name"), tagJson.getString("url"), tagJson.getInt("count")); + + tags.add(tag); + + } + + return tags; } catch (UnirestException e) { e.printStackTrace(); } return null; + } + + public FMObjList getTag(String tagName) { + if (ConsoleHandler.isVerbose()) + ConsoleHandler.getConsole().write(">>getTag: " + tagName); + + try { + HttpResponse response = Unirest.get("http://ws.audioscrobbler.com/2.0/"). + header("Accept", "application/json"). + header("User-Agent", "fmframework"). + queryString("method","user.getpersonaltags"). + queryString("user", userName). + queryString("tag", tagName). + queryString("taggingtype", "artist"). + queryString("limit", 70). + queryString("api_key", key). + queryString("format", "json"). + asJson(); + + JSONArray tagJsonArray = new JSONObject(response.getBody().toString()).getJSONObject("taggings").getJSONObject("artists").getJSONArray("artist"); + + JSONObject artistJson; + + FMObjList list = new FMObjList(); + + list.setGroupName(tagName); + + int counter; + for(counter = 0; counter < tagJsonArray.length(); counter++) { + + artistJson = (JSONObject) tagJsonArray.get(counter); + + Artist artist = getArtist(artistJson.getString("name")); + + if (ConsoleHandler.isVerbose()) + ConsoleHandler.getConsole().write(">Tag: " + tagName + ", " + artist.getName()); + + list.add(artist); + + } + + return list; + + } catch (UnirestException e) { + e.printStackTrace(); + } + + return null; + + } + } diff --git a/src/main/java/sarsoo/fmframework/fx/controller/ControllerMain.java b/src/main/java/sarsoo/fmframework/fx/controller/ControllerMain.java index 6222a90..3f26aa7 100644 --- a/src/main/java/sarsoo/fmframework/fx/controller/ControllerMain.java +++ b/src/main/java/sarsoo/fmframework/fx/controller/ControllerMain.java @@ -32,7 +32,6 @@ import sarsoo.fmframework.music.Track; import sarsoo.fmframework.net.Key; import sarsoo.fmframework.util.ConsoleHandler; import sarsoo.fmframework.util.FMObjList; -import sarsoo.fmframework.util.Getter; import sarsoo.fmframework.util.Reference; import javafx.scene.control.*; import javafx.scene.chart.*; @@ -69,7 +68,7 @@ public class ControllerMain { FmUserNetwork net = new FmUserNetwork(Key.getKey(), Reference.getUserName()); - String scrobblesToday = numberFormat.format(0); + String scrobblesToday = numberFormat.format(net.getScrobblesToday()); String scrobbles = numberFormat.format(net.getUserScrobbleCount()); TrackTab tab = new TrackTab(net.getLastTrack()); @@ -105,7 +104,9 @@ public class ControllerMain { } public void refreshTagMenu() { - tags = Getter.getUserTags(Reference.getUserName()); + FmUserNetwork net = new FmUserNetwork(Key.getKey(), Reference.getUserName()); + + tags = net.getTags(); Collections.sort(tags); @@ -131,7 +132,7 @@ public class ControllerMain { protected Void call() throws Exception { FMObjListTab tab = new FMObjListTab( - Getter.getUserTag(Reference.getUserName(), name)); + net.getTag(name)); final CountDownLatch latch = new CountDownLatch(1); Platform.runLater(new Runnable() { @@ -166,25 +167,27 @@ public class ControllerMain { return new Task() { @Override protected Void call() throws Exception { + + FmUserNetwork net = new FmUserNetwork(Key.getKey(), Reference.getUserName()); - int total = Getter.getScrobbles(Reference.getUserName()); + int total = net.getUserScrobbleCount(); - FMObjList rap = Getter.getUserTag(Reference.getUserName(), "rap"); - FMObjList classicRap = Getter.getUserTag(Reference.getUserName(), "classic rap"); - FMObjList grime = Getter.getUserTag(Reference.getUserName(), "grime"); + FMObjList rap = net.getTag("rap"); + FMObjList classicRap = net.getTag("classic rap"); + FMObjList grime = net.getTag("grime"); - FMObjList classicRock = Getter.getUserTag(Reference.getUserName(), "classic rock"); - FMObjList popPunk = Getter.getUserTag(Reference.getUserName(), "pop punk"); - FMObjList electronic = Getter.getUserTag(Reference.getUserName(), "electronic"); - FMObjList metal = Getter.getUserTag(Reference.getUserName(), "metal"); - FMObjList indie = Getter.getUserTag(Reference.getUserName(), "indie"); - FMObjList rock = Getter.getUserTag(Reference.getUserName(), "rock"); - FMObjList jazz = Getter.getUserTag(Reference.getUserName(), "jazz"); - FMObjList blues = Getter.getUserTag(Reference.getUserName(), "blues"); - FMObjList core = Getter.getUserTag(Reference.getUserName(), "core"); - FMObjList rnb = Getter.getUserTag(Reference.getUserName(), "rnb"); - FMObjList soulFunk = Getter.getUserTag(Reference.getUserName(), "soulfunk"); - FMObjList punk = Getter.getUserTag(Reference.getUserName(), "punk"); + FMObjList classicRock = net.getTag("classic rock"); + FMObjList popPunk = net.getTag("pop punk"); + FMObjList electronic = net.getTag("electronic"); + FMObjList metal = net.getTag("metal"); + FMObjList indie = net.getTag("indie"); + FMObjList rock = net.getTag("rock"); + FMObjList jazz = net.getTag("jazz"); + FMObjList blues = net.getTag("blues"); + FMObjList core = net.getTag("core"); + FMObjList rnb = net.getTag("rnb"); + FMObjList soulFunk = net.getTag("soulfunk"); + FMObjList punk = net.getTag("punk"); int rapTotal = rap.getTotalUserScrobbles() + classicRap.getTotalUserScrobbles() + grime.getTotalUserScrobbles(); diff --git a/src/main/java/sarsoo/fmframework/fx/controller/FMObjListPaneController.java b/src/main/java/sarsoo/fmframework/fx/controller/FMObjListPaneController.java index db404cf..8c8fdf6 100644 --- a/src/main/java/sarsoo/fmframework/fx/controller/FMObjListPaneController.java +++ b/src/main/java/sarsoo/fmframework/fx/controller/FMObjListPaneController.java @@ -21,7 +21,6 @@ import sarsoo.fmframework.music.Artist; import sarsoo.fmframework.music.FMObj; import sarsoo.fmframework.net.Key; import sarsoo.fmframework.util.FMObjList; -import sarsoo.fmframework.util.Getter; import sarsoo.fmframework.util.Maths; import sarsoo.fmframework.util.Reference; import javafx.scene.layout.*; @@ -53,7 +52,7 @@ public class FMObjListPaneController { double percent = Maths.getPercentListening(list, Reference.getUserName()); NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.US); - labelTotalScrobbles.setText("Σ " + list.getTotalUserScrobbles()); + labelTotalScrobbles.setText("" + list.getTotalUserScrobbles()); labelPercent.setText(String.format("%.2f%%", percent)); Collections.sort(list); @@ -124,7 +123,7 @@ public class FMObjListPaneController { @FXML protected void handleRefresh(ActionEvent event) { - list = Getter.getUserTag(Reference.getUserName(), list.getGroupName()); + list = new FmUserNetwork(Key.getKey(), Reference.getUserName()).getTag(list.getGroupName()); double percent = Maths.getPercentListening(list, Reference.getUserName()); diff --git a/src/main/java/sarsoo/fmframework/fx/controller/FMObjListPaneEditController.java b/src/main/java/sarsoo/fmframework/fx/controller/FMObjListPaneEditController.java index 138ab48..ad609ce 100644 --- a/src/main/java/sarsoo/fmframework/fx/controller/FMObjListPaneEditController.java +++ b/src/main/java/sarsoo/fmframework/fx/controller/FMObjListPaneEditController.java @@ -27,7 +27,6 @@ import sarsoo.fmframework.music.FMObj; import sarsoo.fmframework.music.Track; import sarsoo.fmframework.net.Key; import sarsoo.fmframework.util.FMObjList; -import sarsoo.fmframework.util.Getter; import sarsoo.fmframework.util.Maths; import sarsoo.fmframework.util.Reference; import javafx.scene.layout.*; @@ -144,17 +143,21 @@ public class FMObjListPaneEditController { FmNetwork net = new FmNetwork(Key.getKey(), Reference.getUserName()); + FMObjList newList = new FMObjList(); int counter; for (counter = 0; counter < list.size(); counter++) { - net.refresh(list.get(counter)); + + newList.add(net.refresh(list.get(counter))); } + + setList(newList); } public void refresh() { double percent = Maths.getPercentListening(list, Reference.getUserName()); NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.US); - labelTotalScrobbles.setText("Σ " + list.getTotalUserScrobbles()); + labelTotalScrobbles.setText("" + list.getTotalUserScrobbles()); labelPercent.setText(String.format("%.2f%%", percent)); Collections.sort(list); diff --git a/src/main/java/sarsoo/fmframework/music/Artist.java b/src/main/java/sarsoo/fmframework/music/Artist.java index 0866a64..239bb77 100644 --- a/src/main/java/sarsoo/fmframework/music/Artist.java +++ b/src/main/java/sarsoo/fmframework/music/Artist.java @@ -66,6 +66,7 @@ public class Artist extends FMObj implements Serializable{ return null; } + @Deprecated public static Artist getArtistByMbid(String mbid, String username) { String url = URLBuilder.getArtistInfoMbidUrl(mbid, username); Document response = Network.getResponse(url); diff --git a/src/main/java/sarsoo/fmframework/music/Tag.java b/src/main/java/sarsoo/fmframework/music/Tag.java index 3f3cb60..bb83e41 100644 --- a/src/main/java/sarsoo/fmframework/music/Tag.java +++ b/src/main/java/sarsoo/fmframework/music/Tag.java @@ -13,6 +13,13 @@ public class Tag implements Comparable, Serializable{ private String summary; private String content; + public Tag(String name, String url, int count) { + this.setName(name); + this.setUrl(url); + this.count = count; + } + + @Deprecated public Tag(String name, String url) { this.setName(name); this.setUrl(url); diff --git a/src/main/java/sarsoo/fmframework/net/Authenticator.java b/src/main/java/sarsoo/fmframework/net/Authenticator.java index 85f5cdb..11f5daa 100644 --- a/src/main/java/sarsoo/fmframework/net/Authenticator.java +++ b/src/main/java/sarsoo/fmframework/net/Authenticator.java @@ -9,6 +9,7 @@ import java.net.URLEncoder; import java.util.LinkedHashMap; import java.util.Map; +@Deprecated public class Authenticator { public String write() { URL url; diff --git a/src/main/java/sarsoo/fmframework/net/Network.java b/src/main/java/sarsoo/fmframework/net/Network.java index 2c242ed..d81b319 100644 --- a/src/main/java/sarsoo/fmframework/net/Network.java +++ b/src/main/java/sarsoo/fmframework/net/Network.java @@ -16,6 +16,7 @@ import org.xml.sax.SAXException; import sarsoo.fmframework.error.ApiCallException; +@Deprecated public class Network { public static Document getResponse(String urlString) { diff --git a/src/main/java/sarsoo/fmframework/net/ParamAssembler.java b/src/main/java/sarsoo/fmframework/net/ParamAssembler.java deleted file mode 100644 index 5889bdd..0000000 --- a/src/main/java/sarsoo/fmframework/net/ParamAssembler.java +++ /dev/null @@ -1,13 +0,0 @@ -package sarsoo.fmframework.net; - -public class ParamAssembler { - public static byte[] getToken() { - return null; - } - - public static void getSignature() { - - - - } -} diff --git a/src/main/java/sarsoo/fmframework/net/TestCall.java b/src/main/java/sarsoo/fmframework/net/TestCall.java index b2d6d8f..0101d38 100644 --- a/src/main/java/sarsoo/fmframework/net/TestCall.java +++ b/src/main/java/sarsoo/fmframework/net/TestCall.java @@ -7,6 +7,7 @@ import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; +@Deprecated public class TestCall { public static void test(String urlString) { diff --git a/src/main/java/sarsoo/fmframework/net/URLBuilder.java b/src/main/java/sarsoo/fmframework/net/URLBuilder.java index b4b6ac2..d2037c1 100644 --- a/src/main/java/sarsoo/fmframework/net/URLBuilder.java +++ b/src/main/java/sarsoo/fmframework/net/URLBuilder.java @@ -7,6 +7,7 @@ import java.time.LocalDateTime; import sarsoo.fmframework.music.Track; +@Deprecated public class URLBuilder { public enum FMObjType{ diff --git a/src/main/java/sarsoo/fmframework/net/User.java b/src/main/java/sarsoo/fmframework/net/User.java index b30ea01..97c4e77 100644 --- a/src/main/java/sarsoo/fmframework/net/User.java +++ b/src/main/java/sarsoo/fmframework/net/User.java @@ -12,6 +12,7 @@ import sarsoo.fmframework.parser.Parser; import sarsoo.fmframework.util.FMObjList; import sarsoo.fmframework.util.Reference; +@Deprecated public class User { protected String userName; diff --git a/src/test/java/sarsoo/fmframework/fm/FmUserNetworkTest.java b/src/test/java/sarsoo/fmframework/fm/FmUserNetworkTest.java index e9099b7..7c38f22 100644 --- a/src/test/java/sarsoo/fmframework/fm/FmUserNetworkTest.java +++ b/src/test/java/sarsoo/fmframework/fm/FmUserNetworkTest.java @@ -4,12 +4,16 @@ import static org.junit.Assert.*; import org.junit.Test; +import sarsoo.fmframework.music.Artist; +import sarsoo.fmframework.music.FMObj; +import sarsoo.fmframework.util.FMObjList; + public class FmUserNetworkTest { @Test public void test() { FmUserNetwork network = new FmUserNetwork("54a9f5c4c36f5d2cba0d4ffe3846e8b4", "sarsoo"); - System.out.println(network.getLastTrack()); + network.getScrobblesToday(); } } diff --git a/src/test/java/sarsoo/fmframework/util/FMObjListTest.java b/src/test/java/sarsoo/fmframework/util/FMObjListTest.java index f33c167..aaf0f67 100644 --- a/src/test/java/sarsoo/fmframework/util/FMObjListTest.java +++ b/src/test/java/sarsoo/fmframework/util/FMObjListTest.java @@ -12,7 +12,7 @@ public class FMObjListTest { // Album album = new Album(); - fail("Not yet implemented"); +// fail("Not yet implemented"); } }