Change license to AGPL
This commit:
- Updates the `LICENSE` file
- Start every file with something like:
// Copyright YEAR_FIRST_PUBLISHED Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
---
First, I removed existing license headers with this Ruby 3.1.2 script:
require 'set'
EXTENSIONS_TO_CHECK = Set['.h', '.hpp', '.cpp', '.m', '.mm', '.pch', '.swift']
same = 0
different = 0
all_files = `git ls-files`.lines.map { |line| line.strip }
all_files.each do |relative_path|
if relative_path == 'Pods'
next
end
unless EXTENSIONS_TO_CHECK.include? File.extname(relative_path)
next
end
path = File.expand_path(relative_path)
contents = File.read(path)
new_contents = contents.sub(/\/\/\n\/\/ Copyright .*\n\/\/\n\n/, '')
if contents == new_contents
same += 1
else
different += 1
end
File.write(path, new_contents)
end
puts "updated #{different} file(s), left #{same} untouched"
I'm sure this script could be improved, but it worked well enough.
Then, I created `Scripts/lint/lint-license-headers` and ran it to auto-
fix a lot of files. This changed the mode of some files, but I think
that's actually desirable. For example,
`SignalServiceKit/src/Util/AppContext.m` previously had a mode of
`0755/-rwxr-xr-x`, and it's now `0644/-rw-r--r--`.
Then I fixed some stragglers and updated the precommit script.
See [a similar change in the Desktop app][0].
[0]: 8bfaf598af
120 lines
4.2 KiB
Swift
120 lines
4.2 KiB
Swift
//
|
|
// Copyright 2022 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import UIKit
|
|
|
|
class ImageAttachmentPrepViewController: AttachmentPrepViewController {
|
|
|
|
private let model: ImageEditorModel
|
|
|
|
private lazy var editorView = ImageEditorView(model: model, delegate: self)
|
|
|
|
required init?(attachmentApprovalItem: AttachmentApprovalItem) {
|
|
guard let imageEditorModel = attachmentApprovalItem.imageEditorModel else {
|
|
owsFailDebug("imageEditorModel is empty.")
|
|
return nil
|
|
}
|
|
|
|
self.model = imageEditorModel
|
|
|
|
super.init(attachmentApprovalItem: attachmentApprovalItem)
|
|
}
|
|
|
|
override var contentView: AttachmentPrepContentView {
|
|
editorView
|
|
}
|
|
|
|
override func prepareContentView() {
|
|
editorView.setHasRoundCorners(true)
|
|
editorView.textInteractionModes = [ .tap, .move ]
|
|
editorView.configureSubviews()
|
|
}
|
|
|
|
override var shouldHideControls: Bool {
|
|
editorView.shouldHideControls || super.shouldHideControls
|
|
}
|
|
|
|
override var canSaveMedia: Bool {
|
|
if model.isDirty() {
|
|
return true
|
|
}
|
|
return super.canSaveMedia
|
|
}
|
|
|
|
/**
|
|
* Bottom toolbar in edit mode is always the same height and can be cached.
|
|
*/
|
|
private static let editModeToolbarHeight: CGFloat = {
|
|
let toolbar = ImageEditorBottomBar(buttonProvider: nil)
|
|
let size = toolbar.systemLayoutSizeFitting(CGSize(width: UIView.noIntrinsicMetric, height: .greatestFiniteMagnitude),
|
|
withHorizontalFittingPriority: .fittingSizeLevel,
|
|
verticalFittingPriority: .fittingSizeLevel)
|
|
return size.height
|
|
}()
|
|
|
|
override var mediaEditingToolbarHeight: CGFloat? {
|
|
ImageAttachmentPrepViewController.editModeToolbarHeight
|
|
}
|
|
|
|
// MARK: - Tools
|
|
|
|
override func activatePenTool() {
|
|
Logger.verbose("")
|
|
|
|
let viewController = ImageEditorViewController(model: model)
|
|
presentMediaTool(viewController: viewController)
|
|
}
|
|
|
|
override func activateCropTool() {
|
|
Logger.verbose("")
|
|
|
|
guard let srcImage = ImageEditorCanvasView.loadSrcImage(model: model) else {
|
|
owsFailDebug("Couldn't load src image.")
|
|
return
|
|
}
|
|
|
|
// We want to render a preview image that "flattens" all of the brush strokes, text items,
|
|
// into the background image without applying the transform (e.g. rotating, etc.), so we
|
|
// use a default transform.
|
|
let previewTransform = ImageEditorTransform.defaultTransform(srcImageSizePixels: model.srcImageSizePixels)
|
|
guard let previewImage = ImageEditorCanvasView.renderForOutput(model: model, transform: previewTransform) else {
|
|
owsFailDebug("Couldn't generate preview image.")
|
|
return
|
|
}
|
|
|
|
let cropTool = ImageEditorCropViewController(model: model, srcImage: srcImage, previewImage: previewImage)
|
|
presentMediaTool(viewController: cropTool)
|
|
}
|
|
}
|
|
|
|
// MARK: -
|
|
|
|
extension ImageAttachmentPrepViewController: ImageEditorViewDelegate {
|
|
|
|
private func openTextTool(with textItem: ImageEditorTextItem, isNewItem: Bool, editText: Bool) {
|
|
let textEditor = ImageEditorViewController(model: model)
|
|
textEditor.selectTextItem(textItem, isNewItem: isNewItem, startEditing: editText)
|
|
presentMediaTool(viewController: textEditor)
|
|
}
|
|
|
|
func imageEditorView(_: ImageEditorView, didRequestAddTextItem textItem: ImageEditorTextItem) {
|
|
openTextTool(with: textItem, isNewItem: true, editText: true)
|
|
}
|
|
|
|
func imageEditorView(_: ImageEditorView, didTapTextItem textItem: ImageEditorTextItem) {
|
|
openTextTool(with: textItem, isNewItem: false, editText: false)
|
|
}
|
|
|
|
func imageEditorView(_ imageEditorView: ImageEditorView, didMoveTextItem textItem: ImageEditorTextItem) {
|
|
openTextTool(with: textItem, isNewItem: false, editText: false)
|
|
}
|
|
|
|
func imageEditorViewDidUpdateSelection(_ imageEditorView: ImageEditorView) { }
|
|
|
|
func imageEditorDidRequestToolbarVisibilityUpdate(_: ImageEditorView) {
|
|
prepDelegate?.attachmentPrepViewControllerDidRequestUpdateControlsVisibility(self, completion: nil)
|
|
}
|
|
}
|