Skip to content

Commit

Permalink
auto install depended plugins but don't add IM for them (#140)
Browse files Browse the repository at this point in the history
  • Loading branch information
eagleoflqj authored Jun 3, 2024
1 parent b7a1ff1 commit 7ffac00
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 15 deletions.
20 changes: 10 additions & 10 deletions src/config/officialplugins.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,21 @@ private let tableExtra = "fcitx/fcitx5-table-extra"
// Should this assumption change in the future, please update install() in plugin.swift.
let officialPlugins = [
Plugin(id: "anthy", category: Japanese, native: true, github: "fcitx/fcitx5-anthy"),
Plugin(id: "array", category: Chinese, native: false, github: tableExtra),
Plugin(id: "boshiamy", category: Chinese, native: true, github: tableExtra),
Plugin(id: "cangjie", category: Chinese, native: false, github: tableExtra),
Plugin(id: "cantonese", category: Chinese, native: false, github: tableExtra),
Plugin(id: "array", category: Chinese, native: false, github: tableExtra, dependencies: ["chinese-addons"]),
Plugin(id: "boshiamy", category: Chinese, native: false, github: tableExtra, dependencies: ["chinese-addons"]),
Plugin(id: "cangjie", category: Chinese, native: false, github: tableExtra, dependencies: ["chinese-addons"]),
Plugin(id: "cantonese", category: Chinese, native: false, github: tableExtra, dependencies: ["chinese-addons"]),
Plugin(id: "chinese-addons", category: Chinese, native: true, github: "fcitx/fcitx5-chinese-addons"),
Plugin(id: "hallelujah", category: English, native: true, github: "fcitx-contrib/fcitx5-hallelujah"),
Plugin(id: "lua", category: Other, native: true, github: "fcitx/fcitx5-lua"),
Plugin(id: "quick", category: Chinese, native: false, github: tableExtra),
Plugin(id: "quick", category: Chinese, native: false, github: tableExtra, dependencies: ["chinese-addons"]),
Plugin(id: "rime", category: Generic, native: true, github: "fcitx/fcitx5-rime"),
Plugin(id: "skk", category: Japanese, native: true, github: "fcitx/fcitx5-skk"),
Plugin(id: "stroke", category: Chinese, native: false, github: tableExtra),
Plugin(id: "stroke", category: Chinese, native: false, github: tableExtra, dependencies: ["chinese-addons"]),
Plugin(id: "thai", category: Thai, native: true, github: "fcitx/fcitx5-libthai"),
Plugin(id: "unikey", category: Vietnamese, native: true, github: "fcitx/fcitx5-unikey"),
Plugin(id: "wu", category: Chinese, native: false, github: tableExtra),
Plugin(id: "wubi86", category: Chinese, native: false, github: tableExtra),
Plugin(id: "wubi98", category: Chinese, native: false, github: tableExtra),
Plugin(id: "zhengma", category: Chinese, native: false, github: tableExtra),
Plugin(id: "wu", category: Chinese, native: false, github: tableExtra, dependencies: ["chinese-addons"]),
Plugin(id: "wubi86", category: Chinese, native: false, github: tableExtra, dependencies: ["chinese-addons"]),
Plugin(id: "wubi98", category: Chinese, native: false, github: tableExtra, dependencies: ["chinese-addons"]),
Plugin(id: "zhengma", category: Chinese, native: false, github: tableExtra, dependencies: ["chinese-addons"]),
]
26 changes: 21 additions & 5 deletions src/config/plugin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ struct Plugin: Identifiable, Hashable {
let category: String
let native: Bool
let github: String?
var dependencies: [String] = []
}

private var pluginMap = officialPlugins.reduce(into: [String: Plugin]()) { result, plugin in
Expand Down Expand Up @@ -219,24 +220,39 @@ struct PluginView: View {
if !isUpdate {
nativeAvailable.removeAll()
dataAvailable.removeAll()
for plugin in selectedAvailable {
if let info = pluginMap[plugin] {

var countedPlugins = Set<String>()
func helper(_ plugin: String) {
if countedPlugins.contains(plugin) {
return
}
countedPlugins.insert(plugin)
// Skip installed dependencies.
if let info = pluginMap[plugin], !pluginVM.installedPlugins.contains(info) {
if info.native {
nativeAvailable.append(plugin)
}
// Assumption: all official plugins contains a data tarball.
// Assumption: all official plugins contain a data tarball.
dataAvailable.append(plugin)
for dependency in info.dependencies {
helper(dependency)
}
}
}
for plugin in selectedAvailable {
helper(plugin)
}
}
let selectedPlugins = selectedAvailable
selectedAvailable.removeAll()

let updater = Updater(main: false, nativePlugins: nativeAvailable, dataPlugins: dataAvailable)
updater.update(
onFinish: { _, nativeResults, dataResults in
var inputMethods = [String]()
var inputMethods: [String] = [String]()
if !isUpdate {
for plugin in Set(nativeResults.keys).union(dataResults.keys) {
// Don't add IMs for dependencies.
for plugin in selectedPlugins {
if (nativeResults[plugin] ?? true) && (dataResults[plugin] ?? true) {
for im in getAutoAddIms(plugin) {
inputMethods.append(im)
Expand Down

0 comments on commit 7ffac00

Please sign in to comment.