File: ShareTableItemView.swift

package info (click to toggle)
nextcloud-desktop 4.0.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 40,404 kB
  • sloc: cpp: 118,401; objc: 752; python: 606; sh: 395; ansic: 391; ruby: 174; makefile: 44; javascript: 32; xml: 6
file content (67 lines) | stat: -rw-r--r-- 2,381 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//
//  ShareTableItemView.swift
//  FileProviderUIExt
//
//  SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
//  SPDX-License-Identifier: GPL-2.0-or-later
//

import AppKit
import NextcloudKit

class ShareTableItemView: NSTableCellView {
    @IBOutlet private weak var typeImageView: NSImageView!
    @IBOutlet private weak var label: NSTextField!
    @IBOutlet private weak var copyLinkButton: NSButton!
    private var originalCopyImage: NSImage?
    private var copiedButtonImage: NSImage?
    private var tempButtonTimer: Timer?

    var share: NKShare? {
        didSet {
            guard let share = share else {
                prepareForReuse()
                return
            }
            typeImageView.image = share.typeImage
            label.stringValue = share.displayString
            copyLinkButton.isHidden =
                share.shareType != NKShare.ShareType.publicLink.rawValue &&
                share.shareType != NKShare.ShareType.internalLink.rawValue
        }
    }

    override func prepareForReuse() {
        typeImageView.image = nil
        label.stringValue = ""
        copyLinkButton.isHidden = false
        super.prepareForReuse()
    }

    @IBAction func copyShareLink(sender: Any) {
        guard let share = share else { return }
        let pasteboard = NSPasteboard.general
        pasteboard.declareTypes([.string], owner: nil)
        pasteboard.setString(share.url, forType: .string)

        guard tempButtonTimer == nil else { return }

        originalCopyImage = copyLinkButton.image
        copiedButtonImage = NSImage(
            systemSymbolName: "checkmark.circle.fill",
            accessibilityDescription: String(localized: "Public link has been copied icon")
        )
        var config = NSImage.SymbolConfiguration(scale: .medium)
        if #available(macOS 12.0, *) {
            config = config.applying(.init(hierarchicalColor: .systemGreen))
        }
        copiedButtonImage = copiedButtonImage?.withSymbolConfiguration(config)
        copyLinkButton.image = copiedButtonImage
        tempButtonTimer = Timer.scheduledTimer(withTimeInterval: 3.0, repeats: false) { timer in
            self.copyLinkButton.image = self.originalCopyImage
            self.copiedButtonImage = nil
            self.tempButtonTimer?.invalidate()
            self.tempButtonTimer = nil
        }
    }
}