diff --git a/ShadowsocksX-NG/AppDelegate.swift b/ShadowsocksX-NG/AppDelegate.swift
index fec8109..a3de985 100644
--- a/ShadowsocksX-NG/AppDelegate.swift
+++ b/ShadowsocksX-NG/AppDelegate.swift
@@ -378,6 +378,9 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
}
@IBAction func updateSubscribeAtLaunch(_ sender: NSMenuItem) {
+ let defaults = UserDefaults.standard
+ defaults.set(!defaults.bool(forKey: "AutoUpdateSubscribe"), forKey: "AutoUpdateSubscribe")
+ updateSubscribeAtLaunchMenuItem.state = defaults.bool(forKey: "AutoUpdateSubscribe") ? 1 : 0
}
@@ -718,6 +721,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
}
serversMenuItem.submenu?.addItem(editSubscribeItem!)
serversMenuItem.submenu?.addItem(autoUpdateSubscribeItem!)
+ autoUpdateSubscribeItem?.state = UserDefaults.standard.bool(forKey: "AutoUpdateSubscribe") ? 1 : 0
serversMenuItem.submenu?.addItem(updateSubscribeItem!)
serversMenuItem.submenu?.addItem(showQRItem!)
serversMenuItem.submenu?.addItem(scanQRItem!)
diff --git a/ShadowsocksX-NG/Base.lproj/SubscribePreferenceWindowController.xib b/ShadowsocksX-NG/Base.lproj/SubscribePreferenceWindowController.xib
index fbb57ab..8db75da 100644
--- a/ShadowsocksX-NG/Base.lproj/SubscribePreferenceWindowController.xib
+++ b/ShadowsocksX-NG/Base.lproj/SubscribePreferenceWindowController.xib
@@ -10,7 +10,6 @@
-
@@ -22,7 +21,7 @@
-
+
@@ -31,16 +30,8 @@
-
-
-
-
-
-
-
-
-
+
@@ -48,7 +39,7 @@
-
+
@@ -56,7 +47,7 @@
-
+
@@ -91,7 +82,7 @@
-
+
@@ -99,7 +90,7 @@
-
+
@@ -107,7 +98,7 @@
-
+
@@ -115,7 +106,7 @@
-
+
@@ -126,34 +117,21 @@
-
+
-
-
+
-
+
-
+
@@ -168,7 +146,7 @@ DQ
-
+
@@ -190,7 +168,7 @@ DQ
-
+
@@ -198,6 +176,19 @@ DQ
+
@@ -209,16 +200,16 @@ DQ
-
+
-
-
+
-
+
-
+
+
@@ -232,6 +223,7 @@ DQ
+
diff --git a/ShadowsocksX-NG/Subscribe.swift b/ShadowsocksX-NG/Subscribe.swift
index e007bdd..c958f9b 100644
--- a/ShadowsocksX-NG/Subscribe.swift
+++ b/ShadowsocksX-NG/Subscribe.swift
@@ -172,7 +172,10 @@ class Subscribe: NSObject{
fileprivate func pushNotification(){
}
- fileprivate func isSame(source: Subscribe, target: Subscribe) -> Bool {
+ class func isSame(source: Subscribe, target: Subscribe) -> Bool {
return source.subscribeFeed == target.subscribeFeed && source.token == target.token && source.maxCount == target.maxCount
}
+ func isExist(_ target: Subscribe) -> Bool {
+ return self.subscribeFeed == target.subscribeFeed
+ }
}
diff --git a/ShadowsocksX-NG/SubscribeManager.swift b/ShadowsocksX-NG/SubscribeManager.swift
index 758b6f5..6bd26ff 100644
--- a/ShadowsocksX-NG/SubscribeManager.swift
+++ b/ShadowsocksX-NG/SubscribeManager.swift
@@ -25,19 +25,25 @@ class SubscribeManager:NSObject{
}
}
func addSubscribe(oneSubscribe: Subscribe) -> Bool {
+ for (index, value) in subscribes.enumerated() {
+ if Subscribe.isSame(source: oneSubscribe, target: value) {
+ return true
+ }
+ if value.isExist(oneSubscribe) {
+ subscribes.replaceSubrange(Range(index.. Bool {
- subscribes.enumerated().forEach({ (index, oneSubscribe) -> Void in
- if(oneSubscribe.getFeed() == toDeleteSubscribe.getFeed()){
- subscribes.remove(at: index)
- }
- })
- defaults.set(subscribesToDefaults(data: subscribes), forKey: "Subscribes")
+ func deleteSubscribe(atIndex: Int) -> Bool {
+ subscribes.remove(at: atIndex)
return true
}
+ func save() {
+ defaults.set(subscribesToDefaults(data: subscribes), forKey: "Subscribes")
+ }
fileprivate func subscribesToDefaults(data: [Subscribe]) -> [[String: AnyObject]]{
var ret : [[String: AnyObject]] = []
for value in data {
diff --git a/ShadowsocksX-NG/SubscribePreferenceWindowController.swift b/ShadowsocksX-NG/SubscribePreferenceWindowController.swift
index 207f96c..c0398df 100644
--- a/ShadowsocksX-NG/SubscribePreferenceWindowController.swift
+++ b/ShadowsocksX-NG/SubscribePreferenceWindowController.swift
@@ -34,6 +34,7 @@ class SubscribePreferenceWindowController: NSWindowController
sbMgr = SubscribeManager.instance
defaults = UserDefaults.standard
SubscribeTableView.reloadData()
+ updateSubscribeBoxVisible()
}
override func awakeFromNib() {
@@ -42,14 +43,14 @@ class SubscribePreferenceWindowController: NSWindowController
}
@IBAction func onOk(_ sender: NSButton) {
- // TODO append to manager and save
- let subscribe = Subscribe.init(initUrlString: FeedTextField.stringValue, initGroupName: GroupTextField.stringValue, initToken: TokenTextField.stringValue, initMaxCount: MaxCountTextField.integerValue)
- if !subscribe.feedValidator() {
- return shakeWindows()
+ if editingSubscribe != nil {
+ if !editingSubscribe.feedValidator() {
+ // Done Shake window
+ shakeWindows()
+ return
+ }
}
- _ = sbMgr.addSubscribe(oneSubscribe: subscribe)
- subscribe.updateServerFromFeed()
- SubscribeTableView.reloadData()
+ sbMgr.save()
window?.performClose(self)
}
@@ -77,10 +78,12 @@ class SubscribePreferenceWindowController: NSWindowController
if index >= 0 {
SubscribeTableView.beginUpdates()
for (_, toDeleteIndex) in SubscribeTableView.selectedRowIndexes.enumerated() {
- print(sbMgr.subscribes.count)
- sbMgr.subscribes.remove(at: toDeleteIndex - deleteCount)
+ _ = sbMgr.deleteSubscribe(atIndex: toDeleteIndex - deleteCount)
SubscribeTableView.removeRows(at: IndexSet(integer: toDeleteIndex - deleteCount), withAnimation: .effectFade)
deleteCount += 1
+ if sbMgr.subscribes.count == 0 {
+ cleanField()
+ }
}
SubscribeTableView.endUpdates()
}
@@ -92,8 +95,16 @@ class SubscribePreferenceWindowController: NSWindowController
func updateSubscribeBoxVisible() {
if sbMgr.subscribes.count <= 0 {
DeleteSubscribeBtn.isEnabled = false
+ FeedTextField.isEnabled = false
+ TokenTextField.isEnabled = false
+ GroupTextField.isEnabled = false
+ MaxCountTextField.isEnabled = false
}else{
DeleteSubscribeBtn.isEnabled = true
+ FeedTextField.isEnabled = true
+ TokenTextField.isEnabled = true
+ GroupTextField.isEnabled = true
+ MaxCountTextField.isEnabled = true
}
}
@@ -236,6 +247,13 @@ class SubscribePreferenceWindowController: NSWindowController
}
}
+ func cleanField(){
+ FeedTextField.stringValue = ""
+ TokenTextField.stringValue = ""
+ GroupTextField.stringValue = ""
+ MaxCountTextField.stringValue = ""
+ }
+
func shakeWindows(){
let numberOfShakes:Int = 8
let durationOfShake:Float = 0.5
diff --git a/ShadowsocksX-NG/zh-Hans.lproj/SubscribePreferenceWindowController.strings b/ShadowsocksX-NG/zh-Hans.lproj/SubscribePreferenceWindowController.strings
index e99808d..5f5fb0d 100644
--- a/ShadowsocksX-NG/zh-Hans.lproj/SubscribePreferenceWindowController.strings
+++ b/ShadowsocksX-NG/zh-Hans.lproj/SubscribePreferenceWindowController.strings
@@ -3,13 +3,13 @@
"CfK-8Y-YNP.title" = "OK";
/* Class = "NSWindow"; title = "Window"; ObjectID = "F0z-JX-Cv5"; */
-"F0z-JX-Cv5.title" = "Window";
+"F0z-JX-Cv5.title" = "订阅设置";
/* Class = "NSTextFieldCell"; title = "Token"; ObjectID = "IrJ-D8-tlX"; */
-"IrJ-D8-tlX.title" = "Token";
+"IrJ-D8-tlX.title" = "口令";
/* Class = "NSTextFieldCell"; title = "Group"; ObjectID = "f2p-qb-uuE"; */
-"f2p-qb-uuE.title" = "Group";
+"f2p-qb-uuE.title" = "组名";
/* Class = "NSTextFieldCell"; title = "Text"; ObjectID = "ik7-wS-gok"; */
"ik7-wS-gok.title" = "Text";
@@ -18,7 +18,7 @@
"rMX-5B-Fvs.title" = "订阅设置";
/* Class = "NSTextFieldCell"; title = "Count"; ObjectID = "wbG-HT-bdN"; */
-"wbG-HT-bdN.title" = "Count";
+"wbG-HT-bdN.title" = "最大数量";
/* Class = "NSTextFieldCell"; title = "URL"; ObjectID = "yBp-oB-gbL"; */
-"yBp-oB-gbL.title" = "URL";
+"yBp-oB-gbL.title" = "订阅地址";