47 lines · 1.6 KB · Swift
RawDownload
import AppKit extension StatusItemController {    func addUsageHistoryClusterIfNeeded(to menu: NSMenu, context: MenuCardContext) {        if self.addUsageHistoryMenuItemIfNeeded(            to: menu,            provider: context.currentProvider,            width: context.menuWidth)        {            self.moveCostAndStorageRowsUnderUsageHistory(in: menu)            menu.addItem(.separator())        }    }     func moveCostAndStorageRowsUnderUsageHistory(in menu: NSMenu) {        guard let usageHistoryItem = menu.items.first(where: {            ($0.representedObject as? String) == "usageHistorySubmenu"        }) else { return }         let rowIDs = ["menuCardCost", "menuCardStorage"]        let rowsToMove = rowIDs.compactMap { rowID in            menu.items.first { ($0.representedObject as? String) == rowID }        }        guard !rowsToMove.isEmpty else { return }         for item in rowsToMove {            menu.removeItem(item)        }         guard let usageHistoryIndex = menu.items.firstIndex(where: { $0 === usageHistoryItem }) else { return }        for (offset, item) in rowsToMove.enumerated() {            menu.insertItem(item, at: min(usageHistoryIndex + 1 + offset, menu.items.count))        }        self.collapseAdjacentSeparators(in: menu)    }     private func collapseAdjacentSeparators(in menu: NSMenu) {        var index = 1        while index < menu.items.count {            if menu.items[index - 1].isSeparatorItem, menu.items[index].isSeparatorItem {                menu.removeItem(at: index)            } else {                index += 1            }        }    }}