Skip to content

Commit

Permalink
Add support for getting the PluginDirectoryEntry for self hosted plugins
Browse files Browse the repository at this point in the history
  • Loading branch information
Emily Laguna committed Jun 15, 2021
1 parent bf63b89 commit 3c163b8
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 6 deletions.
2 changes: 1 addition & 1 deletion WordPress/Classes/Models/Plugin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import Foundation

struct Plugin: Equatable {
let state: PluginState
let directoryEntry: PluginDirectoryEntry?
var directoryEntry: PluginDirectoryEntry?

var id: String {
return state.id
Expand Down
36 changes: 31 additions & 5 deletions WordPress/Classes/ViewRelated/Plugins/PluginViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -63,26 +63,44 @@ class PluginViewModel: Observable {
private let store: PluginStore

init(plugin: Plugin, capabilities: SitePluginCapabilities, site: JetpackSiteRef, store: PluginStore = StoreContainer.shared.plugin) {
self.state = .plugin(plugin)

var updatedPlugin = plugin

// Self hosted non-Jetpack plugins may not have the directory entry set
// attempt to find one for this plugin
if updatedPlugin.directoryEntry == nil {
updatedPlugin.directoryEntry = store.getPluginDirectoryEntry(slug: plugin.id)
}

self.state = .plugin(updatedPlugin)
self.capabilities = capabilities
self.site = site
self.isInstallingPlugin = false
self.store = store

queryReceipt = nil
storeReceipt = store.onChange { [weak self] in
guard let plugin = store.getPlugin(id: plugin.id, site: site) else {
guard var plugin = store.getPlugin(id: plugin.id, site: site) else {
self?.dismiss?()
return
}

if plugin.directoryEntry == nil {
plugin.directoryEntry = store.getPluginDirectoryEntry(slug: plugin.id)
}

self?.state = .plugin(plugin)
}
}

convenience init(directoryEntry: PluginDirectoryEntry, site: JetpackSiteRef, store: PluginStore = StoreContainer.shared.plugin) {
let state: State
if let plugin = store.getPlugin(slug: directoryEntry.slug, site: site) {
if var plugin = store.getPlugin(slug: directoryEntry.slug, site: site) {
// Self hosted non-Jetpack plugins may not have the directory entry set
if plugin.directoryEntry == nil {
plugin.directoryEntry = directoryEntry
}

state = .plugin(plugin)
} else {
state = .directoryEntry(directoryEntry)
Expand All @@ -92,7 +110,11 @@ class PluginViewModel: Observable {

convenience init(slug: String, site: JetpackSiteRef, store: PluginStore = StoreContainer.shared.plugin) {
let state: State
if let plugin = store.getPlugin(slug: slug, site: site) {
if var plugin = store.getPlugin(slug: slug, site: site) {
if plugin.directoryEntry == nil {
plugin.directoryEntry = store.getPluginDirectoryEntry(slug: plugin.id)
}

state = .plugin(plugin)
} else {
state = .loading
Expand All @@ -115,7 +137,11 @@ class PluginViewModel: Observable {
return
}

if let plugin = self?.store.getPlugin(slug: entry.slug, site: site) {
if var plugin = self?.store.getPlugin(slug: entry.slug, site: site) {
if plugin.directoryEntry == nil {
plugin.directoryEntry = store.getPluginDirectoryEntry(slug: plugin.id)
}

self?.state = .plugin(plugin)
} else {
self?.state = .directoryEntry(entry)
Expand Down

0 comments on commit 3c163b8

Please sign in to comment.