123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- //
- // AccountInputController.swift
- // PDF Reader Pro
- //
- // Created by User-Tangchao on 2024/10/22.
- //
- import Cocoa
- class AccountInputController: NSViewController {
- @IBOutlet weak var leftBox: NSBox!
- @IBOutlet weak var rightBox: NSBox!
-
- @IBOutlet weak var leftBackgroundIv: NSImageView!
- @IBOutlet weak var leftTitleLabel: NSTextField!
- @IBOutlet weak var leftListBox: NSBox!
-
- var glayer: CAGradientLayer?
-
- var rightListView: AccountRightListView?
-
- private var signInView_: AccountSignInView?
- private var loginView_: AccountLoginView?
-
- var rightDatas: [String] = [] {
- didSet {
- self.rightListView?.rightDatas = self.rightDatas
- }
- }
-
- var itemClick: KMCommonClickBlock?
-
- convenience init() {
- self.init(nibName: "AccountInputController", bundle: MainBundle)
- }
-
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do view setup here.
-
- self.initSubviews()
- self.initDefaultValue()
- }
-
- func initDefaultValue() {
- self.leftBackgroundIv.image = NSImage(named: "KMImageNameAccountLeftBackgroundIcon")
-
- self.leftTitleLabel.stringValue = NSLocalizedString("Log in for a 7-Day Free Trial", comment: "")
- self.leftTitleLabel.font = .systemFont(ofSize: 20)
- self.leftTitleLabel.textColor = KMAppearance.themeColor()
- let gradientLayer = CAGradientLayer()
- let startColor = NSColor(red: 245/255.0, green: 73/255.0, blue: 212/255.0, alpha: 1.0)
- let endColor = NSColor(red: 125/255.0, green: 96/255.0, blue: 255/255.0, alpha: 1.0)
- gradientLayer.colors = [startColor, endColor]
- gradientLayer.startPoint = CGPoint(x: 0.5, y: 1)
- gradientLayer.endPoint = CGPoint(x: 0.5, y: 0)
- //// gradientLayer.locations = [0, 1]
- // self.leftTitleLabel.wantsLayer = true
- gradientLayer.frame = self.leftListBox.bounds
- //// gradientLayer.mask = self.leftTitleLabel.layer
- //// self.leftTitleLabel.layer?.frame = gradientLayer.bounds
- // self.glayer = gradientLayer
- //
- // self.leftBox.contentView?.wantsLayer = true
- //// self.leftBox.contentView?.layer?.insertSublayer(gradientLayer, at: 0)
- // self.leftBox.contentView?.layer?.addSublayer(gradientLayer)
- // self.leftTitleLabel.layer?.backgroundColor = NSColor.red.cgColor
- // self.leftTitleLabel.layer?.addSublayer(gradientLayer)
- self.leftListBox.wantsLayer = true
- self.leftListBox.layer?.addSublayer(gradientLayer)
-
- // 假设你已经有一个NSTextField实例叫textField
- // NSTextField *textField = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 200, 50)];
-
- // 创建CAGradientLayer实例
- // CAGradientLayer *gradientLayer = [CAGradientLayer layer];
- // gradientLayer.frame = textField.bounds; // 确保渐变层的大小和位置与textField相匹配
- // gradientLayer.colors = @[(id)[NSColor redColor].CGColor, (id)[NSColor blueColor].CGColor]; // 设置渐变色
-
- // 将textField的layer的背景色设置为Clear Color
- // [textField.layer setBackgroundColor: [NSColor clearColor].CGColor];
-
- // 添加渐变层作为子层
- // [textField.layer addSublayer:gradientLayer];
-
- // 如果需要,你可以继续自定义gradientLayer的其他属性,例如startPoint和endPoint来改变渐变方向
- self.leftListBox.borderWidth = 0
- self.leftListBox.fillColor = .clear
-
- self.leftBox.borderWidth = 0
- self.rightBox.borderWidth = 0
- }
-
- func initSubviews() {
- let rightListView = AccountRightListView.createFromNib()
- self.leftListBox.contentView = rightListView
- self.rightListView = rightListView
- rightListView?.rightDatas = self.rightDatas
- }
-
- func goToSignIn() {
- self._showSignInView()
- }
-
- func gotoLogin() {
- self._showLoginView()
- }
-
- private func _showSignInView() {
- let view = AccountSignInView.createFromNib()
- self.rightBox.contentView = view
- self.signInView_ = view
-
- view?.itemClick = { [weak self] idx, params in
- if idx == 1 { //切换登录
- self?._showLoginView()
- } else if idx == 2 { // 注册
- let state = self?._isConnectionAvailable() ?? false
- if !state {
- self?._showHud(msg: NSLocalizedString("Unable to connect to server, please check your connection.", comment: ""))
- return
- }
-
- guard let email = params.first as? String, email.isEmpty == false else {
- let string = NSLocalizedString("Please enter an email address.", comment: "")
- self?.signInView_?.inputView.showAccountError(string)
- return
- }
-
- if email.count > 50 {
- let string = NSLocalizedString("Email address must be no longer than 50 characters.", comment: "")
- self?.signInView_?.inputView.showAccountError(string)
- return
- }
-
- let valid = self?._validateEmail(email: email) ?? false
- if valid == false {
- let string = NSLocalizedString("Please enter a valid email address.", comment: "")
- self?.signInView_?.inputView.showAccountError(string)
- return
- }
-
- guard let pString = params.last as? String, pString.isEmpty == false else {
- let string = NSLocalizedString("Please enter a password.", comment: "")
- self?.signInView_?.inputView.showPasswordError(string)
- return
- }
- if pString.count < 6 {
- let string = NSLocalizedString("Password length must be 6-16 characters.", comment: "")
- self?.signInView_?.inputView.showPasswordError(string)
- return
- }
-
- for char in pString {
- let str = "\(char)"
- if kPwdInputStrings.contains(str) == false {
- let err = NSLocalizedString("Password only contains alphabets, numbers and special characters.", comment: "")
- self?.signInView_?.inputView.showPasswordError(err)
- return
- }
- }
-
-
- let uuid = GetHardwareUUID()
- let params = ["email" : email, "password" : KMHTTP.md5(pString), "device_code" : uuid]
- self?.signInView_?.kStartloading()
- KMHTTP.OEM_POST(urlString: kURLAPI_oemRegister, parameter: params, headers: nil) { success , dataModel, err in
- let model = AccountInfoModel(dict: dataModel?.data as? [String : Any] ?? [:])
- self?.signInView_?.kEndLoading()
-
- if success == false {
- if dataModel?.code == 406 {
- let msg = dataModel?.msg ?? "The email address has been registered."
- let string = NSLocalizedString(msg, comment: "")
- self?.signInView_?.inputView.showAccountError(string)
- } else {
- let code = dataModel?.code ?? 0
- if code == 423 || code == 412 || code == 1000 || code == 407 {
- let msg = dataModel?.msg ?? ""
- let string = NSLocalizedString(msg, comment: "")
- self?.signInView_?.inputView.showAccountError(string)
- }
- }
- return
- }
-
- self?.itemClick?(1, model)
- }
- }
- }
- }
-
- private func _showLoginView() {
- let view = AccountLoginView.createFromNib()
- self.rightBox.contentView = view
- self.loginView_ = view
-
- if let data = KMDataManager.ud_string(forKey: kAccountEmailKey) {
- view?.inputView.accountTextFiled.stringValue = data
- }
-
- view?.itemClick = { [weak self] idx, params in
- if idx == 1 { //切换注册
- self?._showSignInView()
- } else if idx == 2 { // 登陆
- let state = self?._isConnectionAvailable() ?? false
- if !state {
- self?._showHud(msg: NSLocalizedString("Unable to connect to server, please check your connection.", comment: ""))
- return
- }
-
- guard let email = params.first as? String, email.isEmpty == false else {
- let string = NSLocalizedString("Please enter an email address.", comment: "")
- self?.loginView_?.inputView.showAccountError(string)
- return
- }
-
- if email.count > 50 {
- let string = NSLocalizedString("Email address must be no longer than 50 characters.", comment: "")
- self?.loginView_?.inputView.showAccountError(string)
- return
- }
-
- let valid = self?._validateEmail(email: email) ?? false
- if valid == false {
- let string = NSLocalizedString("Please enter a valid email address.", comment: "")
- self?.loginView_?.inputView.showAccountError(string)
- return
- }
-
- guard let pString = params.last as? String, pString.isEmpty == false else {
- let string = NSLocalizedString("Please enter a password.", comment: "")
- self?.loginView_?.inputView.showPasswordError(string)
- return
- }
- if pString.count < 6 {
- let string = NSLocalizedString("Password length must be 6-16 characters.", comment: "")
- self?.loginView_?.inputView.showPasswordError(string)
- return
- }
-
- let uuid = GetHardwareUUID()
- let params = ["email" : email, "password" : KMHTTP.md5(pString), "device_code" : uuid]
- self?.loginView_?.kStartloading()
- KMHTTP.OEM_POST(urlString: kURLAPI_oemLogin, parameter: params, headers: nil) { success , dataModel, err in
- let model = AccountInfoModel(dict: dataModel?.data as? [String : Any] ?? [:])
- self?.loginView_?.kEndLoading()
-
- if success == false {
- if dataModel?.code == 410 {
- // let msg = dataModel?.msg ?? "Please enter a password."
- let msg = "The account doesn't exist."
- let string = NSLocalizedString(msg, comment: "")
- self?.loginView_?.inputView.showAccountError(string)
- } else if dataModel?.code == 409 {
- let msg = dataModel?.msg ?? "Please enter the correct password."
- let string = NSLocalizedString(msg, comment: "")
- self?.loginView_?.inputView.showPasswordError(string)
- } else {
- let code = dataModel?.code ?? 0
- if code == 422 || code == 415 || code == 414 || code == 1001 || code == 407 || code == 405 || code == 401 {
- let msg = dataModel?.msg ?? ""
- let string = NSLocalizedString(msg, comment: "")
- self?.loginView_?.inputView.showPasswordError(string)
- }
- }
- return
- }
-
- self?.itemClick?(1, model)
- }
- } else if idx == 3 { // 忘记密码
- KMTools.openURL(urlString: kResetpasswordUrlString)
- }
- }
- }
-
- private func _validateEmail(email: String) -> Bool {
- // let ss = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
- let regex = "^[a-z0-9A-Z+-\\._]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)*\\.)+[a-zA-Z]{2,}$"
- // let regex = "^[a-z0-9A-Z+-]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)*)+[a-zA-Z]{2,}$"
- let pred = NSPredicate(format: "SELF MATCHES %@", regex)
- return pred.evaluate(with: email)
- }
-
- private func _isConnectionAvailable() -> Bool {
- if Reachability.forInternetConnection().currentReachabilityStatus().rawValue == 0 {
- return false
- }
- return true
- }
-
- private func _showHud(msg: String) {
- // if let data = self.view {
- // _ = CustomAlertView(message: msg, from: data, with: .black)
- CustomAlertView.alertView(message: msg, fromView: self.view, withStyle: .black)
- // }
- }
- }
|