增加网络监听

This commit is contained in:
zeng 2025-04-24 17:23:22 +08:00
parent 8044ee8f16
commit 93a3c7336a
10 changed files with 87 additions and 106 deletions

View File

@ -1,5 +1,5 @@
# Uncomment the next line to define a global platform for your project # Uncomment the next line to define a global platform for your project
platform :ios, '13.0' platform :ios, '15.6'
#source 'https://github.com/CocoaPods/Specs' #source 'https://github.com/CocoaPods/Specs'
source 'https://cdn.cocoapods.org/' source 'https://cdn.cocoapods.org/'

View File

@ -179,7 +179,7 @@
}; };
99BF4E2B3615B1F54D05DA28 /* [CP] Embed Pods Frameworks */ = { 99BF4E2B3615B1F54D05DA28 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 12;
files = ( files = (
); );
inputFileListPaths = ( inputFileListPaths = (
@ -214,9 +214,10 @@
ARCHS = "$(ARCHS_STANDARD)"; ARCHS = "$(ARCHS_STANDARD)";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = ""; DEVELOPMENT_TEAM = TWDZ3MP9DV;
ENABLE_USER_SCRIPT_SANDBOXING = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = Thimra/Source/Info.plist; INFOPLIST_FILE = Thimra/Source/Info.plist;
@ -232,15 +233,16 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = cn.com.boytv.ShortPlay; PRODUCT_BUNDLE_IDENTIFIER = com.thimratv.app;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO; SUPPORTS_MACCATALYST = NO;
SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OBJC_BRIDGING_HEADER = "Thimra/Source/Thimra-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Thimra/Source/Thimra-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1; TARGETED_DEVICE_FAMILY = 1;
VALID_ARCHS = "arm64 arm64e x86_64"; VALID_ARCHS = "arm64 arm64e armv7s x86_64";
}; };
name = Debug; name = Debug;
}; };
@ -251,9 +253,10 @@
ARCHS = "$(ARCHS_STANDARD)"; ARCHS = "$(ARCHS_STANDARD)";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = ""; DEVELOPMENT_TEAM = TWDZ3MP9DV;
ENABLE_USER_SCRIPT_SANDBOXING = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = Thimra/Source/Info.plist; INFOPLIST_FILE = Thimra/Source/Info.plist;
@ -269,15 +272,16 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = cn.com.boytv.ShortPlay; PRODUCT_BUNDLE_IDENTIFIER = com.thimratv.app;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO; SUPPORTS_MACCATALYST = NO;
SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OBJC_BRIDGING_HEADER = "Thimra/Source/Thimra-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Thimra/Source/Thimra-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1; TARGETED_DEVICE_FAMILY = 1;
VALID_ARCHS = "arm64 arm64e x86_64"; VALID_ARCHS = "arm64 arm64e armv7s x86_64";
}; };
name = Release; name = Release;
}; };

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>

View File

@ -23,7 +23,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
NotificationCenter.default.addObserver(self, selector: #selector(reachabilityDidChangeNotification), name: SPNetworkReachabilityManager.reachabilityDidChangeNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(reachabilityDidChangeNotification), name: SPNetworkReachabilityManager.reachabilityDidChangeNotification, object: nil)
NetworkObserver.share.startMonitoring() SPNetworkReachabilityManager.manager.startMonitoring()
return true return true
@ -45,9 +45,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
@objc private func reachabilityDidChangeNotification() { @objc private func reachabilityDidChangeNotification() {
// if SPNetworkReachabilityManager.manager.isReachable { if SPNetworkReachabilityManager.manager.isReachable == true {
// SPLoginManager.manager.requestVisitorLogin(completer: nil) SPLoginManager.manager.requestVisitorLogin(completer: nil)
// } }
} }
} }

View File

@ -88,7 +88,7 @@ class SPViewController: UIViewController, JYPageChildContollerProtocol {
if let statusBarStyle = statusBarStyle { if let statusBarStyle = statusBarStyle {
return statusBarStyle return statusBarStyle
} else { } else {
return .default return .lightContent
} }
} }
override var prefersStatusBarHidden: Bool { override var prefersStatusBarHidden: Bool {

View File

@ -20,20 +20,11 @@ class SPNetworkReachabilityManager {
static let manager: SPNetworkReachabilityManager = SPNetworkReachabilityManager() static let manager: SPNetworkReachabilityManager = SPNetworkReachabilityManager()
private let reachabilityManager = NetworkReachabilityManager()
/// ///
// @objc var isReachable: Bool { var isReachable: Bool?
// switch currentReachabilityStatus {
// case .notReachable: /*
// return false private let reachabilityManager = NetworkReachabilityManager()
// case .reachableViaWiFi, .reachableViaWWAN:
// return true
//
// default:
// return false
// }
// }
func startMonitoring() { func startMonitoring() {
@ -51,6 +42,45 @@ class SPNetworkReachabilityManager {
}) })
} }
*/
private let monitor = NWPathMonitor()
private let queue = DispatchQueue(label: "NetworkMonitorQueue")
func startMonitoring() {
monitor.pathUpdateHandler = { [weak self] path in
guard let self = self else { return }
if path.status == .satisfied {
if self.isReachable == false {
print("++++++有网")
NotificationCenter.default.post(name: SPNetworkReachabilityManager.reachabilityDidChangeNotification, object: nil)
}
self.isReachable = true
} else {
if self.isReachable == true {
print("++++++无网")
NotificationCenter.default.post(name: SPNetworkReachabilityManager.reachabilityDidChangeNotification, object: nil)
}
self.isReachable = false
}
// if path.usesInterfaceType(.wifi) {
// print("++++++Using Wi-Fi")
// }
//
// if path.usesInterfaceType(.cellular) {
// print("++++++Using Cellular")
// }
}
monitor.start(queue: queue)
}
func stopMonitoring() {
monitor.cancel()
}
} }

View File

@ -62,9 +62,8 @@ class SPHomeViewController: SPHomeChildController {
super.viewDidLoad() super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(reachabilityDidChangeNotification), name: SPNetworkReachabilityManager.reachabilityDidChangeNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(reachabilityDidChangeNotification), name: SPNetworkReachabilityManager.reachabilityDidChangeNotification, object: nil)
requestModuleData()
requestPlayHistory() updateAllData(completer: nil)
requestListDataArr(page: 1, completer: nil)
_setupUI() _setupUI()
@ -76,9 +75,8 @@ class SPHomeViewController: SPHomeChildController {
} }
override func handleHeaderRefresh(_ completer: (() -> Void)?) { override func handleHeaderRefresh(_ completer: (() -> Void)?) {
requestModuleData()
requestPlayHistory() updateAllData { [weak self] in
requestListDataArr(page: 1) { [weak self] in
self?.collectionView.sp_endHeaderRefreshing() self?.collectionView.sp_endHeaderRefreshing()
} }
} }
@ -89,6 +87,7 @@ class SPHomeViewController: SPHomeChildController {
} }
} }
} }
extension SPHomeViewController { extension SPHomeViewController {
@ -124,7 +123,9 @@ extension SPHomeViewController {
} }
@objc private func reachabilityDidChangeNotification() { @objc private func reachabilityDidChangeNotification() {
if SPNetworkReachabilityManager.manager.isReachable == true, self.viewModel.moduleModel == nil {
updateAllData(completer: nil)
}
} }
} }
@ -164,6 +165,13 @@ extension SPHomeViewController: UICollectionViewDelegate, UICollectionViewDataSo
extension SPHomeViewController { extension SPHomeViewController {
private func updateAllData(completer: (() -> Void)?) {
requestModuleData()
requestPlayHistory()
requestListDataArr(page: 1) {
completer?()
}
}
private func requestModuleData() { private func requestModuleData() {
SPHomeAPI.requestHomeModuleData { [weak self] model in SPHomeAPI.requestHomeModuleData { [weak self] model in

View File

@ -42,6 +42,7 @@ class SPHomeHotSearchView: UIView {
tableView.separatorStyle = .none tableView.separatorStyle = .none
tableView.showsVerticalScrollIndicator = false tableView.showsVerticalScrollIndicator = false
tableView.showsHorizontalScrollIndicator = false tableView.showsHorizontalScrollIndicator = false
tableView.keyboardDismissMode = .onDrag
tableView.contentInset = .init(top: 0, left: 0, bottom: kSPTabbarSafeBottomMargin, right: 0) tableView.contentInset = .init(top: 0, left: 0, bottom: kSPTabbarSafeBottomMargin, right: 0)
SPHomeHotSearchCell.registerCell(tableView: tableView) SPHomeHotSearchCell.registerCell(tableView: tableView)
return tableView return tableView

View File

@ -165,8 +165,13 @@ class SPPlayerListViewController: SPViewController {
if isFirstPlay { if isFirstPlay {
isFirstPlay = false isFirstPlay = false
let offset = self.collectionView.contentOffset.y + 0.5 let offset = self.collectionView.contentOffset.y + 0.2
self.collectionView.setContentOffset(CGPoint(x: 0, y: offset), animated: false) self.collectionView.setContentOffset(CGPoint(x: 0, y: offset), animated: false)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
let offset = self.collectionView.contentOffset.y
self.collectionView.setContentOffset(CGPoint(x: 0, y: floor(offset)), animated: false)
}
} }
if currentIndexPath.row <= 2 { if currentIndexPath.row <= 2 {

View File

@ -1,72 +0,0 @@
//
// NetworkObserver.swift
// Thimra
//
// Created by Overseas on 2025/4/21.
//
import UIKit
import Network
import Reachability
class NetworkObserver {
static let share = NetworkObserver()
private let monitor = NWPathMonitor()
private let queue = DispatchQueue(label: "NetworkMonitorQueue")
func startMonitoring() {
monitor.pathUpdateHandler = { path in
if path.status == .satisfied {
print("++++++有网")
} else {
print("++++++无网")
}
// if path.usesInterfaceType(.wifi) {
// print("++++++Using Wi-Fi")
// }
//
// if path.usesInterfaceType(.cellular) {
// print("++++++Using Cellular")
// }
}
monitor.start(queue: queue)
}
func stopMonitoring() {
monitor.cancel()
}
/*
private let reachability = try! Reachability()
func startMonitoring() {
reachability.whenReachable = { reachability in
if reachability.connection == .wifi {
print("++++++Network reachable via Wi-Fi")
} else if reachability.connection == .cellular {
print("++++++Network reachable via Cellular")
}
}
reachability.whenUnreachable = { _ in
print("++++++Network not reachable")
}
do {
try reachability.startNotifier()
} catch {
print("++++++Unable to start notifier")
}
}
func stopMonitoring() {
reachability.stopNotifier()
}
*/
}