Skip to content

Commit 1ef7975

Browse files
committed
macOS: タイムライン切り替えの時、現在使っているアカウントの別タイムラインを上に出すように
1 parent 3b7e81c commit 1ef7975

File tree

5 files changed

+75
-19
lines changed

5 files changed

+75
-19
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
//
2+
// HasUserToken.swift
3+
//
4+
// iMast https://github.com/cinderella-project/iMast
5+
//
6+
// Created by user on 2021/02/19.
7+
//
8+
// ------------------------------------------------------------------------
9+
//
10+
// Copyright 2017-2021 rinsuki and other contributors.
11+
//
12+
// Licensed under the Apache License, Version 2.0 (the "License");
13+
// you may not use this file except in compliance with the License.
14+
// You may obtain a copy of the License at
15+
//
16+
// http://www.apache.org/licenses/LICENSE-2.0
17+
//
18+
// Unless required by applicable law or agreed to in writing, software
19+
// distributed under the License is distributed on an "AS IS" BASIS,
20+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21+
// See the License for the specific language governing permissions and
22+
// limitations under the License.
23+
24+
import Foundation
25+
import iMastMacCore
26+
27+
28+
protocol MaybeHasUserToken {
29+
func getUserTokenIfAvailable() -> MastodonUserToken?
30+
}
31+
32+
protocol HasUserToken: MaybeHasUserToken {
33+
var userToken: MastodonUserToken { get }
34+
}
35+
36+
extension HasUserToken {
37+
func getUserTokenIfAvailable() -> MastodonUserToken? {
38+
return userToken
39+
}
40+
}

Sources/Mac/App/Main/MainViewController.swift

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import Cocoa
2525
import iMastMacCore
2626

27-
class MainViewController: NSViewController {
27+
class MainViewController: NSViewController, MaybeHasUserToken {
2828
@objc dynamic var child: NSViewController? = nil {
2929
didSet {
3030
if let vc = oldValue {
@@ -56,10 +56,7 @@ class MainViewController: NSViewController {
5656
bind(.title, to: self, withKeyPath: "child.title", options: nil)
5757
}
5858

59-
override var representedObject: Any? {
60-
didSet {
61-
// Update the view, if already loaded.
62-
}
59+
func getUserTokenIfAvailable() -> MastodonUserToken? {
60+
return (child as? MaybeHasUserToken)?.getUserTokenIfAvailable()
6361
}
64-
6562
}

Sources/Mac/App/Main/MainWindow.swift

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -100,22 +100,35 @@ extension MainWindow: NSToolbarDelegate {
100100
extension MainWindow: NSMenuDelegate {
101101
func menuNeedsUpdate(_ menu: NSMenu) {
102102
menu.removeAllItems()
103+
func addMenuItems(for userToken: MastodonUserToken, menu: NSMenu) {
104+
menu.addItem(.init(title: L10n.Timeline.home, action: #selector(changeViewController(_:)), keyEquivalent: "") {
105+
$0.image = NSImage(systemSymbolName: "house", accessibilityDescription: nil)
106+
$0.identifier = .init("home")
107+
})
108+
menu.addItem(.init(title: L10n.Timeline.local, action: #selector(changeViewController(_:)), keyEquivalent: "") {
109+
$0.image = NSImage(systemSymbolName: "person.2", accessibilityDescription: nil)
110+
$0.identifier = .init("local")
111+
})
112+
menu.addItem(.init(title: L10n.Timeline.federated, action: #selector(changeViewController(_:)), keyEquivalent: "") {
113+
$0.image = NSImage(systemSymbolName: "globe", accessibilityDescription: nil)
114+
$0.identifier = .init("federated")
115+
})
116+
}
117+
let maybeUserToken = vc.getUserTokenIfAvailable()
118+
if let userToken = maybeUserToken {
119+
menu.addItem(.init(title: "@" + userToken.acct, action: nil, keyEquivalent: ""))
120+
menu.identifier = .init(userToken.id!)
121+
addMenuItems(for: userToken, menu: menu)
122+
menu.addItem(.separator())
123+
}
103124
for userToken in MastodonUserToken.getAllUserTokens() {
125+
if userToken.id == maybeUserToken?.id {
126+
continue
127+
}
104128
menu.addItem(.init(title: userToken.acct, action: nil, keyEquivalent: "") {
105129
$0.submenu = NSMenu() {
106130
$0.identifier = .init(userToken.id!)
107-
$0.addItem(.init(title: L10n.Timeline.home, action: #selector(changeViewController(_:)), keyEquivalent: "") {
108-
$0.image = NSImage(systemSymbolName: "house", accessibilityDescription: nil)
109-
$0.identifier = .init("home")
110-
})
111-
$0.addItem(.init(title: L10n.Timeline.local, action: #selector(changeViewController(_:)), keyEquivalent: "") {
112-
$0.image = NSImage(systemSymbolName: "person.2", accessibilityDescription: nil)
113-
$0.identifier = .init("local")
114-
})
115-
$0.addItem(.init(title: L10n.Timeline.federated, action: #selector(changeViewController(_:)), keyEquivalent: "") {
116-
$0.image = NSImage(systemSymbolName: "globe", accessibilityDescription: nil)
117-
$0.identifier = .init("federated")
118-
})
131+
addMenuItems(for: userToken, menu: $0)
119132
}
120133
})
121134
}

Sources/Mac/App/Timeline/TimelineViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import Cocoa
2525
import Ikemen
2626
import iMastMacCore
2727

28-
class TimelineViewController: NSViewController {
28+
class TimelineViewController: NSViewController, HasUserToken {
2929
let userToken: MastodonUserToken
3030
let timelineType: MastodonTimelineType
3131
lazy var tableView = NSTableView() {

iMast.xcodeproj/project.pbxproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,8 @@
205205
CEC01AD325DF944E004D18C0 /* AppearancePreferencesPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC01AD225DF944E004D18C0 /* AppearancePreferencesPaneView.swift */; };
206206
CEC01AD425DF944E004D18C0 /* AppearancePreferencesPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC01AD225DF944E004D18C0 /* AppearancePreferencesPaneView.swift */; };
207207
CEC01AE125DF99E5004D18C0 /* PreferencesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE043A923780C94007A915E /* PreferencesViewController.swift */; };
208+
CEC01AFC25DFC76B004D18C0 /* HasUserToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC01AFB25DFC76B004D18C0 /* HasUserToken.swift */; };
209+
CEC01AFD25DFC76B004D18C0 /* HasUserToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC01AFB25DFC76B004D18C0 /* HasUserToken.swift */; };
208210
CEC19B961F49540D00CEDCE2 /* PostAndUserViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC19B951F49540D00CEDCE2 /* PostAndUserViewController.swift */; };
209211
CEC4704B25DC725F003E3AEF /* PreferencesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE043A923780C94007A915E /* PreferencesViewController.swift */; };
210212
CEC4704C25DC725F003E3AEF /* TimelineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFB983225C7ECBB00D55B03 /* TimelineViewController.swift */; };
@@ -834,6 +836,7 @@
834836
CEBB33E11F32381200E4D3AB /* ShareVisibilityTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShareVisibilityTableViewController.swift; sourceTree = "<group>"; };
835837
CEBE930F2256F38400943AB9 /* ListAdderTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListAdderTableViewController.swift; sourceTree = "<group>"; };
836838
CEC01AD225DF944E004D18C0 /* AppearancePreferencesPaneView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppearancePreferencesPaneView.swift; sourceTree = "<group>"; };
839+
CEC01AFB25DFC76B004D18C0 /* HasUserToken.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HasUserToken.swift; sourceTree = "<group>"; };
837840
CEC19B951F49540D00CEDCE2 /* PostAndUserViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostAndUserViewController.swift; sourceTree = "<group>"; };
838841
CEC4707025DC725F003E3AEF /* iMast.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iMast.app; sourceTree = BUILT_PRODUCTS_DIR; };
839842
CEC4BA6B22F170840066A916 /* MastodonPostDetailReactionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonPostDetailReactionsViewController.swift; sourceTree = "<group>"; };
@@ -1594,6 +1597,7 @@
15941597
children = (
15951598
CE77944F25D9C10D00AF9F2C /* AutolayoutTextView.swift */,
15961599
CEF763FD25DF7AB000902415 /* LayeredImageView.swift */,
1600+
CEC01AFB25DFC76B004D18C0 /* HasUserToken.swift */,
15971601
);
15981602
path = Common;
15991603
sourceTree = "<group>";
@@ -3523,6 +3527,7 @@
35233527
CEC4704C25DC725F003E3AEF /* TimelineViewController.swift in Sources */,
35243528
CEC4704D25DC725F003E3AEF /* strings.swift in Sources */,
35253529
CEC4704E25DC725F003E3AEF /* MainWindow.swift in Sources */,
3530+
CEC01AFD25DFC76B004D18C0 /* HasUserToken.swift in Sources */,
35263531
CEC4704F25DC725F003E3AEF /* assets.swift in Sources */,
35273532
CEF763FF25DF7AB000902415 /* LayeredImageView.swift in Sources */,
35283533
CEC4705025DC725F003E3AEF /* AddMastodonAccountSheetView.swift in Sources */,
@@ -3580,6 +3585,7 @@
35803585
CEFB983F25C7EDC100D55B03 /* TimelineViewController.swift in Sources */,
35813586
CE8EFAEC25C93C17004FFE4B /* strings.swift in Sources */,
35823587
CEFB988F25C823E500D55B03 /* MainWindow.swift in Sources */,
3588+
CEC01AFC25DFC76B004D18C0 /* HasUserToken.swift in Sources */,
35833589
CE8EFAED25C93C17004FFE4B /* assets.swift in Sources */,
35843590
CEF763FE25DF7AB000902415 /* LayeredImageView.swift in Sources */,
35853591
CEF6C7CE23B0B46D00E0ADA1 /* AddMastodonAccountSheetView.swift in Sources */,

0 commit comments

Comments
 (0)