Skip to content

Commit 132d993

Browse files
authored
Merge branch 'master' into master_m-dragoev
2 parents f6ea7fc + 6d90991 commit 132d993

11 files changed

Lines changed: 120 additions & 9 deletions

File tree

.github/pull-request-template.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ A few sentences describing the overall goals of the pull request's commits.
88
## Checklist
99
- [ ] Localized
1010
- [ ] Added to changelog:
11-
- [ ] [Changelog View](https://github.com/leits/MeetingBar/blob/master/MeetingBar/Views/Changelog/Changelog.swift)
11+
- [ ] [Changelog View](https://github.com/leits/MeetingBar/blob/master/MeetingBar/UI/Views/Changelog/Changelog.swift)
1212
- [ ] [CHANGELOG.md](https://github.com/leits/MeetingBar/blob/master/CHANGELOG.md)
1313

1414
### Steps to Test or Reproduce

CHANGELOG.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ For next releases info look here: <https://github.com/leits/MeetingBar/releases>
55
## Unreleased
66

77
* Fix typo in language list (#839)
8+
* Fix multiple typos in the repo (#875)
9+
* Fix URL in PR template (#875)
10+
* Add Riverside meeting service (#875)
811

912
## Version 4.11.0
1013

@@ -97,7 +100,7 @@ and small bug fixes
97100
* Quick Actions ⚡
98101
* Show/hide meeting title in status bar
99102
* Open meeting from clipboard
100-
* Customizable appereance for events without meeting links
103+
* Customizable appearance for events without meeting links
101104
* Localization (Ukrainian and Russian)
102105
* Create meetings in Jam
103106
* Open event in Fantastical from event submenu
@@ -144,7 +147,7 @@ Fixed:
144147
> (released 11th Feb 2021)
145148
146149
* Add Around integration
147-
* Hide show time under title option for Big Sure
150+
* Hide show time under title option for Big Sur
148151
* Fix issues with service icons
149152
* Fix URLs for Firefox and Microsoft Edge
150153

@@ -161,7 +164,7 @@ Fixed:
161164
* Full control of the **app appearance**:
162165
* Customize icon, title, and time in the status bar
163166
* Show event end time and icon in the menu
164-
* Limitate event title length in the menu
167+
* Limit event title length in the menu
165168
* Wider settings for **displaying events**. Configure pending events, all-day events, and events without guests.
166169
* **Custom link** for ad hoc meeting
167170
* Global shortcut to open the app
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"images" : [
3+
{
4+
"filename" : "riverside_icon.svg",
5+
"idiom" : "universal"
6+
}
7+
],
8+
"info" : {
9+
"author" : "xcode",
10+
"version" : 1
11+
}
12+
}
Lines changed: 18 additions & 0 deletions
Loading

MeetingBar/Core/Models/MBEvent+Helpers.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,8 @@ public extension Array where Element == MBEvent {
150150
continue
151151
}
152152

153-
// Skip event if past events should be skipped after 10 min
154-
if event.startDate < now.addingTimeInterval(600), Defaults[.ongoingEventVisibility] == .showTenMinAfter {
153+
// Skip event only after it has been running for 10 minutes.
154+
if now >= event.startDate.addingTimeInterval(600), Defaults[.ongoingEventVisibility] == .showTenMinAfter {
155155
continue
156156
}
157157

MeetingBar/Extensions/DefaultsKeys.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ extension Defaults.Keys {
9999
static let teamsBrowser = Key<Browser>("teamsBrowser", default: systemDefaultBrowser)
100100
static let jitsiBrowser = Key<Browser>("jitsiBrowser", default: systemDefaultBrowser)
101101
static let slackBrowser = Key<Browser>("slackBrowser", default: systemDefaultBrowser)
102+
static let riversideBrowser = Key<Browser>("riversideBrowser", default: systemDefaultBrowser)
102103

103104
/**
104105
* browser used for creating a new meeting

MeetingBar/Resources /Localization /zh-Hans.lproj/Localizable.strings

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,39 @@
88
"create_meeting_error_message" = "自定义URL\"%@\"缺失或无效。 ";
99
"preferences_general_option_preferred_language_title" = "语言:";
1010
"preferences_general_option_shortcuts" = "快捷方式";
11+
"general_add" = "新建";
12+
"general_delete" = "删除";
13+
"general_save" = "保存";
14+
"general_meeting" = "会议";
15+
"general_when_event_starts" = "当会议开始时";
16+
"next_meeting_empty_title" = "今天没有即将开始的会议";
17+
"next_meeting_empty_message" = "是时候稍作休息了";
18+
"window_title_preferences" = "MeetingBar偏好设置";
19+
"window_title_onboarding" = "欢迎使用MeetingBar";
20+
"windows_title_changelog" = "MeetingBar – 更新内容";
21+
"preferences_tab_general" = "通用";
22+
"preferences_tab_appearance" = "外观";
23+
"preferences_tab_bookmarks" = "书签";
24+
"preferences_tab_links" = "链接";
25+
"preferences_tab_calendars" = "日程表";
26+
"preferences_tab_advanced" = "高级";
27+
"preferences_general_option_login_launch" = "登录后启动";
28+
"preferences_general_option_preferred_language_system_value" = "系统";
29+
"preferences_general_all_shortcut" = "所有快捷方式";
30+
"preferences_general_shortcut_open_menu" = "打开菜单:";
31+
"preferences_general_shortcut_create_meeting" = "新建会议:";
32+
"preferences_general_shortcut_join_next" = "加入下场会议:";
33+
"preferences_general_shortcut_join_from_clipboard" = "从剪贴板加入会议:";
34+
"preferences_general_shortcut_toggle_meeting_name_visibility" = "会议名在状态栏中是否可见:";
35+
"preferences_general_meeting_bar_description" = "MeetingBar是一款开源软件\n由Andrii Leitsius 🇺🇦实现\n带来更加流畅和简易的线上会议";
36+
"preferences_general_external_patronage" = "赞助";
37+
"preferences_general_external_contact" = "联系我们";
38+
"preferences_general_patron_title" = "成为赞助者";
39+
"preferences_general_patron_three_months" = "3个月 - 2.99 USD";
40+
"preferences_general_patron_six_months" = "6 个月 – 5.99 USD";
41+
"preferences_general_patron_description" = "这是一次性付款,不会自动续费。";
42+
"preferences_general_patron_thank_for_purchase" = "感谢!你为MeetingBar提供了%d个月的支持 🎉";
43+
"preferences_general_patron_restore_purchases" = "重置订阅";
44+
"preferences_general_feedback_title" = "如有疑问或建议,\n尽管联系:";
45+
"preferences_general_feedback_email" = "邮箱";
46+
"preferences_appearance_events_title" = "活动";

MeetingBar/Services/MeetingServices.swift

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ enum MeetingServices: String, Codable, CaseIterable {
8181
case livekit = "LiveKit Meet"
8282
case meetecho = "Meetecho"
8383
case streamyard = "StreamYard"
84+
case riverside = "Riverside"
8485
case other = "Other"
8586

8687
var localizedValue: String {
@@ -256,6 +257,28 @@ func openMeetingURL(_ service: MeetingServices?, _ url: URL, _ browser: Browser?
256257
NSWorkspace.shared.open(URL(string: "facetime-audio://" + url.absoluteString)!)
257258
case .phone:
258259
NSWorkspace.shared.open(URL(string: "tel://" + url.absoluteString)!)
260+
case .riverside:
261+
let browser = browser ?? Defaults[.riversideBrowser]
262+
if browser == riversideAppBrowser {
263+
// Try riversidefm:// scheme first
264+
var riversideAppURL = URLComponents(url: url, resolvingAgainstBaseURL: false)!
265+
riversideAppURL.scheme = "riversidefm"
266+
var result = riversideAppURL.url!.openInDefaultBrowser()
267+
268+
// If that fails, try riverside.fm:// scheme
269+
if !result {
270+
riversideAppURL.scheme = "riverside.fm"
271+
result = riversideAppURL.url!.openInDefaultBrowser()
272+
}
273+
274+
// If both app schemes fail, fall back to browser
275+
if !result {
276+
sendNotification("status_bar_error_app_link_title".loco("Riverside"), "status_bar_error_app_link_message".loco("Riverside"))
277+
url.openInDefaultBrowser()
278+
}
279+
} else {
280+
url.openIn(browser: browser)
281+
}
259282
default:
260283
url.openIn(browser: browser ?? Defaults[.defaultBrowser])
261284
}
@@ -297,7 +320,7 @@ private let meetingLinkRegexes: [MeetingServices: NSRegularExpression] = [
297320
.coscreen: try! NSRegularExpression(pattern: #"https?://join\.coscreen\.co/[^\s]*"#),
298321
.vowel: try! NSRegularExpression(pattern: #"https?://([a-z0-9.]+)?vowel\.com/#/g/[^\s]*"#),
299322
.zhumu: try! NSRegularExpression(pattern: #"https://welink\.zhumu\.com/j/[0-9]+?pwd=[a-zA-Z0-9]+"#),
300-
.lark: try! NSRegularExpression(pattern: #" https://vc\.larksuite\.com/j/[0-9]+"#),
323+
.lark: try! NSRegularExpression(pattern: #"https://vc\.larksuite\.com/j/[0-9]+"#),
301324
.feishu: try! NSRegularExpression(pattern: #"https://vc\.feishu\.cn/j/[0-9]+"#),
302325
.vimeo: try! NSRegularExpression(pattern: #"https://vimeo\.com/(showcase|event)/[0-9]+|https://venues\.vimeo\.com/[^\s]+"#),
303326
.ovice: try! NSRegularExpression(pattern: #"https://([a-z0-9-.]+)?ovice\.(in|com)/[^\s]*"#),
@@ -328,7 +351,8 @@ private let meetingLinkRegexes: [MeetingServices: NSRegularExpression] = [
328351
.zmPage: try! NSRegularExpression(pattern: #"https?://([a-zA-Z0-9.]+)\.zm\.page"#),
329352
.livekit: try! NSRegularExpression(pattern: #"https?://meet[a-zA-Z0-9.]*\.livekit\.io/rooms/[a-zA-Z0-9-#]+"#),
330353
.meetecho: try! NSRegularExpression(pattern: #"https?://meetings\.conf\.meetecho\.com/.+"#),
331-
.streamyard: try! NSRegularExpression(pattern: #"https://(?:www\.)?streamyard\.com/(?:guest/)?([a-z0-9]{8,13})(?:/|\?[^ \n]*)?"#)
354+
.streamyard: try! NSRegularExpression(pattern: #"https://(?:www\.)?streamyard\.com/(?:guest/)?([a-z0-9]{8,13})(?:/|\?[^ \n]*)?"#),
355+
.riverside: try! NSRegularExpression(pattern: #"https?://riverside\.(com|fm)/studio/[^\s]*"#)
332356
]
333357

334358
func regex(for service: MeetingServices) -> NSRegularExpression? {
@@ -628,6 +652,10 @@ func getIconForMeetingService(_ meetingService: MeetingServices?) -> NSImage {
628652
image = NSImage(named: "streamyard_icon")!
629653
image.size = NSSize(width: 16, height: 16)
630654

655+
case .some(.riverside):
656+
image = NSImage(named: "riverside_icon")!
657+
image.size = NSSize(width: 16, height: 16)
658+
631659
// tested and verified
632660
case .none:
633661
image = NSImage(named: "no_online_session")!

MeetingBar/UI/Views/Changelog/Changelog.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ struct ChangelogView: View {
3333
Text("⚡ Quick Actions: ")
3434
Text(" - Show/hide meeting title in status bar")
3535
Text(" - Open meeting from clipboard")
36-
Text("• Customizable appereance for events without meeting links")
36+
Text("• Customizable appearance for events without meeting links")
3737
Text("• Localization")
3838
Text("• Create meetings in Jam")
3939
Text("• Open event in Fantastical from event submenu")

MeetingBar/UI/Views/Preferences/LinksTab.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ struct LinksTab: View {
1717
@Default(.teamsBrowser) var teamsBrowser
1818
@Default(.slackBrowser) var slackBrowser
1919
@Default(.jitsiBrowser) var jitsiBrowser
20+
@Default(.riversideBrowser) var riversideBrowser
2021
@Default(.createMeetingServiceUrl) var createMeetingServiceUrl
2122
@Default(.createMeetingService) var createMeetingService
2223
@Default(.browsers) var allBrowser
@@ -99,6 +100,17 @@ struct LinksTab: View {
99100
Text(browser.name).tag(browser)
100101
}
101102
}
103+
Picker(
104+
selection: $riversideBrowser,
105+
label: Text("preferences_services_link_service_title".loco("Riverside")).frame(
106+
width: 200, alignment: .leading)
107+
) {
108+
Text(systemDefaultBrowser.name).tag(systemDefaultBrowser)
109+
Text(riversideAppBrowser.name).tag(riversideAppBrowser)
110+
ForEach(allBrowser, id: \.self) { (browser: Browser) in
111+
Text(browser.name).tag(browser)
112+
}
113+
}
102114
}
103115

104116
GroupBox(label: Label("Create", systemImage: "plus.circle")) {

0 commit comments

Comments
 (0)