added tag graph

This commit is contained in:
aj 2020-03-07 22:30:18 +00:00
parent 5d6a5cff1c
commit 7c763e360a
4 changed files with 63 additions and 1 deletions

View File

@ -8,6 +8,7 @@
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
E906F7F42414019C004E1E31 /* NetworkPersister.swift in Sources */ = {isa = PBXBuildFile; fileRef = E906F7F32414019C004E1E31 /* NetworkPersister.swift */; }; E906F7F42414019C004E1E31 /* NetworkPersister.swift in Sources */ = {isa = PBXBuildFile; fileRef = E906F7F32414019C004E1E31 /* NetworkPersister.swift */; };
E906F7F724143AA7004E1E31 /* SwiftUICharts in Frameworks */ = {isa = PBXBuildFile; productRef = E906F7F624143AA7004E1E31 /* SwiftUICharts */; };
E92F94822401412100B6B721 /* SwiftUIRefresh in Frameworks */ = {isa = PBXBuildFile; productRef = E92F94812401412100B6B721 /* SwiftUIRefresh */; }; E92F94822401412100B6B721 /* SwiftUIRefresh in Frameworks */ = {isa = PBXBuildFile; productRef = E92F94812401412100B6B721 /* SwiftUIRefresh */; };
E934AC99240DD0E4009869F4 /* AddTagSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = E934AC98240DD0E4009869F4 /* AddTagSheet.swift */; }; E934AC99240DD0E4009869F4 /* AddTagSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = E934AC98240DD0E4009869F4 /* AddTagSheet.swift */; };
E97AF45623FC4E7800635494 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97AF45523FC4E7800635494 /* User.swift */; }; E97AF45623FC4E7800635494 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97AF45523FC4E7800635494 /* User.swift */; };
@ -106,6 +107,7 @@
E97AF45923FC50EC00635494 /* SwiftyJSON in Frameworks */, E97AF45923FC50EC00635494 /* SwiftyJSON in Frameworks */,
E98254D923FB53780056D9D3 /* Alamofire in Frameworks */, E98254D923FB53780056D9D3 /* Alamofire in Frameworks */,
E97AF45E23FC83AF00635494 /* KeychainAccess in Frameworks */, E97AF45E23FC83AF00635494 /* KeychainAccess in Frameworks */,
E906F7F724143AA7004E1E31 /* SwiftUICharts in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -292,6 +294,7 @@
E97AF45823FC50EC00635494 /* SwiftyJSON */, E97AF45823FC50EC00635494 /* SwiftyJSON */,
E97AF45D23FC83AF00635494 /* KeychainAccess */, E97AF45D23FC83AF00635494 /* KeychainAccess */,
E92F94812401412100B6B721 /* SwiftUIRefresh */, E92F94812401412100B6B721 /* SwiftUIRefresh */,
E906F7F624143AA7004E1E31 /* SwiftUICharts */,
); );
productName = "Music Tools"; productName = "Music Tools";
productReference = E9EA690723F9A5430012C3E8 /* Music Tools.app */; productReference = E9EA690723F9A5430012C3E8 /* Music Tools.app */;
@ -370,6 +373,7 @@
E97AF45723FC50EC00635494 /* XCRemoteSwiftPackageReference "swiftyjson" */, E97AF45723FC50EC00635494 /* XCRemoteSwiftPackageReference "swiftyjson" */,
E97AF45C23FC83AF00635494 /* XCRemoteSwiftPackageReference "keychainaccess" */, E97AF45C23FC83AF00635494 /* XCRemoteSwiftPackageReference "keychainaccess" */,
E92F94802401412100B6B721 /* XCRemoteSwiftPackageReference "swiftuirefresh" */, E92F94802401412100B6B721 /* XCRemoteSwiftPackageReference "swiftuirefresh" */,
E906F7F524143AA7004E1E31 /* XCRemoteSwiftPackageReference "chartview" */,
); );
productRefGroup = E9EA690823F9A5430012C3E8 /* Products */; productRefGroup = E9EA690823F9A5430012C3E8 /* Products */;
projectDirPath = ""; projectDirPath = "";
@ -764,6 +768,14 @@
/* End XCConfigurationList section */ /* End XCConfigurationList section */
/* Begin XCRemoteSwiftPackageReference section */ /* Begin XCRemoteSwiftPackageReference section */
E906F7F524143AA7004E1E31 /* XCRemoteSwiftPackageReference "chartview" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/apppear/chartview";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 1.4.9;
};
};
E92F94802401412100B6B721 /* XCRemoteSwiftPackageReference "swiftuirefresh" */ = { E92F94802401412100B6B721 /* XCRemoteSwiftPackageReference "swiftuirefresh" */ = {
isa = XCRemoteSwiftPackageReference; isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/siteline/swiftuirefresh"; repositoryURL = "https://github.com/siteline/swiftuirefresh";
@ -799,6 +811,11 @@
/* End XCRemoteSwiftPackageReference section */ /* End XCRemoteSwiftPackageReference section */
/* Begin XCSwiftPackageProductDependency section */ /* Begin XCSwiftPackageProductDependency section */
E906F7F624143AA7004E1E31 /* SwiftUICharts */ = {
isa = XCSwiftPackageProductDependency;
package = E906F7F524143AA7004E1E31 /* XCRemoteSwiftPackageReference "chartview" */;
productName = SwiftUICharts;
};
E92F94812401412100B6B721 /* SwiftUIRefresh */ = { E92F94812401412100B6B721 /* SwiftUIRefresh */ = {
isa = XCSwiftPackageProductDependency; isa = XCSwiftPackageProductDependency;
package = E92F94802401412100B6B721 /* XCRemoteSwiftPackageReference "swiftuirefresh" */; package = E92F94802401412100B6B721 /* XCRemoteSwiftPackageReference "swiftuirefresh" */;

View File

@ -10,6 +10,15 @@
"version": "5.0.0" "version": "5.0.0"
} }
}, },
{
"package": "SwiftUICharts",
"repositoryURL": "https://github.com/apppear/chartview",
"state": {
"branch": null,
"revision": "04989ad159380290a74729dbce1d39d64b893ab2",
"version": "1.4.9"
}
},
{ {
"package": "KeychainAccess", "package": "KeychainAccess",
"repositoryURL": "https://github.com/kishikawakatsumi/keychainaccess", "repositoryURL": "https://github.com/kishikawakatsumi/keychainaccess",

View File

@ -21,6 +21,12 @@ class Tag: Identifiable, Equatable, Decodable {
var albums: [JSON] var albums: [JSON]
var artists: [JSON] var artists: [JSON]
var all: [JSON] {
get {
return tracks + albums + artists
}
}
var count: Int var count: Int
var proportion: Double var proportion: Double
var total_user_scrobbles: Int var total_user_scrobbles: Int

View File

@ -9,6 +9,7 @@
import SwiftUI import SwiftUI
import SwiftUIRefresh import SwiftUIRefresh
import SwiftyJSON import SwiftyJSON
import SwiftUICharts
struct TagView: View { struct TagView: View {
@ -16,6 +17,14 @@ struct TagView: View {
@State private var isRefreshing = false @State private var isRefreshing = false
var chartStyle: ChartStyle {
get {
let _style = Styles.barChartStyleNeonBlueLight
_style.darkModeStyle = Styles.barChartStyleNeonBlueDark
return _style
}
}
var body: some View { var body: some View {
List { List {
Section(header: Text("Stats")){ Section(header: Text("Stats")){
@ -72,7 +81,28 @@ struct TagView: View {
} }
} }
} }
Section(header: Text("Actions")){ HStack {
Spacer()
BarChartView(
data: ChartData(values:
self.tag.all
.filter {
$0["count"].intValue > 0
}
.map {
($0["name"].stringValue, $0["count"].intValue)
}),
title: "Scrobbles",
style: chartStyle,
form: ChartForm.medium,
cornerImage: Image(systemName: "music.note")
)
.padding()
// .frame(width: 100, height: 400)
Spacer()
}
Section(header: Text("Actions"),
footer: Text("Last Updated \(self.tag.last_updated)")){
Button(action: { self.runTag() }) { Button(action: { self.runTag() }) {
Text("Update") Text("Update")
} }