Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion apps/desktop/Sources/SkimDesktopApp/ContentView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -696,9 +696,20 @@ struct ContentView: View {
.background(Design.panelBackground.opacity(0.72), in: RoundedRectangle(cornerRadius: 8))
.contentShape(Rectangle())
.onTapGesture {
if let url = URL(string: source.handleOrURL ?? "") {
openSourcePage(source)
}
}

private func openSourcePage(_ source: TrackedSource) {
guard source.platform == "youtube" else {
if let url = source.handleOrURL.flatMap(URL.init(string:)) {
NSWorkspace.shared.open(url)
}
return
}
Comment on lines +704 to +709

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

만약 source.canonicalID가 빈 문자열("")인 경우, path"channel/"이 되어 https://www.youtube.com/channel//about과 같은 잘못된 URL을 열려고 시도하게 됩니다.

데이터베이스 스키마에서 canonical_idNOT NULL로 정의되어 있더라도 빈 문자열은 저장될 수 있으므로, canonicalID가 비어있는지 확인하는 방어적 코드를 추가하고 이 경우 기존의 handleOrURL로 폴백하도록 개선하는 것이 안전합니다.

Suggested change
guard source.platform == "youtube" else {
if let url = source.handleOrURL.flatMap(URL.init(string:)) {
NSWorkspace.shared.open(url)
}
return
}
guard source.platform == "youtube", !source.canonicalID.isEmpty else {
if let url = source.handleOrURL.flatMap(URL.init(string:)) {
NSWorkspace.shared.open(url)
}
return
}

let path = source.canonicalID.hasPrefix("@") ? source.canonicalID : "channel/\(source.canonicalID)"
if let url = URL(string: "https://www.youtube.com/\(path)/about") {
NSWorkspace.shared.open(url)
}
}

Expand Down
Loading