added top album tab, moved error catching from invocation to implicit

This commit is contained in:
aj 2019-05-30 17:08:21 +01:00
parent 59bb4fdb6f
commit 6904663e59
27 changed files with 731 additions and 217 deletions

View File

@ -112,6 +112,16 @@ public class FmNetwork {
.addArg(e.getMessage())); .addArg(e.getMessage()));
} }
try {
JSONArray imageArray = albumJson.getJSONArray("image");
JSONObject imageObj = (JSONObject) imageArray.get(imageArray.length() - 1);
builder.setImageUrl(imageObj.getString("#text"));
} catch (JSONException e) {
log.logInfo(new InfoEntry("getAlbum").addArg("no image for").addArg(nameIn)
.addArg(e.getMessage()));
}
try { try {
JSONObject wikiJson = albumJson.getJSONObject("wiki"); JSONObject wikiJson = albumJson.getJSONObject("wiki");

View File

@ -280,9 +280,28 @@ public class FmUserNetwork extends FmNetwork {
return LocalDateTime.ofInstant(Instant.ofEpochSecond(uts), ZoneId.systemDefault()); return LocalDateTime.ofInstant(Instant.ofEpochSecond(uts), ZoneId.systemDefault());
} }
public FMObjList getTopTracks(String period, int number) throws ApiCallException { private String getPeriod(TimePeriod period) {
switch(period){
case OVERALL:
return "overall";
case SEVENDAY:
return "7day";
case ONEMONTH:
return "1month";
case THREEMONTH:
return "3month";
case SIXMONTH:
return "6month";
case TWELVEMONTH:
return "12month";
default:
throw new IllegalArgumentException("invalid period provided");
}
}
Logger.getLog().log(new LogEntry("getTopTracks").addArg(period).addArg(Integer.toString(number))); public FMObjList getTopTracks(TimePeriod period, int number) throws ApiCallException {
Logger.getLog().log(new LogEntry("getTopTracks").addArg(getPeriod(period)).addArg(Integer.toString(number)));
int limit = 50; int limit = 50;
@ -302,7 +321,7 @@ public class FmUserNetwork extends FmNetwork {
HashMap<String, String> parameters = new HashMap<String, String>(); HashMap<String, String> parameters = new HashMap<String, String>();
parameters.put("user", userName); parameters.put("user", userName);
parameters.put("period", period); parameters.put("period", getPeriod(period));
parameters.put("limit", Integer.toString(limit)); parameters.put("limit", Integer.toString(limit));
parameters.put("page", Integer.toString(counter + 1)); parameters.put("page", Integer.toString(counter + 1));
@ -326,9 +345,9 @@ public class FmUserNetwork extends FmNetwork {
return tracks; return tracks;
} }
public FMObjList getTopAlbums(String period, int number) throws ApiCallException { public FMObjList getTopAlbums(TimePeriod period, int number) throws ApiCallException {
Logger.getLog().log(new LogEntry("getTopAlbums").addArg(period).addArg(Integer.toString(number))); Logger.getLog().log(new LogEntry("getTopAlbums").addArg(getPeriod(period)).addArg(Integer.toString(number)));
int limit = 50; int limit = 50;
@ -348,7 +367,7 @@ public class FmUserNetwork extends FmNetwork {
HashMap<String, String> parameters = new HashMap<String, String>(); HashMap<String, String> parameters = new HashMap<String, String>();
parameters.put("user", userName); parameters.put("user", userName);
parameters.put("period", period); parameters.put("period", getPeriod(period));
parameters.put("limit", Integer.toString(limit)); parameters.put("limit", Integer.toString(limit));
parameters.put("page", Integer.toString(counter + 1)); parameters.put("page", Integer.toString(counter + 1));
@ -361,9 +380,15 @@ public class FmUserNetwork extends FmNetwork {
if (albums.size() < number) { if (albums.size() < number) {
Artist artist = new ArtistBuilder(json.getJSONObject("artist").getString("name")).build(); Artist artist = new ArtistBuilder(json.getJSONObject("artist").getString("name")).build();
Album album = new AlbumBuilder(json.getString("name"), artist) AlbumBuilder albumBuilder = new AlbumBuilder(json.getString("name"), artist)
.setUserPlayCount(json.getInt("playcount")).build(); .setUserPlayCount(json.getInt("playcount"));
JSONArray imageArray = json.getJSONArray("image");
JSONObject imageObj = (JSONObject) imageArray.get(imageArray.length() - 1);
albumBuilder.setImageUrl(imageObj.getString("#text"));
Album album = albumBuilder.build();
albums.add(album); albums.add(album);
} }
@ -373,9 +398,9 @@ public class FmUserNetwork extends FmNetwork {
return albums; return albums;
} }
public FMObjList getTopArtists(String period, int number) throws ApiCallException { public FMObjList getTopArtists(TimePeriod period, int number) throws ApiCallException {
Logger.getLog().log(new LogEntry("getTopArtists").addArg(period).addArg(Integer.toString(number))); Logger.getLog().log(new LogEntry("getTopArtists").addArg(getPeriod(period)).addArg(Integer.toString(number)));
int limit = 50; int limit = 50;
@ -395,7 +420,7 @@ public class FmUserNetwork extends FmNetwork {
HashMap<String, String> parameters = new HashMap<String, String>(); HashMap<String, String> parameters = new HashMap<String, String>();
parameters.put("user", userName); parameters.put("user", userName);
parameters.put("period", period); parameters.put("period", getPeriod(period));
parameters.put("limit", Integer.toString(limit)); parameters.put("limit", Integer.toString(limit));
parameters.put("page", Integer.toString(counter + 1)); parameters.put("page", Integer.toString(counter + 1));

View File

@ -0,0 +1,12 @@
package sarsoo.fmframework.fm;
public enum TimePeriod {
OVERALL,
SEVENDAY,
ONEMONTH,
THREEMONTH,
SIXMONTH,
TWELVEMONTH
}

View File

@ -0,0 +1,18 @@
package sarsoo.fmframework.fx;
import javafx.scene.image.Image;
public class TiledImage extends Image {
private int index;
public TiledImage(String url, int index) {
super(url);
this.index = index;
}
public int getIndex() {
return index;
}
}

View File

@ -74,12 +74,7 @@ public class FMObjListPaneController {
@Override @Override
public void handle(Event event) { public void handle(Event event) {
try { FmFramework.getController().addTab(new ArtistTab((Artist) obj));
FmFramework.getController().addTab(new ArtistTab((Artist) obj));
} catch (IOException e) {
e.printStackTrace();
}
} }
@ -165,12 +160,7 @@ public class FMObjListPaneController {
@Override @Override
public void handle(Event event) { public void handle(Event event) {
try { FmFramework.getController().addTab(new ArtistTab((Artist) obj));
FmFramework.getController().addTab(new ArtistTab((Artist) obj));
} catch (IOException e) {
e.printStackTrace();
}
} }

View File

@ -106,18 +106,12 @@ public class FMObjListPaneEditController {
@Override @Override
public void handle(Event event) { public void handle(Event event) {
try { if (obj.getClass() == Artist.class) {
FmFramework.getController().addTab(new ArtistTab((Artist) obj));
if (obj.getClass() == Artist.class) { } else if (obj.getClass() == Album.class) {
FmFramework.getController().addTab(new ArtistTab((Artist) obj)); FmFramework.getController().addTab(new AlbumTab((Album) obj));
} else if (obj.getClass() == Album.class) { } else if (obj.getClass() == Track.class) {
FmFramework.getController().addTab(new AlbumTab((Album) obj)); FmFramework.getController().addTab(new TrackTab((Track) obj));
} else if (obj.getClass() == Track.class) {
FmFramework.getController().addTab(new TrackTab((Track) obj));
}
} catch (IOException e) {
e.printStackTrace();
} }
} }

View File

@ -35,6 +35,7 @@ import sarsoo.fmframework.fx.tab.FMObjListEditTab;
import sarsoo.fmframework.fx.tab.GenrePieChartTab; import sarsoo.fmframework.fx.tab.GenrePieChartTab;
import sarsoo.fmframework.fx.tab.ScrobbleChartTab; import sarsoo.fmframework.fx.tab.ScrobbleChartTab;
import sarsoo.fmframework.fx.tab.ScrobbleTab; import sarsoo.fmframework.fx.tab.ScrobbleTab;
import sarsoo.fmframework.fx.tab.TopAlbumTab;
import sarsoo.fmframework.fx.tab.TrackTab; import sarsoo.fmframework.fx.tab.TrackTab;
import sarsoo.fmframework.fx.tab.WebViewTab; import sarsoo.fmframework.fx.tab.WebViewTab;
import sarsoo.fmframework.log.Log; import sarsoo.fmframework.log.Log;
@ -123,19 +124,15 @@ public class RootController {
getLastTrack.setOnSucceeded(new EventHandler<WorkerStateEvent>() { getLastTrack.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override @Override
public void handle(WorkerStateEvent t) { public void handle(WorkerStateEvent t) {
try { TrackTab tab = new TrackTab(((Track) t.getSource().getValue()));
TrackTab tab = new TrackTab(((Track) t.getSource().getValue()));
Platform.runLater(new Runnable() { Platform.runLater(new Runnable() {
@Override @Override
public void run() { public void run() {
addTab(tab); addTab(tab, false);
} }
}); });
} catch (IOException e) {
e.printStackTrace();
}
} }
}); });
getLastTrack.start(); getLastTrack.start();
@ -181,10 +178,15 @@ public class RootController {
} }
public void addTab(Tab tab) { public void addTab(Tab tab) {
addTab(tab, true);
}
public void addTab(Tab tab, Boolean select) {
tabPane.getTabs().add(tab); tabPane.getTabs().add(tab);
SingleSelectionModel<Tab> selectionModel = tabPane.getSelectionModel(); SingleSelectionModel<Tab> selectionModel = tabPane.getSelectionModel();
selectionModel.select(tab); if(select)
selectionModel.select(tab);
} }
@FXML @FXML
@ -243,13 +245,14 @@ public class RootController {
} }
}); });
addTab(tab); addTab(tab, true);
} }
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} catch (ApiCallException e) {} } catch (ApiCallException e) {
}
} }
protected void completeAuth(FmAuthNetwork net, String token) { protected void completeAuth(FmAuthNetwork net, String token) {
@ -262,7 +265,8 @@ public class RootController {
FmFramework.getSessionConfig().addVariable(new ConfigVariable("session_key", sk)); FmFramework.getSessionConfig().addVariable(new ConfigVariable("session_key", sk));
} }
} catch (ApiCallException e) {} } catch (ApiCallException e) {
}
} }
public void changeUsername() { public void changeUsername() {
@ -395,12 +399,8 @@ public class RootController {
@FXML @FXML
protected void handleCreateList(ActionEvent event) { protected void handleCreateList(ActionEvent event) {
try { Tab tab = new FMObjListEditTab();
Tab tab = new FMObjListEditTab(); addTab(tab, true);
addTab(tab);
} catch (IOException e) {
e.printStackTrace();
}
} }
@ -421,21 +421,22 @@ public class RootController {
@FXML @FXML
protected void handleScrobble(ActionEvent event) throws IOException { protected void handleScrobble(ActionEvent event) throws IOException {
addTab(new ScrobbleTab()); addTab(new ScrobbleTab(), true);
} }
@FXML @FXML
protected void handleOpenConsole(ActionEvent event) { protected void handleOpenConsole(ActionEvent event) {
addTab(new ConsoleTab()); addTab(new ConsoleTab(), true);
}
@FXML
protected void handleTopAlbum(ActionEvent event) {
addTab(new TopAlbumTab(), true);
} }
@FXML @FXML
protected void handleScrobbleChart(ActionEvent event) { protected void handleScrobbleChart(ActionEvent event) {
try { addTab(new ScrobbleChartTab(), true);
addTab(new ScrobbleChartTab());
} catch (IOException e) {
e.printStackTrace();
}
} }
@ -453,17 +454,13 @@ public class RootController {
FMObjList list = persist.readListFromFile(file); FMObjList list = persist.readListFromFile(file);
list.setGroupName(file.getName()); list.setGroupName(file.getName());
list.refresh(); list.refresh();
try { addTab(new FMObjListEditTab(list), true);
addTab(new FMObjListEditTab(list));
} catch (IOException e) {
e.printStackTrace();
}
} }
} }
@FXML @FXML
protected void handleOpenEdit(ActionEvent event) { protected void handleOpenEdit(ActionEvent event) {
addTab(new ConsoleTab()); addTab(new ConsoleTab(), true);
} }
public void closeCurrentTab() { public void closeCurrentTab() {
@ -484,7 +481,7 @@ public class RootController {
@FXML @FXML
protected void handleGenrePieTab(ActionEvent event) { protected void handleGenrePieTab(ActionEvent event) {
addTab(new GenrePieChartTab()); addTab(new GenrePieChartTab(), true);
} }
private ArrayList<Tag> tags; private ArrayList<Tag> tags;

View File

@ -39,6 +39,8 @@ public class ScrobbleChartPaneController {
// dropDownTimeRange.setItems(FXCollections.observableArrayList("week", "month", // dropDownTimeRange.setItems(FXCollections.observableArrayList("week", "month",
// "3 month", "6 month", "year")); // "3 month", "6 month", "year"));
dropDownTimeRange.getItems().addAll("week", "30 day", "90 day", "180 day", "year"); dropDownTimeRange.getItems().addAll("week", "30 day", "90 day", "180 day", "year");
dropDownTimeRange.getSelectionModel().select(0);
} }
@FXML @FXML

View File

@ -0,0 +1,213 @@
package sarsoo.fmframework.fx.controller;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import javafx.application.Platform;
import javafx.collections.ObservableList;
import javafx.concurrent.WorkerStateEvent;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Label;
import javafx.scene.control.ToolBar;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.TilePane;
import sarsoo.fmframework.config.Config;
import sarsoo.fmframework.fm.FmUserNetwork;
import sarsoo.fmframework.fm.TimePeriod;
import sarsoo.fmframework.fx.FmFramework;
import sarsoo.fmframework.fx.TiledImage;
import sarsoo.fmframework.fx.service.GetFXImageService;
import sarsoo.fmframework.fx.service.GetTopAlbumsService;
import sarsoo.fmframework.music.Album;
import sarsoo.fmframework.music.FMObj;
import sarsoo.fmframework.util.FMObjList;
public class TopAlbumController {
@FXML
protected BorderPane borderPane;
@FXML
protected ToolBar toolBar;
@FXML
protected ChoiceBox<String> dropDownTimeRange;
@FXML
protected ChoiceBox<Integer> dropDownLimit;
@FXML
protected Button buttonLoad;
@FXML
protected Button buttonGenerate;
@FXML
protected GridPane gridPane;
@FXML
protected TilePane tilePane;
FMObjList albums;
ArrayList<TiledImage> images = new ArrayList<>();
@FXML
public void initialize() {
dropDownTimeRange.getItems().addAll("week", "30 day", "90 day", "180 day", "year", "overall");
for (int i = 1; i < 16; i++) {
dropDownLimit.getItems().add(i);
}
for (int i = 20; i < 110; i+=10) {
dropDownLimit.getItems().add(i);
}
dropDownTimeRange.getSelectionModel().select(0);
dropDownLimit.getSelectionModel().select(0);
}
@FXML
private void handleLoad(ActionEvent event) {
Config config = FmFramework.getSessionConfig();
FmUserNetwork net = new FmUserNetwork(config.getValue("api_key"), config.getValue("username"));
String value = (String) dropDownTimeRange.getValue();
TimePeriod timePeriod = null;
switch (value) {
case "week":
timePeriod = TimePeriod.SEVENDAY;
break;
case "30 day":
timePeriod = TimePeriod.ONEMONTH;
break;
case "90 day":
timePeriod = TimePeriod.THREEMONTH;
break;
case "180 day":
timePeriod = TimePeriod.SIXMONTH;
break;
case "year":
timePeriod = TimePeriod.TWELVEMONTH;
break;
case "overall":
timePeriod = TimePeriod.OVERALL;
break;
}
GetTopAlbumsService service = new GetTopAlbumsService(timePeriod, dropDownLimit.getValue(), net);
service.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent t) {
Platform.runLater(new Runnable() {
@Override
public void run() {
gridPane.getChildren().clear();
if (albums != null)
albums.clear();
albums = (FMObjList) t.getSource().getValue();
if (albums.size() > 0) {
buttonGenerate.setDisable(false);
} else {
buttonGenerate.setDisable(true);
}
int counter = 0;
for (FMObj fmObj : albums) {
Album album = (Album) fmObj;
Label albumName = new Label(album.getName().toLowerCase());
Label artistName = new Label(album.getArtist().getName().toLowerCase());
Label userPlays = new Label(Integer.toString(album.getUserPlayCount()));
gridPane.add(new Label(Integer.toString(counter + 1)), 0, counter);
gridPane.add(albumName, 1, counter);
gridPane.add(artistName, 2, counter);
gridPane.add(userPlays, 3, counter);
counter++;
}
}
});
}
});
service.start();
}
@FXML
private void handleGenerate(ActionEvent event) {
if (albums != null) {
if (albums.size() > 0) {
tilePane.getChildren().clear();
images.clear();
int counter = 0;
for (FMObj obj : albums) {
Album album = (Album) obj;
GetFXImageService service = new GetFXImageService(album.getImageURL().toString(), counter);
service.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent t) {
TiledImage image = (TiledImage) t.getSource().getValue();
images.add(image);
refreshImages();
}
});
service.start();
counter++;
}
}
}
}
private void refreshImages() {
ObservableList<Node> list = tilePane.getChildren();
list.clear();
Collections.sort(images, new Comparator<TiledImage>() {
@Override
public int compare(TiledImage arg0, TiledImage arg1) {
return arg0.getIndex() - arg1.getIndex();
}
});
for(TiledImage image: images) {
list.add(new ImageView(image));
}
}
}

View File

@ -62,11 +62,7 @@ public class AlbumBorderPaneController extends FMObjBorderPaneController {
viewArtist.setOnAction(new EventHandler<ActionEvent>() { viewArtist.setOnAction(new EventHandler<ActionEvent>() {
@Override @Override
public void handle(ActionEvent e) { public void handle(ActionEvent e) {
try { FmFramework.getController().addTab(new ArtistTab(album.getArtist()));
FmFramework.getController().addTab(new ArtistTab(album.getArtist()));
} catch (IOException e1) {
e1.printStackTrace();
}
} }
}); });
} else { } else {

View File

@ -53,11 +53,7 @@ public class TrackBorderPaneController extends FMObjBorderPaneController {
viewAlbum.setOnAction(new EventHandler<ActionEvent>() { viewAlbum.setOnAction(new EventHandler<ActionEvent>() {
@Override @Override
public void handle(ActionEvent e) { public void handle(ActionEvent e) {
try { FmFramework.getController().addTab(new AlbumTab(track.getAlbum()));
FmFramework.getController().addTab(new AlbumTab(track.getAlbum()));
} catch (IOException e1) {
e1.printStackTrace();
}
} }
}); });
}else { }else {
@ -68,11 +64,7 @@ public class TrackBorderPaneController extends FMObjBorderPaneController {
viewArtist.setOnAction(new EventHandler<ActionEvent>() { viewArtist.setOnAction(new EventHandler<ActionEvent>() {
@Override @Override
public void handle(ActionEvent e) { public void handle(ActionEvent e) {
try { FmFramework.getController().addTab(new ArtistTab(track.getArtist()));
FmFramework.getController().addTab(new ArtistTab(track.getArtist()));
} catch (IOException e1) {
e1.printStackTrace();
}//
} }
}); });
}else { }else {

View File

@ -0,0 +1,42 @@
package sarsoo.fmframework.fx.service;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import javafx.scene.image.Image;
import sarsoo.fmframework.fx.TiledImage;
import sarsoo.fmframework.log.Logger;
import sarsoo.fmframework.log.entry.ErrorEntry;
public class GetFXImageService extends Service<TiledImage> {
private String url;
private int index;
public GetFXImageService(String url, int index) {
super();
this.url = url;
this.index = index;
}
@Override
protected Task<TiledImage> createTask() {
return new Task<TiledImage>() {
@Override
protected TiledImage call() throws Exception {
return new TiledImage(url, index);
}
};
}
@Override
protected void failed() {
super.failed();
Logger.getLog().logError(new ErrorEntry("failed to get image " + url));
}
}

View File

@ -0,0 +1,45 @@
package sarsoo.fmframework.fx.service;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import sarsoo.fmframework.fm.FmUserNetwork;
import sarsoo.fmframework.fm.TimePeriod;
import sarsoo.fmframework.log.Logger;
import sarsoo.fmframework.log.entry.ErrorEntry;
import sarsoo.fmframework.util.FMObjList;
public class GetTopAlbumsService extends Service<FMObjList> {
private int limit;
private TimePeriod period;
private FmUserNetwork net;
public GetTopAlbumsService(TimePeriod period, int limit, FmUserNetwork net) {
super();
this.limit = limit;
this.period = period;
this.net = net;
}
@Override
protected Task<FMObjList> createTask() {
return new Task<FMObjList>() {
@Override
protected FMObjList call() throws Exception {
return net.getTopAlbums(period, limit);
}
};
}
@Override
protected void failed() {
super.failed();
Logger.getLog().logError(new ErrorEntry("failed to get top albums"));
}
}

View File

@ -14,7 +14,7 @@ import javafx.fxml.FXMLLoader;
public class AlbumTab extends Tab { public class AlbumTab extends Tab {
public AlbumTab(Album album) throws IOException { public AlbumTab(Album album) {
setText(album.getName().toLowerCase()); setText(album.getName().toLowerCase());
@ -24,17 +24,23 @@ public class AlbumTab extends Tab {
loader.setController(controller); loader.setController(controller);
AnchorPane pane = (AnchorPane) loader.load(); AnchorPane pane;
AnchorPane.setTopAnchor(pane, 0.0); try {
AnchorPane.setLeftAnchor(pane, 0.0); pane = (AnchorPane) loader.load();
AnchorPane.setRightAnchor(pane, 0.0);
AnchorPane.setBottomAnchor(pane, 0.0);
setContent(pane); AnchorPane.setTopAnchor(pane, 0.0);
AnchorPane.setLeftAnchor(pane, 0.0);
AnchorPane.setRightAnchor(pane, 0.0);
AnchorPane.setBottomAnchor(pane, 0.0);
controller.populate(album); setContent(pane);
controller.populate(album);
} catch (IOException e) {
e.printStackTrace();
}
} }
} }

View File

@ -10,7 +10,7 @@ import javafx.fxml.FXMLLoader;
public class ArtistTab extends Tab{ public class ArtistTab extends Tab{
public ArtistTab(Artist artist) throws IOException { public ArtistTab(Artist artist) {
setText(artist.getName().toLowerCase()); setText(artist.getName().toLowerCase());
@ -20,16 +20,22 @@ public class ArtistTab extends Tab{
loader.setController(controller); loader.setController(controller);
AnchorPane pane = (AnchorPane) loader.load(); AnchorPane pane;
AnchorPane.setTopAnchor(pane, 0.0); try {
AnchorPane.setLeftAnchor(pane, 0.0); pane = (AnchorPane) loader.load();
AnchorPane.setRightAnchor(pane, 0.0);
AnchorPane.setBottomAnchor(pane, 0.0);
setContent(pane); AnchorPane.setTopAnchor(pane, 0.0);
AnchorPane.setLeftAnchor(pane, 0.0);
AnchorPane.setRightAnchor(pane, 0.0);
AnchorPane.setBottomAnchor(pane, 0.0);
controller.populate(artist); setContent(pane);
controller.populate(artist);
} catch (IOException e) {
e.printStackTrace();
}
} }

View File

@ -9,30 +9,37 @@ import javafx.fxml.FXMLLoader;
public class FMObjListEditTab extends Tab { public class FMObjListEditTab extends Tab {
public FMObjListEditTab() throws IOException { public FMObjListEditTab() {
setText("List"); setText("List");
FXMLLoader loader = new FXMLLoader(getClass().getResource("../ui/FMObjListEditPane.fxml")); FXMLLoader loader = new FXMLLoader(getClass().getResource("../ui/FMObjListEditPane.fxml"));
AnchorPane pane = (AnchorPane) loader.load(); AnchorPane pane;
AnchorPane.setTopAnchor(pane, 0.0); try {
AnchorPane.setLeftAnchor(pane, 0.0); pane = (AnchorPane) loader.load();
AnchorPane.setRightAnchor(pane, 0.0);
AnchorPane.setBottomAnchor(pane, 0.0);
// BorderPane AnchorPane.setTopAnchor(pane, 0.0);
AnchorPane.setLeftAnchor(pane, 0.0);
AnchorPane.setRightAnchor(pane, 0.0);
AnchorPane.setBottomAnchor(pane, 0.0);
setText("list"); // BorderPane
setContent(pane); setText("list");
FMObjListPaneEditController control = (FMObjListPaneEditController) loader.getController(); setContent(pane);
FMObjListPaneEditController control = (FMObjListPaneEditController) loader.getController();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
public FMObjListEditTab(FMObjList list) throws IOException { public FMObjListEditTab(FMObjList list) {
if (list.getGroupName() != null) { if (list.getGroupName() != null) {
setText(list.getGroupName()); setText(list.getGroupName());
@ -42,20 +49,27 @@ public class FMObjListEditTab extends Tab {
FXMLLoader loader = new FXMLLoader(getClass().getResource("../ui/FMObjListEditPane.fxml")); FXMLLoader loader = new FXMLLoader(getClass().getResource("../ui/FMObjListEditPane.fxml"));
AnchorPane pane = (AnchorPane) loader.load(); AnchorPane pane;
AnchorPane.setTopAnchor(pane, 0.0); try {
AnchorPane.setLeftAnchor(pane, 0.0); pane = (AnchorPane) loader.load();
AnchorPane.setRightAnchor(pane, 0.0);
AnchorPane.setBottomAnchor(pane, 0.0);
// BorderPane AnchorPane.setTopAnchor(pane, 0.0);
AnchorPane.setLeftAnchor(pane, 0.0);
AnchorPane.setRightAnchor(pane, 0.0);
AnchorPane.setBottomAnchor(pane, 0.0);
setContent(pane); // BorderPane
FMObjListPaneEditController control = (FMObjListPaneEditController) loader.getController(); setContent(pane);
control.setList(list);
control.refresh(); FMObjListPaneEditController control = (FMObjListPaneEditController) loader.getController();
control.setList(list);
control.refresh();
} catch (IOException e) {
e.printStackTrace();
}
} }
} }

View File

@ -9,51 +9,31 @@ import javafx.fxml.FXMLLoader;
public class FMObjListTab extends Tab { public class FMObjListTab extends Tab {
public FMObjListTab(FMObjList list) throws IOException { public FMObjListTab(FMObjList list) {
setText(list.getGroupName()); setText(list.getGroupName());
FXMLLoader loader = new FXMLLoader(getClass().getResource("../ui/FMObjListPane.fxml")); FXMLLoader loader = new FXMLLoader(getClass().getResource("../ui/FMObjListPane.fxml"));
AnchorPane pane = (AnchorPane) loader.load(); AnchorPane pane;
try {
pane = (AnchorPane) loader.load();
AnchorPane.setTopAnchor(pane, 0.0); AnchorPane.setTopAnchor(pane, 0.0);
AnchorPane.setLeftAnchor(pane, 0.0); AnchorPane.setLeftAnchor(pane, 0.0);
AnchorPane.setRightAnchor(pane, 0.0); AnchorPane.setRightAnchor(pane, 0.0);
AnchorPane.setBottomAnchor(pane, 0.0); AnchorPane.setBottomAnchor(pane, 0.0);
setContent(pane); setContent(pane);
setText(list.getGroupName()); setText(list.getGroupName());
FMObjListPaneController control = (FMObjListPaneController) loader.getController();
control.populate(list);
FMObjListPaneController control = (FMObjListPaneController) loader.getController();
control.populate(list);
} catch (IOException e) {
e.printStackTrace();
}
} }
// public FMObjListTab() throws IOException {
//
// setText("List");
//
// FXMLLoader loader = new FXMLLoader(getClass().getResource("ui/FMObjListPaneEdit.fxml"));
//
// AnchorPane pane = (AnchorPane) loader.load();
//
// AnchorPane.setTopAnchor(pane, 0.0);
// AnchorPane.setLeftAnchor(pane, 0.0);
// AnchorPane.setRightAnchor(pane, 0.0);
// AnchorPane.setBottomAnchor(pane, 0.0);
//
//// BorderPane
//
// setContent(pane);
//
// FMObjListPaneEditController control = (FMObjListPaneEditController) loader.getController();
//
//
// }
} }

View File

@ -15,21 +15,26 @@ public abstract class FMObjTab extends Tab {
protected AnchorPane infoAnchorPane; protected AnchorPane infoAnchorPane;
protected FMObjBorderPaneController controller; protected FMObjBorderPaneController controller;
protected FMObjTab() throws IOException { protected FMObjTab() {
FXMLLoader loader = new FXMLLoader(getClass().getResource("../ui/FMObjBorderPane.fxml")); FXMLLoader loader = new FXMLLoader(getClass().getResource("../ui/FMObjBorderPane.fxml"));
AnchorPane anchor = (AnchorPane) loader.load(); AnchorPane anchor;
try {
anchor = (AnchorPane) loader.load();
AnchorPane.setTopAnchor(anchor, 0.0); AnchorPane.setTopAnchor(anchor, 0.0);
AnchorPane.setLeftAnchor(anchor, 0.0); AnchorPane.setLeftAnchor(anchor, 0.0);
AnchorPane.setRightAnchor(anchor, 0.0); AnchorPane.setRightAnchor(anchor, 0.0);
AnchorPane.setBottomAnchor(anchor, 0.0); AnchorPane.setBottomAnchor(anchor, 0.0);
this.controller = (FMObjBorderPaneController) loader.getController(); this.controller = (FMObjBorderPaneController) loader.getController();
setContent(anchor); setContent(anchor);
} catch (IOException e) {
e.printStackTrace();
}
} }
public AnchorPane getInfoAnchorPane() { public AnchorPane getInfoAnchorPane() {

View File

@ -9,26 +9,30 @@ import javafx.fxml.FXMLLoader;
public class ScrobbleChartTab extends Tab { public class ScrobbleChartTab extends Tab {
public ScrobbleChartTab() throws IOException { public ScrobbleChartTab() {
setText("scrobbles"); setText("scrobbles");
FXMLLoader loader = new FXMLLoader(getClass().getResource("../ui/ScrobbleChartPane.fxml")); FXMLLoader loader = new FXMLLoader(getClass().getResource("../ui/ScrobbleChartPane.fxml"));
AnchorPane pane = (AnchorPane) loader.load(); AnchorPane pane;
AnchorPane.setTopAnchor(pane, 0.0); try {
AnchorPane.setLeftAnchor(pane, 0.0); pane = (AnchorPane) loader.load();
AnchorPane.setRightAnchor(pane, 0.0);
AnchorPane.setBottomAnchor(pane, 0.0);
setContent(pane); AnchorPane.setTopAnchor(pane, 0.0);
AnchorPane.setLeftAnchor(pane, 0.0);
AnchorPane.setRightAnchor(pane, 0.0);
AnchorPane.setBottomAnchor(pane, 0.0);
ScrobbleChartPaneController control = (ScrobbleChartPaneController) loader.getController(); setContent(pane);
//control.populate();
ScrobbleChartPaneController control = (ScrobbleChartPaneController) loader.getController();
//control.populate();
} catch (IOException e) {
e.printStackTrace();
}
} }

View File

@ -9,25 +9,29 @@ import javafx.fxml.FXMLLoader;
public class ScrobbleTab extends Tab { public class ScrobbleTab extends Tab {
public ScrobbleTab() throws IOException { public ScrobbleTab() {
setText("scrobble"); setText("scrobble");
FXMLLoader loader = new FXMLLoader(getClass().getResource("../ui/ScrobblePane.fxml")); FXMLLoader loader = new FXMLLoader(getClass().getResource("../ui/ScrobblePane.fxml"));
AnchorPane pane = (AnchorPane) loader.load(); AnchorPane pane;
try {
pane = (AnchorPane) loader.load();
AnchorPane.setTopAnchor(pane, 0.0); AnchorPane.setTopAnchor(pane, 0.0);
AnchorPane.setLeftAnchor(pane, 0.0); AnchorPane.setLeftAnchor(pane, 0.0);
AnchorPane.setRightAnchor(pane, 0.0); AnchorPane.setRightAnchor(pane, 0.0);
AnchorPane.setBottomAnchor(pane, 0.0); AnchorPane.setBottomAnchor(pane, 0.0);
setContent(pane); setContent(pane);
ScrobblePaneController control = (ScrobblePaneController) loader.getController(); ScrobblePaneController control = (ScrobblePaneController) loader.getController();
//control.populate();
//control.populate();
} catch (IOException e) {
e.printStackTrace();
}
} }
} }

View File

@ -0,0 +1,37 @@
package sarsoo.fmframework.fx.tab;
import java.io.IOException;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import sarsoo.fmframework.fx.controller.TopAlbumController;
import javafx.fxml.FXMLLoader;
public class TopAlbumTab extends Tab {
public TopAlbumTab() {
setText("top albums");
FXMLLoader loader = new FXMLLoader(getClass().getResource("../ui/TopAlbumPane.fxml"));
AnchorPane pane;
try {
pane = (AnchorPane) loader.load();
AnchorPane.setTopAnchor(pane, 0.0);
AnchorPane.setLeftAnchor(pane, 0.0);
AnchorPane.setRightAnchor(pane, 0.0);
AnchorPane.setBottomAnchor(pane, 0.0);
setContent(pane);
TopAlbumController control = (TopAlbumController) loader.getController();
//control.populate();
} catch (IOException e) {
e.printStackTrace();
}
}
}

View File

@ -12,7 +12,7 @@ import javafx.fxml.FXMLLoader;
public class TrackTab extends Tab { public class TrackTab extends Tab {
public TrackTab(Track track) throws IOException { public TrackTab(Track track) {
setText(track.getName().toLowerCase()); setText(track.getName().toLowerCase());
@ -22,16 +22,22 @@ public class TrackTab extends Tab {
loader.setController(controller); loader.setController(controller);
AnchorPane pane = (AnchorPane) loader.load(); AnchorPane pane;
try {
pane = (AnchorPane) loader.load();
AnchorPane.setTopAnchor(pane, 0.0); AnchorPane.setTopAnchor(pane, 0.0);
AnchorPane.setLeftAnchor(pane, 0.0); AnchorPane.setLeftAnchor(pane, 0.0);
AnchorPane.setRightAnchor(pane, 0.0); AnchorPane.setRightAnchor(pane, 0.0);
AnchorPane.setBottomAnchor(pane, 0.0); AnchorPane.setBottomAnchor(pane, 0.0);
setContent(pane); setContent(pane);
controller.populate(track); controller.populate(track);
} catch (IOException e) {
e.printStackTrace();
}
} }

View File

@ -1,8 +1,14 @@
package sarsoo.fmframework.music; package sarsoo.fmframework.music;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.Serializable; import java.io.Serializable;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import javax.imageio.ImageIO;
import sarsoo.fmframework.cache.Cacheable; import sarsoo.fmframework.cache.Cacheable;
public class Album extends FMObj implements Serializable, Cacheable{ public class Album extends FMObj implements Serializable, Cacheable{
@ -12,6 +18,9 @@ public class Album extends FMObj implements Serializable, Cacheable{
protected ArrayList<Tag> tagList; protected ArrayList<Tag> tagList;
protected ArrayList<Track> trackList; protected ArrayList<Track> trackList;
protected URL imageUrl;
protected BufferedImage image;
private Album(AlbumBuilder builder) { private Album(AlbumBuilder builder) {
this.name = builder.name; this.name = builder.name;
this.artist = builder.artist; this.artist = builder.artist;
@ -29,9 +38,26 @@ public class Album extends FMObj implements Serializable, Cacheable{
this.tagList = builder.tagList; this.tagList = builder.tagList;
this.trackList = builder.trackList; this.trackList = builder.trackList;
this.imageUrl = builder.imageUrl;
} }
public URL getImageURL() {
return imageUrl;
}
public void loadImage() {
try {
image = ImageIO.read(imageUrl);
} catch (IOException e) {
e.printStackTrace();
}
}
public BufferedImage getImage() {
return image;
}
public Artist getArtist() { public Artist getArtist() {
return artist; return artist;
} }
@ -87,6 +113,8 @@ public class Album extends FMObj implements Serializable, Cacheable{
protected ArrayList<Tag> tagList; protected ArrayList<Tag> tagList;
protected ArrayList<Track> trackList; protected ArrayList<Track> trackList;
protected URL imageUrl;
public AlbumBuilder(String name, Artist artist) { public AlbumBuilder(String name, Artist artist) {
@ -134,6 +162,15 @@ public class Album extends FMObj implements Serializable, Cacheable{
return this; return this;
} }
public AlbumBuilder setImageUrl(String url) {
try {
this.imageUrl = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return this;
}
public Album build() { public Album build() {
return new Album(this); return new Album(this);
} }

View File

@ -89,6 +89,27 @@
-fx-background-color: #4D4D4D; -fx-background-color: #4D4D4D;
} }
.text-area {
-fx-background-color: #202124;
-fx-text-fill: white;
}
.text-area .content {
-fx-background-color: transparent ;
}
.text-area > .viewport {
-fx-background-color: transparent;
}
.scroll-pane {
-fx-background-color: transparent;
}
.scroll-pane > .viewport {
-fx-background-color: transparent;
}
.text-area { .text-area {
-fx-background-color: #202124; -fx-background-color: #202124;
} }
@ -137,6 +158,7 @@
.tab{ .tab{
-fx-background-insets: 0 1 0 1,0,0; -fx-background-insets: 0 1 0 1,0,0;
} }
.tab-pane .tab .tab-pane .tab
{ {
-fx-background-color: #202124; -fx-background-color: #202124;

View File

@ -71,6 +71,11 @@
</accelerator></MenuItem> </accelerator></MenuItem>
</items> </items>
</Menu> </Menu>
<Menu fx:id="menuTop" mnemonicParsing="false" text="top">
<items>
<MenuItem fx:id="menuItemAlbumCollage" mnemonicParsing="false" onAction="#handleTopAlbum" text="album" />
</items>
</Menu>
<Menu fx:id="menuChart" mnemonicParsing="false" text="chart"> <Menu fx:id="menuChart" mnemonicParsing="false" text="chart">
<items> <items>
<MenuItem fx:id="menuItemScrobbleChart" mnemonicParsing="false" onAction="#handleScrobbleChart" text="daily scrobbles" /> <MenuItem fx:id="menuItemScrobbleChart" mnemonicParsing="false" onAction="#handleScrobbleChart" text="daily scrobbles" />

View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ChoiceBox?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.SplitPane?>
<?import javafx.scene.control.ToolBar?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.TilePane?>
<AnchorPane prefHeight="484.0" prefWidth="885.0" stylesheets="@../styles/mainPane.css" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sarsoo.fmframework.fx.controller.TopAlbumController">
<children>
<BorderPane fx:id="borderPane" prefHeight="327.0" prefWidth="600.0" styleClass="backGround" stylesheets="@../styles/ObjPane.css" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<bottom>
<ToolBar fx:id="toolBar" prefHeight="40.0" prefWidth="200.0" BorderPane.alignment="CENTER">
<items>
<ChoiceBox fx:id="dropDownLimit" prefHeight="26.0" prefWidth="79.0" />
<ChoiceBox fx:id="dropDownTimeRange" prefHeight="25.0" prefWidth="208.0" />
<Button fx:id="buttonLoad" mnemonicParsing="false" onAction="#handleLoad" text="load" />
<Button fx:id="buttonGenerate" disable="true" mnemonicParsing="false" onAction="#handleGenerate" text="generate" />
</items>
</ToolBar>
</bottom>
<center>
<SplitPane dividerPositions="0.5" prefHeight="160.0" prefWidth="200.0" BorderPane.alignment="CENTER">
<items>
<ScrollPane fitToHeight="true" fitToWidth="true">
<content>
<GridPane fx:id="gridPane" alignment="CENTER" styleClass="backGround">
<columnConstraints>
<ColumnConstraints halignment="CENTER" hgrow="NEVER" maxWidth="30.0" minWidth="30.0" />
<ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" minWidth="10.0" prefWidth="300.0" />
<ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" minWidth="10.0" prefWidth="128.0" />
<ColumnConstraints halignment="CENTER" hgrow="NEVER" maxWidth="40.0" minWidth="50.0" />
</columnConstraints>
</GridPane>
</content>
</ScrollPane>
<ScrollPane fitToWidth="true" hbarPolicy="NEVER">
<content>
<TilePane fx:id="tilePane" alignment="CENTER" prefColumns="3" prefHeight="0.0" prefWidth="0.0" />
</content>
</ScrollPane>
</items>
</SplitPane>
</center>
</BorderPane>
</children>
</AnchorPane>

View File

@ -55,7 +55,7 @@ public class FmUserNetworkTest {
FMObjList list; FMObjList list;
try { try {
list = net.getTopAlbums("7day", limit); list = net.getTopAlbums(TimePeriod.SEVENDAY, limit);
assertEquals(limit, list.size()); assertEquals(limit, list.size());
@ -73,7 +73,7 @@ public class FmUserNetworkTest {
FMObjList list; FMObjList list;
try { try {
list = net.getTopArtists("7day", limit); list = net.getTopArtists(TimePeriod.SEVENDAY, limit);
// list.stream().forEach(System.out::println); // list.stream().forEach(System.out::println);
assertEquals(limit, list.size()); assertEquals(limit, list.size());
@ -92,7 +92,7 @@ public class FmUserNetworkTest {
FMObjList list; FMObjList list;
try { try {
list = net.getTopTracks("7day", limit); list = net.getTopTracks(TimePeriod.SEVENDAY, limit);
// list.stream().forEach(System.out::println); // list.stream().forEach(System.out::println);
assertEquals(limit, list.size()); assertEquals(limit, list.size());