From 4df325c27002cf834cdba9f2ae9a6453835c52ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9F=8F=E7=9D=BF?= Date: Sat, 11 Nov 2023 17:24:33 +0800 Subject: [PATCH] Updated some files --- .DS_Store | Bin 10244 -> 10244 bytes DarockBili Watch App/DarockBiliApp.swift | 62 +++- .../Errors/NetworkFixView.swift | 10 +- DarockBili Watch App/InMain/MainView.swift | 21 +- .../Offline/OfflineMainView.swift | 21 ++ DarockBili Watch App/Others/AboutView.swift | 36 -- .../Others/SettingsView.swift | 343 +++++++++++++----- .../PersonalCenter/DownloadsView.swift | 34 +- .../UserDynamic/UserDynamicMainView.swift | 2 +- .../Video/VideoDetailView.swift | 193 +++++++--- .../Video/VideoDownloadView.swift | 12 +- .../Video/VideoPlayerView.swift | 10 + DarockBili.xcodeproj/project.pbxproj | 46 +++ .../xcshareddata/swiftpm/Package.resolved | 18 + .../UserInterfaceState.xcuserstate | Bin 0 -> 48330 bytes .../xcschemes/xcschememanagement.plist | 150 ++++++++ 16 files changed, 761 insertions(+), 197 deletions(-) create mode 100644 DarockBili Watch App/Offline/OfflineMainView.swift create mode 100644 DarockBili.xcodeproj/project.xcworkspace/xcuserdata/boring.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 DarockBili.xcodeproj/xcuserdata/boring.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/.DS_Store b/.DS_Store index cbfb829666c4c660b8a37208c0c688c5d9c6cf13..987b1c21335ffdbd0fad338d8627dfa9853cf22d 100644 GIT binary patch delta 159 zcmZn(XbG6$XEU^hRb=42j$$&;4~if(Qb)MjJmyec)>KwM|?192XXL|yifsZ~cE z!2${rXaWfmyi8mZHs?$5F>c-{8OFA;fsJu9yTUIPppgw?PMgKVW;2p(+~jYe}@{^Nt@{<@C7z7v? z7=Hq3z5ieUWHB&c(UFsG7@VA+TL6}a5NN617*)9# zf*4#G92r~~e1UWwgC0XJLkgO=WH--|NM+m1uJDUxv%bg%CTxcDiU5sBWGG_DXGmtq F1^{0=PNx6> diff --git a/DarockBili Watch App/DarockBiliApp.swift b/DarockBili Watch App/DarockBiliApp.swift index 949472e1d..c1ba67914 100644 --- a/DarockBili Watch App/DarockBiliApp.swift +++ b/DarockBili Watch App/DarockBiliApp.swift @@ -7,6 +7,7 @@ import Darwin import SwiftUI +import WatchKit import DarockKit import SDWebImage import SDWebImagePDFCoder @@ -14,7 +15,7 @@ import SDWebImageSVGCoder import SDWebImageWebPCoder //!!!: Debug Setting, Set false Before Release -let debug = false +var debug = false var pShowTipText = "" var pShowTipSymbol = "" @@ -22,14 +23,23 @@ var pTipBoxOffset: CGFloat = 80 var isShowMemoryInScreen = false +var isInOfflineMode = false + +var isInLowBatteryMode = false + @main struct DarockBili_Watch_AppApp: App { @WKApplicationDelegateAdaptor(AppDelegate.self) var appDelegate + @Environment(\.scenePhase) var scenePhase + // Screen Time + @State var screenTimeCaculateTimer: Timer? = nil @State var isMemoryWarningPresented = false @State var showTipText = "" @State var showTipSymbol = "" @State var tipBoxOffset: CGFloat = 80 - //Debug Controls + @State var isOfflineMode = false + @State var isLowBatteryMode = false + // Debug Controls @State var isShowingDebugControls = false @State var systemResourceRefreshTimer: Timer? @State var memoryUsage: Float = 0.0 @@ -40,7 +50,11 @@ struct DarockBili_Watch_AppApp: App { SignalErrorView() } else { ZStack { - ContentView() + if isOfflineMode { + OfflineMainView() + } else { + ContentView() + } VStack { Spacer() if #available(watchOS 10, *) { @@ -80,13 +94,19 @@ struct DarockBili_Watch_AppApp: App { } .sheet(isPresented: $isMemoryWarningPresented, content: {MemoryWarningView()}) .onAppear { + isInLowBatteryMode = UserDefaults.standard.bool(forKey: "IsInLowBatteryMode") + Timer.scheduledTimer(withTimeInterval: 0.05, repeats: true) { _ in showTipText = pShowTipText showTipSymbol = pShowTipSymbol + isLowBatteryMode = isInLowBatteryMode + UserDefaults.standard.set(isLowBatteryMode, forKey: "IsInLowBatteryMode") Timer.scheduledTimer(withTimeInterval: 0.2, repeats: false) { timer in tipBoxOffset = pTipBoxOffset timer.invalidate() } + + isOfflineMode = isInOfflineMode } Timer.scheduledTimer(withTimeInterval: 5.0, repeats: true) { timer in @@ -105,8 +125,22 @@ struct DarockBili_Watch_AppApp: App { timer.invalidate() } } + + WKInterfaceDevice.current().isBatteryMonitoringEnabled = true } .overlay { + VStack { + HStack { + if isLowBatteryMode { + Image(systemName: "circle") + .font(.system(size: 17, weight: .heavy)) + .foregroundColor(.accentColor) + .offset(y: 10) + } + } + Spacer() + } + .ignoresSafeArea() if isShowMemoryUsage { VStack { HStack { @@ -161,6 +195,28 @@ struct DarockBili_Watch_AppApp: App { } } } + .onChange(of: scenePhase) { value in + switch value { + case .background: + screenTimeCaculateTimer?.invalidate() + case .inactive: + break + case .active: + if screenTimeCaculateTimer == nil { + Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { timer in + screenTimeCaculateTimer = timer + let df = DateFormatter() + df.dateFormat = "yyyy-MM-dd" + let dateStr = df.string(from: Date.now) + UserDefaults.standard.set(UserDefaults.standard.integer(forKey: "ScreenTime\(dateStr)") + 1, forKey: "ScreenTime\(dateStr)") + } + } else { + screenTimeCaculateTimer!.fire() + } + @unknown default: + break + } + } } } diff --git a/DarockBili Watch App/Errors/NetworkFixView.swift b/DarockBili Watch App/Errors/NetworkFixView.swift index 885e181f0..f7c706b86 100644 --- a/DarockBili Watch App/Errors/NetworkFixView.swift +++ b/DarockBili Watch App/Errors/NetworkFixView.swift @@ -10,6 +10,7 @@ import DarockKit import Foundation struct NetworkFixView: View { + @Environment(\.dismiss) var dismiss @State var fixingItem = "" @State var isProgressAdding = true @State var progressTimer: Timer? @@ -50,6 +51,13 @@ struct NetworkFixView: View { NavigationLink(destination: {UserNetworkGuide()}, label: { Text("问题来自您的网络连接,点此查看网络说明") }) + Button(action: { + isInOfflineMode = true + dismiss() + }, label: { + Text("进入离线模式") + .foregroundColor(.blue) + }) } } if isDarockIssue { @@ -81,7 +89,7 @@ struct NetworkFixView: View { } } fixingItem = "检查:网络连接" - let randTime = Double.random(in: 3.5...7.0) + let randTime = Double.random(in: 2.5...5.0) Timer.scheduledTimer(withTimeInterval: randTime, repeats: false) { timer in timer.invalidate() diff --git a/DarockBili Watch App/InMain/MainView.swift b/DarockBili Watch App/InMain/MainView.swift index a150edd44..11f56ac8d 100644 --- a/DarockBili Watch App/InMain/MainView.swift +++ b/DarockBili Watch App/InMain/MainView.swift @@ -49,6 +49,7 @@ struct MainView: View { @State var newMajorVer = "" @State var newBuildVer = "" @State var isLoadingNew = false + @State var isFailedToLoad = false var body: some View { Group { List { @@ -58,7 +59,8 @@ struct MainView: View { .bold() Button(action: { //tipWithText("Test") - Dynamic.PUICApplication.sharedPUICApplication._setStatusBarTimeHidden(true, animated: false, completion: nil) +// Dynamic.PUICApplication.sharedPUICApplication._setStatusBarTimeHidden(true, animated: false, completion: nil) + Dynamic.WatchKit.sharedPUICApplication._setStatusBarTimeHidden(true, animated: false) }, label: { Text("Debug") }) @@ -104,11 +106,15 @@ struct MainView: View { Button(action: { LoadNewVideos() }, label: { - if !isLoadingNew { - Text("加载更多") - .bold() + if !isFailedToLoad { + if !isLoadingNew { + Text("加载更多") + .bold() + } else { + ProgressView() + } } else { - ProgressView() + Label("加载失败 轻触重试", systemImage: "xmark") } }) } @@ -140,10 +146,11 @@ struct MainView: View { func LoadNewVideos(clearWhenFinish: Bool = false) { isLoadingNew = true + isFailedToLoad = false let headers: HTTPHeaders = [ "cookie": "SESSDATA=\(sessdata)" ] - DarockKit.Network.shared.requestString("https://api.darock.top/bili/wbi/sign/\("ps=30".base64Encoded())") { respStr, isSuccess in + DarockKit.Network.shared.requestString("https://api.darock.top/bili/wbi/sign/\("ps=\(isInLowBatteryMode ? 10 : 30)".base64Encoded())") { respStr, isSuccess in if isSuccess { debugPrint(respStr.apiFixed()) DarockKit.Network.shared.requestJSON("https://api.bilibili.com/x/web-interface/wbi/index/top/feed/rcmd?\(respStr.apiFixed())", headers: headers) { respJson, isSuccess in @@ -158,10 +165,12 @@ struct MainView: View { } isLoadingNew = false } else { + isFailedToLoad = true isNetworkFixPresented = true } } } else { + isFailedToLoad = true isNetworkFixPresented = true } } diff --git a/DarockBili Watch App/Offline/OfflineMainView.swift b/DarockBili Watch App/Offline/OfflineMainView.swift new file mode 100644 index 000000000..70ec4d5d1 --- /dev/null +++ b/DarockBili Watch App/Offline/OfflineMainView.swift @@ -0,0 +1,21 @@ +// +// OfflineMainView.swift +// DarockBili Watch App +// +// Created by WindowsMEMZ on 2023/11/3. +// + +import SwiftUI + +struct OfflineMainView: View { + var body: some View { + TabView { + DownloadsView() + .tag(1) + } + } +} + +#Preview { + OfflineMainView() +} diff --git a/DarockBili Watch App/Others/AboutView.swift b/DarockBili Watch App/Others/AboutView.swift index 825a04289..534cfa8ed 100644 --- a/DarockBili Watch App/Others/AboutView.swift +++ b/DarockBili Watch App/Others/AboutView.swift @@ -38,42 +38,6 @@ struct AboutView: View { isEasterEgg2Presented = true } .sheet(isPresented: $isEasterEgg2Presented, content: {EasterEgg2View()}) - Text("ReX") - .foregroundColor(rexEasterEggColor) - .onTapGesture { - if easterEggText == "继续?" || easterEggText == "不是这里!" { - rexEasterEggCount += 1 - if rexEasterEggCount == 6 { - rexEasterEggColor = .red - } else if rexEasterEggCount == 7 { - rexEasterEggColor = .orange - } else if rexEasterEggCount == 8 { - rexEasterEggColor = .yellow - } else if rexEasterEggCount == 9 { - rexEasterEggColor = .green - } else if rexEasterEggCount == 10 { - rexEasterEggColor = .cyan - } else if rexEasterEggCount == 11 { - rexEasterEggColor = .blue - } else if rexEasterEggCount == 12 { - rexEasterEggColor = .purple - } else if rexEasterEggCount == 13 { - rexEasterEggColor = .white - isEasterEggPresented = true - } - } - debugPrint(rexEasterEggCount) - } - .sheet(isPresented: $isEasterEggPresented, content: {EasterEggView()}) - Button(action: { - let session = ASWebAuthenticationSession(url: URL(string: "https://wear.rexwe.net")!, callbackURLScheme: nil) { _, _ in - - } - session.prefersEphemeralWebBrowserSession = true - session.start() - }, label: { - Label("来自ReX的消息:界面与交互设计来自 腕上生花 - ReX Design(wear.rexwe.net)", systemImage: "arrowshape.up") - }) } Section { NavigationLink(destination: {OpenSource()}, label: { diff --git a/DarockBili Watch App/Others/SettingsView.swift b/DarockBili Watch App/Others/SettingsView.swift index 5a8c0013e..25c08215f 100644 --- a/DarockBili Watch App/Others/SettingsView.swift +++ b/DarockBili Watch App/Others/SettingsView.swift @@ -5,113 +5,284 @@ // Created by WindowsMEMZ on 2023/7/5. // +import Charts import SwiftUI +import WatchKit +import SwiftDate struct SettingsView: View { - @AppStorage("DedeUserID") var dedeUserID = "" - @AppStorage("DedeUserID__ckMd5") var dedeUserID__ckMd5 = "" - @AppStorage("SESSDATA") var sessdata = "" - @AppStorage("bili_jct") var biliJct = "" - @State var isLogoutAlertPresented = false var body: some View { - List { - Section { - NavigationLink(destination: {AppBehaviorSettingsView()}, label: { - Text("App 行为") - }) -// NavigationLink(destination: {SkinSettingsView()}, label: { -// Text("个性装扮") -// }) - } - Section { - NavigationLink(destination: {PlayerSettingsView()}, label: { - Text("播放设置") - }) - } - Section { - NavigationLink(destination: {FeedbackView()}, label: { - Text("反馈问题") - }) - NavigationLink(destination: {AboutView()}, label: { - Text("关于") - }) - } - if sessdata != "" { + AppBehaviorSettingsView() + .navigationTitle("设置") + .navigationBarTitleDisplayMode(.large) + } + + struct AppBehaviorSettingsView: View { + var body: some View { + List { Section { - Button(role: .destructive, action: { - isLogoutAlertPresented = true - }, label: { + NavigationLink(destination: {GeneralSettingsView()}, label: { HStack { - Text("退出登录") - .font(.system(size: 16)) - Spacer() + ZStack { + Color.gray + .frame(width: 20, height: 20) + .clipShape(Circle()) + Image(systemName: "gear") + .font(.system(size: 12)) + } + Text("通用") } }) - .buttonBorderShape(.roundedRectangle(radius: 13)) - .alert("退出登录", isPresented: $isLogoutAlertPresented, actions: { - Button(role: .destructive, action: { - dedeUserID = "" - dedeUserID__ckMd5 = "" - sessdata = "" - biliJct = "" - }, label: { - HStack { - Text("确定") - Spacer() + NavigationLink(destination: {NetworkSettingsView()}, label: { + HStack { + ZStack { + Color.blue + .frame(width: 20, height: 20) + .clipShape(Circle()) + Image(systemName: "arrow.up.arrow.down") + .font(.system(size: 12)) + } + Text("以太网") + } + }) + NavigationLink(destination: {ScreenTimeSettingsView()}, label: { + HStack { + ZStack { + Color.blue + .frame(width: 20, height: 20) + .clipShape(Circle()) + Image(systemName: "hourglass") + .font(.system(size: 12)) + } + Text("屏幕使用时间") + } + }) + NavigationLink(destination: {GestureSettingsView()}, label: { + HStack { + ZStack { + Color.blue + .frame(width: 20, height: 20) + .clipShape(Circle()) + Image(systemName: "hand.wave.fill") + .font(.system(size: 12)) + } + Text("手势") + } + }) + NavigationLink(destination: {BatterySettingsView()}, label: { + HStack { + ZStack { + Color.green + .frame(width: 20, height: 20) + .clipShape(Circle()) + Image(systemName: "bolt.fill") + .font(.system(size: 12)) } - }) - Button(action: { - - }, label: { - Text("取消") - }) - }, message: { - Text("确定吗?") + Text("电池") + } }) + } + } + .navigationTitle("设置") + .navigationBarTitleDisplayMode(.large) } - .navigationTitle("设置") - .navigationBarTitleDisplayMode(.large) - } - - struct PlayerSettingsView: View { - @AppStorage("IsPlayerAutoRotating") var isPlayerAutoRotating = true - var body: some View { - List { - Toggle("自动旋转(仅竖向)", isOn: $isPlayerAutoRotating) + + struct GeneralSettingsView: View { + @AppStorage("DedeUserID") var dedeUserID = "" + @AppStorage("DedeUserID__ckMd5") var dedeUserID__ckMd5 = "" + @AppStorage("SESSDATA") var sessdata = "" + @AppStorage("bili_jct") var biliJct = "" + @State var isLogoutAlertPresented = false + var body: some View { + List { + NavigationLink(destination: {AboutView()}, label: { + Text("关于") + }) + NavigationLink(destination: {PlayerSettingsView()}, label: { + Text("播放设置") + }) + NavigationLink(destination: {FeedbackView()}, label: { + Text("反馈问题") + }) + if sessdata != "" { + Section { + Button(role: .destructive, action: { + isLogoutAlertPresented = true + }, label: { + HStack { + Text("退出登录") + .font(.system(size: 16)) + Spacer() + } + }) + .buttonBorderShape(.roundedRectangle(radius: 13)) + .alert("退出登录", isPresented: $isLogoutAlertPresented, actions: { + Button(role: .destructive, action: { + dedeUserID = "" + dedeUserID__ckMd5 = "" + sessdata = "" + biliJct = "" + }, label: { + HStack { + Text("确定") + Spacer() + } + }) + Button(action: { + + }, label: { + Text("取消") + }) + }, message: { + Text("确定吗?") + }) + } + } + } + .navigationTitle("通用") + } + + struct PlayerSettingsView: View { + @AppStorage("IsPlayerAutoRotating") var isPlayerAutoRotating = true + @AppStorage("RecordHistoryTime") var recordHistoryTime = "into" + @AppStorage("VideoGetterSource") var videoGetterSource = "official" + var body: some View { + List { + Section { + Toggle("自动旋转(仅竖向)", isOn: $isPlayerAutoRotating) + } + Section { + Picker("记录历史记录", selection: $recordHistoryTime) { + Text("进入详情页时").tag("into") + Text("开始播放时").tag("play") + Text("关闭").tag("never") + } + } + Section(footer: Text("解析失败或无法播放视频时可尝试更换")) { + Picker("解析源", selection: $videoGetterSource) { + Text("官方").tag("official") + Text("第三方").tag("injahow") + } + } + } + } } } - } - - struct AppBehaviorSettingsView: View { - @AppStorage("RecordHistoryTime") var recordHistoryTime = "into" - @AppStorage("VideoGetterSource") var videoGetterSource = "official" - var body: some View { - List { - Section { - Picker("记录历史记录", selection: $recordHistoryTime) { - Text("进入详情页时").tag("into") - Text("开始播放时").tag("play") - Text("关闭").tag("never") + struct NetworkSettingsView: View { + @AppStorage("IsShowNetworkFixing") var isShowNetworkFixing = true + var body: some View { + List { + Section { + Toggle("显示网络疑难解答", isOn: $isShowNetworkFixing) + } + } + .navigationTitle("以太网") + } + } + struct ScreenTimeSettingsView: View { + @State var screenTimes = [Int]() + @State var mainBarData = [SingleTimeBarMarkData]() + @State var dayAverageTime = 0 // Minutes + var body: some View { + List { + Section { + VStack { + HStack { + Text("日均") + .font(.system(size: 14)) + .foregroundColor(.gray) + Spacer() + } + HStack { + Text("\(dayAverageTime)分钟") + .font(.system(size: 20)) + Spacer() + } + Chart(mainBarData) { + BarMark( + x: .value("name", $0.name), + y: .value("time", $0.time) + ) +// RuleMark( +// y: .value("Highlight", dayAverageTime) +// ) +// .foregroundStyle(.green) + } + .chartYAxis { + AxisMarks(preset: .aligned, position: .trailing) { value in + AxisValueLabel("\(value.index)分钟") + } + } + } } } - Section(footer: Text("解析失败或无法播放视频时可尝试更换")) { - Picker("解析源", selection: $videoGetterSource) { - Text("官方").tag("official") - Text("第三方").tag("injahow") + .onAppear { + let df = DateFormatter() + df.dateFormat = "yyyy-MM-dd" + for i in 0...6 { + let dateStr = df.string(from: Date.now - i.days) + screenTimes.append(UserDefaults.standard.integer(forKey: "ScreenTime\(dateStr)")) + let wdf = DateFormatter() + wdf.dateFormat = "EEEE" + mainBarData.append(SingleTimeBarMarkData(name: String(wdf.string(from: Date.now - i.days).last!), time: UserDefaults.standard.integer(forKey: "ScreenTime\(dateStr)") / 60)) } + screenTimes.reverse() + mainBarData.reverse() + var totalTime = 0 + for time in screenTimes { + totalTime += time / 60 + } + dayAverageTime = totalTime / 7 } } + + struct SingleTimeBarMarkData: Identifiable { + let name: String + let time: Int + var id: String{ name } + } } - } - - struct SkinSettingsView: View { - @AppStorage("IsSkinNoBlur") var isSkinNoBlur = false - var body: some View { - List { - Section(footer: Text("不推荐,可能导致页面上字符难以辨别")) { - Toggle("不模糊背景装扮", isOn: $isSkinNoBlur) + struct GestureSettingsView: View { + @AppStorage("IsVideoPlayerGestureEnabled") var isVideoPlayerGestureEnabled = true + var body: some View { + List { + Section { + Toggle("互点两下播放/暂停视频", isOn: $isVideoPlayerGestureEnabled) + } footer: { + Text("在视频播放器使用互点两下手势(Apple Watch Series 9 及以上)或快速操作(其他机型)暂停或播放视频") + } + } + .navigationTitle("手势") + } + } + struct BatterySettingsView: View { + @State var batteryLevel = 0.0 + @State var batteryState = WKInterfaceDeviceBatteryState.unknown + @State var isLowBatteryMode = isInLowBatteryMode + var body: some View { + List { + HStack { + Gauge(value: batteryLevel, in: -1...100) { + EmptyView() + } + .gaugeStyle(.accessoryCircularCapacity) + Text("\(Int(batteryLevel))%") + .font(.system(size: 30)) + Spacer() + } + .listRowBackground(Color.clear) + Toggle("低电量模式", isOn: $isLowBatteryMode) + .onChange(of: isLowBatteryMode) { value in + isInLowBatteryMode = value + } + } + .navigationTitle("电池") + .onAppear { + batteryLevel = Double(WKInterfaceDevice.current().batteryLevel) + batteryState = WKInterfaceDevice.current().batteryState + debugPrint(batteryLevel) } } } diff --git a/DarockBili Watch App/PersonalCenter/DownloadsView.swift b/DarockBili Watch App/PersonalCenter/DownloadsView.swift index 25256c923..824e1a744 100644 --- a/DarockBili Watch App/PersonalCenter/DownloadsView.swift +++ b/DarockBili Watch App/PersonalCenter/DownloadsView.swift @@ -8,11 +8,13 @@ import AVKit import SwiftUI import AVFoundation +import SDWebImageSwiftUI struct DownloadsView: View { public static var willPlayVideoPath = "" @State var metadatas = [[String: String]]() @State var isPlayerPresented = false + @State var vRootPath = "" var body: some View { List { if metadatas.count != 0 { @@ -37,12 +39,21 @@ struct DownloadsView: View { // } // }) Button(action: { - DownloadsView.willPlayVideoPath = metadatas[i]["Path"]! + DownloadsView.willPlayVideoPath = vRootPath + metadatas[i]["Path"]! isPlayerPresented = true }, label: { HStack { - AsyncImage(url: URL(string: metadatas[i]["Pic"]! + "@40w")) - .cornerRadius(5) + WebImage(url: URL(string: metadatas[i]["Pic"]! + "@100w")!, options: [.progressiveLoad, .scaleDownLargeImages]) + .placeholder { + RoundedRectangle(cornerRadius: 7) + .frame(width: 50, height: 30) + .foregroundColor(Color(hex: 0x3D3D3D)) + .redacted(reason: .placeholder) + } + .resizable() + .scaledToFit() + .frame(width: 50) + .cornerRadius(7) VStack { Text(metadatas[i]["Title"]!) .font(.system(size: 14, weight: .bold)) @@ -55,6 +66,13 @@ struct DownloadsView: View { } }) .sheet(isPresented: $isPlayerPresented, content: {OfflineVideoPlayer()}) + .swipeActions(edge: .trailing, allowsFullSwipe: true) { + Button(role: .destructive, action: { + try! FileManager.default.removeItem(atPath: vRootPath + metadatas[i]["Path"]!) + }, label: { + Image(systemName: "xmark.bin.fill") + }) + } } else { } @@ -62,6 +80,7 @@ struct DownloadsView: View { } } .onAppear { + vRootPath = String(AppFileManager(path: "dlds").GetPath("").path) let files = AppFileManager(path: "dlds").GetRoot() ?? [[String: String]]() for file in files { debugPrint(file) @@ -69,12 +88,19 @@ struct DownloadsView: View { let name = file["name"]! let nameWithOutSuffix = String(name.split(separator: ".")[0]) if UserDefaults.standard.dictionary(forKey: nameWithOutSuffix) != nil { - metadatas.append(UserDefaults.standard.dictionary(forKey: nameWithOutSuffix)! as! [String: String]) + var dicV = UserDefaults.standard.dictionary(forKey: nameWithOutSuffix)! as! [String: String] + if let p = dicV["Path"] { + if p.contains("/") { + dicV.updateValue(String(p.split(separator: "/").last!), forKey: "Path") + } + } + metadatas.append(dicV) } else { metadatas.append(["notGet": "true"]) } } } + metadatas.sort { Int($0["Date"] ?? "0")! < Int($1["Date"] ?? "0")! } } } } diff --git a/DarockBili Watch App/UserDynamic/UserDynamicMainView.swift b/DarockBili Watch App/UserDynamic/UserDynamicMainView.swift index c29eea5dd..fb8050e67 100644 --- a/DarockBili Watch App/UserDynamic/UserDynamicMainView.swift +++ b/DarockBili Watch App/UserDynamic/UserDynamicMainView.swift @@ -26,7 +26,7 @@ struct UserDynamicMainView: View { var body: some View { if sessdata != "" { ScrollView { - VStack { + LazyVStack { if dynamics.count != 0 { ForEach(0..bihfkE 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 V-~3m)cj)jh`zZe9|8M&C{{ce{bZ7to literal 0 HcmV?d00001 diff --git a/DarockBili.xcodeproj/xcuserdata/boring.xcuserdatad/xcschemes/xcschememanagement.plist b/DarockBili.xcodeproj/xcuserdata/boring.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 000000000..fe3c67eb2 --- /dev/null +++ b/DarockBili.xcodeproj/xcuserdata/boring.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,150 @@ + + + + + SchemeUserState + + Basic B&W QR Code (Playground) 1.xcscheme + + isShown + + orderHint + 21 + + Basic B&W QR Code (Playground) 2.xcscheme + + isShown + + orderHint + 22 + + Basic B&W QR Code (Playground).xcscheme + + isShown + + orderHint + 16 + + DarockBili Watch App (Notification).xcscheme_^#shared#^_ + + orderHint + 2 + + DarockBili Watch App.xcscheme_^#shared#^_ + + orderHint + 1 + + DarockBili.xcscheme_^#shared#^_ + + orderHint + 0 + + European SEPA Money Transfer + Watermark (Playground) 1.xcscheme + + isShown + + orderHint + 17 + + European SEPA Money Transfer + Watermark (Playground) 2.xcscheme + + isShown + + orderHint + 18 + + European SEPA Money Transfer + Watermark (Playground).xcscheme + + isShown + + orderHint + 13 + + Playground (Playground) 1.xcscheme + + isShown + + orderHint + 11 + + Playground (Playground) 2.xcscheme + + isShown + + orderHint + 12 + + Playground (Playground).xcscheme + + isShown + + orderHint + 10 + + README (Playground) 1.xcscheme + + isShown + + orderHint + 14 + + README (Playground) 2.xcscheme + + isShown + + orderHint + 15 + + README (Playground).xcscheme + + isShown + + orderHint + 6 + + SwiftDate (Playground) 1.xcscheme + + isShown + + orderHint + 23 + + SwiftDate (Playground) 2.xcscheme + + isShown + + orderHint + 24 + + SwiftDate (Playground).xcscheme + + isShown + + orderHint + 20 + + User Guide (Playground) 1.xcscheme + + isShown + + orderHint + 8 + + User Guide (Playground) 2.xcscheme + + isShown + + orderHint + 9 + + User Guide (Playground).xcscheme + + isShown + + orderHint + 7 + + + +