NetNewsWire/Multiplatform/Shared/Sidebar/SidebarContextMenu.swift

185 lines
3.9 KiB
Swift
Raw Normal View History

2020-07-18 00:34:11 +02:00
//
// SidebarContextMenu.swift
// NetNewsWire
//
// Created by Maurice Parker on 7/17/20.
// Copyright © 2020 Ranchero Software. All rights reserved.
//
import SwiftUI
2020-07-21 10:05:31 +02:00
import RSCore
import Account
2020-07-18 00:34:11 +02:00
struct SidebarContextMenu: View {
2020-07-21 10:05:31 +02:00
@Environment(\.undoManager) var undoManager
@Environment(\.openURL) var openURL
@EnvironmentObject private var sidebarModel: SidebarModel
@Binding var showInspector: Bool
2020-07-18 00:34:11 +02:00
var sidebarItem: SidebarItem
2020-08-12 15:04:56 +02:00
var body: some View {
2020-07-22 15:47:40 +02:00
// MARK: Account Context Menu
2020-07-18 00:34:11 +02:00
if sidebarItem.representedType == .account {
Button {
showInspector = true
} label: {
2020-07-18 00:34:11 +02:00
Text("Get Info")
#if os(iOS)
AppAssets.getInfoImage
#endif
}
Button {
sidebarModel.markAllAsReadInAccount.send(sidebarItem.represented as! Account)
} label: {
2020-07-18 00:34:11 +02:00
Text("Mark All As Read")
#if os(iOS)
AppAssets.markAllAsReadImage
#endif
}
}
2020-07-22 15:47:40 +02:00
// MARK: Pseudofeed Context Menu
2020-07-18 00:34:11 +02:00
if sidebarItem.representedType == .pseudoFeed {
Button {
2020-07-21 10:05:31 +02:00
guard let feed = sidebarItem.feed else {
return
}
sidebarModel.markAllAsReadInFeed.send(feed)
} label: {
2020-07-18 00:34:11 +02:00
Text("Mark All As Read")
#if os(iOS)
AppAssets.markAllAsReadImage
#endif
}
}
2020-07-22 15:47:40 +02:00
// MARK: Webfeed Context Menu
2020-07-18 00:34:11 +02:00
if sidebarItem.representedType == .webFeed {
Button {
showInspector = true
} label: {
2020-07-18 00:34:11 +02:00
Text("Get Info")
#if os(iOS)
AppAssets.getInfoImage
#endif
}
Button {
2020-07-21 10:05:31 +02:00
guard let feed = sidebarItem.feed else {
return
}
sidebarModel.markAllAsReadInFeed.send(feed)
} label: {
2020-07-18 00:34:11 +02:00
Text("Mark All As Read")
#if os(iOS)
AppAssets.markAllAsReadImage
#endif
}
Divider()
Button {
2020-07-21 10:05:31 +02:00
guard let homepage = (sidebarItem.feed as? WebFeed)?.homePageURL,
let url = URL(string: homepage) else {
return
}
openURL(url)
} label: {
2020-07-18 00:34:11 +02:00
Text("Open Home Page")
#if os(iOS)
AppAssets.openInBrowserImage
#endif
}
Divider()
Button {
2020-07-21 10:05:31 +02:00
guard let feedUrl = (sidebarItem.feed as? WebFeed)?.url else {
return
}
#if os(macOS)
URLPasteboardWriter.write(urlString: feedUrl, to: NSPasteboard.general)
#else
UIPasteboard.general.string = feedUrl
#endif
} label: {
2020-07-18 00:34:11 +02:00
Text("Copy Feed URL")
#if os(iOS)
AppAssets.copyImage
#endif
}
Button {
2020-07-21 10:05:31 +02:00
guard let homepage = (sidebarItem.feed as? WebFeed)?.homePageURL else {
return
}
#if os(macOS)
URLPasteboardWriter.write(urlString: homepage, to: NSPasteboard.general)
#else
UIPasteboard.general.string = homepage
#endif
} label: {
2020-07-18 00:34:11 +02:00
Text("Copy Home Page URL")
#if os(iOS)
AppAssets.copyImage
#endif
}
Divider()
Button {
if AppDefaults.shared.sidebarConfirmDelete == false {
sidebarModel.deleteFromAccount.send(sidebarItem.feed!)
} else {
sidebarModel.sidebarItemToDelete = sidebarItem.feed!
sidebarModel.showDeleteConfirmation = true
}
} label: {
2020-07-18 00:34:11 +02:00
Text("Delete")
#if os(iOS)
AppAssets.deleteImage
#endif
}
}
2020-07-22 15:47:40 +02:00
// MARK: Folder Context Menu
2020-07-18 00:34:11 +02:00
if sidebarItem.representedType == .folder {
Button {
2020-07-18 15:24:06 +02:00
showInspector = true
} label: {
2020-07-18 15:24:06 +02:00
Text("Get Info")
2020-07-18 00:34:11 +02:00
#if os(iOS)
2020-07-18 15:24:06 +02:00
AppAssets.getInfoImage
2020-07-18 00:34:11 +02:00
#endif
}
Button {
2020-07-21 10:05:31 +02:00
guard let feed = sidebarItem.feed else {
return
}
sidebarModel.markAllAsReadInFeed.send(feed)
} label: {
2020-07-18 15:24:06 +02:00
Text("Mark All As Read")
2020-07-18 00:34:11 +02:00
#if os(iOS)
2020-07-18 15:24:06 +02:00
AppAssets.markAllAsReadImage
2020-07-18 00:34:11 +02:00
#endif
}
/*
You cannot select folder level items in b4. Delete is disabled for the time being.
*/
/*
2020-07-18 15:24:06 +02:00
Divider()
Button {
if AppDefaults.shared.sidebarConfirmDelete == false {
sidebarModel.deleteFromAccount.send(sidebarItem.feed!)
} else {
sidebarModel.sidebarContextMenuItem = sidebarItem.feed
sidebarModel.showDeleteConfirmation = true
}
} label: {
2020-07-18 00:34:11 +02:00
Text("Delete")
#if os(iOS)
AppAssets.deleteImage
#endif
}
*/
2020-07-18 00:34:11 +02:00
}
}
}