@@ -13,10 +13,11 @@ struct EjectListView: View {
1313 @StateObject var searchViewModel = AppListSearchModel ( )
1414 @StateObject var ejectList : EjectListModel
1515
16+ @State var quickLookExport : URL ?
17+ @State var isDeletingAll = false
1618 @State var isErrorOccurred : Bool = false
1719 @State var lastError : Error ?
1820
19- @State var isDeletingAll = false
2021 @StateObject var viewControllerHost = ViewControllerHost ( )
2122
2223 @AppStorage var useWeakReference : Bool
@@ -32,6 +33,7 @@ struct EjectListView: View {
3233
3334 var body : some View {
3435 refreshableListView
36+ . quickLookPreview ( $quickLookExport)
3537 }
3638
3739 var refreshableListView : some View {
@@ -103,17 +105,10 @@ struct EjectListView: View {
103105 var ejectListView : some View {
104106 List {
105107 Section {
106- ForEach ( ejectList. filteredPlugIns) { plugin in
107- if #available( iOS 16 , * ) {
108- PlugInCell ( plugIn: plugin)
109- . environmentObject ( ejectList)
110- } else {
111- PlugInCell ( plugIn: plugin)
112- . environmentObject ( ejectList)
113- . padding ( . vertical, 4 )
114- }
108+ ForEach ( ejectList. filteredPlugIns) {
109+ deletablePlugInCell ( $0)
115110 }
116- . onDelete ( perform: delete )
111+ . onDelete ( perform: deletePlugIns )
117112 } header: {
118113 paddedHeaderFooterText ( ejectList. filteredPlugIns. isEmpty
119114 ? NSLocalizedString ( " No Injected Plug-Ins " , comment: " " )
@@ -178,7 +173,20 @@ struct EjectListView: View {
178173 }
179174 }
180175
181- private func delete( at offsets: IndexSet ) {
176+ private func deletablePlugInCell( _ plugin: InjectedPlugIn ) -> some View {
177+ Group {
178+ if #available( iOS 16 , * ) {
179+ PlugInCell ( plugin, quickLookExport: $quickLookExport)
180+ . environmentObject ( ejectList)
181+ } else {
182+ PlugInCell ( plugin, quickLookExport: $quickLookExport)
183+ . environmentObject ( ejectList)
184+ . padding ( . vertical, 4 )
185+ }
186+ }
187+ }
188+
189+ private func deletePlugIns( at offsets: IndexSet ) {
182190 do {
183191 let plugInsToRemove = offsets. map { ejectList. filteredPlugIns [ $0] }
184192 let plugInURLsToRemove = plugInsToRemove. map { $0. url }
@@ -200,6 +208,25 @@ struct EjectListView: View {
200208 }
201209 }
202210
211+ private func deletePlugIn( _ plugin: InjectedPlugIn ) {
212+ do {
213+ let injector = try InjectorV3 ( ejectList. app. url)
214+ injector. useWeakReference = useWeakReference
215+ injector. preferMainExecutable = preferMainExecutable
216+ injector. injectStrategy = injectStrategy
217+
218+ try injector. eject ( [ plugin. url] )
219+
220+ ejectList. app. reload ( )
221+ ejectList. reload ( )
222+ } catch {
223+ DDLogError ( " \( error) " , ddlog: InjectorV3 . main. logger)
224+
225+ lastError = error
226+ isErrorOccurred = true
227+ }
228+ }
229+
203230 private func deleteAll( ) {
204231 do {
205232 let injector = try InjectorV3 ( ejectList. app. url)
@@ -219,8 +246,8 @@ struct EjectListView: View {
219246 DispatchQueue . main. async {
220247 ejectList. app. reload ( )
221248 ejectList. reload ( )
222- isDeletingAll = false
223249
250+ isDeletingAll = false
224251 view? . isUserInteractionEnabled = true
225252 }
226253 }
0 commit comments