Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
marinofaggiana committed May 24, 2022
2 parents 0611600 + 8499b9d commit e2e5236
Show file tree
Hide file tree
Showing 392 changed files with 5,748 additions and 4,682 deletions.
10 changes: 6 additions & 4 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,18 @@ on:
- master
- develop
pull_request:
types: [synchronize, opened, reopened, ready_for_review]
branches:
- master
- develop
- develop

jobs:
Lint:
runs-on: ubuntu-latest

if: github.event.pull_request.draft == false

steps:
- uses: actions/checkout@v2

- name: GitHub Action for SwiftLint
uses: norio-nomura/action-swiftlint@3.1.0
uses: norio-nomura/action-swiftlint@3.1.0
6 changes: 4 additions & 2 deletions .github/workflows/xcode.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
name: Build

on:
on:
push:
branches:
branches:
- master
- develop
pull_request:
types: [synchronize, opened, reopened, ready_for_review]
branches:
- master
- develop

jobs:
XCBuild:
runs-on: macOS-11
if: github.event.pull_request.draft == false
env:
PROJECT: Nextcloud.xcodeproj
DESTINATION: platform=iOS Simulator,name=iPhone 11
Expand Down
19 changes: 7 additions & 12 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,14 @@ empty_count:
severity: warning

line_length:
# warning: 120
# warning: 120, error: 200
warning: 250
error: 250

function_body_length:
# warning: 40
warning: 60

type_body_length:
# error: 350
error: 500
Expand Down Expand Up @@ -48,7 +52,8 @@ excluded:
- iOSClient/Data/NCManageDatabase+Account.swift
- iOSClient/Data/NCManageDatabase+Activity.swift
- iOSClient/Data/NCManageDatabase.swift
- iOSClient/Data/NCManageDatabse+Metadata.swift
- iOSClient/Data/NCManageDatabase+Metadata.swift
- iOSClient/Data/NCManageDatabase+Video.swift
- iOSClient/Diagnostics/NCCapabilitiesViewController.swift
- iOSClient/EmptyView/NCEmptyDataSet.swift
- iOSClient/Extensions/UIColor+Extensions.swift
Expand Down Expand Up @@ -105,16 +110,8 @@ excluded:
- iOSClient/Select/NCSelect.swift
- iOSClient/Settings/NCEndToEndInitialize.swift
- iOSClient/Settings/NCManageAutoUploadFileName.swift
- iOSClient/Share/NCShare.swift
- iOSClient/Share/NCShareCommentsCell.swift
- iOSClient/Share/NCShareCommon.swift
- iOSClient/Share/NCShareLinkCell.swift
- iOSClient/Share/NCShareLinkMenuView.swift
- iOSClient/Share/NCShareNetworking.swift
- iOSClient/Share/NCSharePaging.swift
- iOSClient/Share/NCShareQuickStatusMenu.swift
- iOSClient/Share/NCShareUserCell.swift
- iOSClient/Share/NCShareUserMenuView.swift
- iOSClient/Shares/NCShares.swift
- iOSClient/Transfers/NCTransferCell.swift
- iOSClient/Transfers/NCTransfers.swift
Expand All @@ -130,13 +127,11 @@ excluded:
- iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayer.swift
- iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayerToolBar.swift
- iOSClient/Viewer/NCViewerMedia/NCViewerMedia.swift
- iOSClient/Viewer/NCViewerMedia/NCViewerMediaDetailView.swift
- iOSClient/Viewer/NCViewerMedia/NCViewerMediaPage.swift
- iOSClient/Viewer/NCViewerNextcloudText/NCViewerNextcloudText.swift
- iOSClient/Viewer/NCViewerPDF/NCViewerPDF.swift
- iOSClient/Viewer/NCViewerPDF/NCViewerPDFSearch.swift
- iOSClient/Viewer/NCViewerProviderContextMenu.swift
- iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift
- iOSClient/Viewer/NCViewerRichdocument/NCViewerRichdocument.swift


Expand Down
2 changes: 1 addition & 1 deletion Cartfile
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
github "https://github.com/marinofaggiana/KTVHTTPCache" "2.0.2"
github "https://github.com/marinofaggiana/KTVHTTPCache" "2.0.5"
github "https://github.com/marinofaggiana/TOPasscodeViewController" "master"
github "krzyzanowskim/OpenSSL"
2 changes: 1 addition & 1 deletion Cartfile.resolved
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
github "krzyzanowskim/OpenSSL" "1.1.1300"
github "marinofaggiana/KTVHTTPCache" "2.0.2"
github "marinofaggiana/KTVHTTPCache" "2.0.5"
github "marinofaggiana/TOPasscodeViewController" "a1b9d1058b2648e636525fc368e220a0cfddb42a"
8 changes: 5 additions & 3 deletions File Provider Extension/FileProviderItem.swift
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,13 @@ class FileProviderItem: NSObject, NSFileProviderItem {
}

var capabilities: NSFileProviderItemCapabilities {
if metadata.directory {
guard !metadata.directory else {
return [ .allowsAddingSubItems, .allowsContentEnumerating, .allowsReading, .allowsDeleting, .allowsRenaming ]
} else {
return [ .allowsWriting, .allowsReading, .allowsDeleting, .allowsRenaming, .allowsReparenting ]
}
guard !metadata.lock else {
return [ .allowsReading ]
}
return [ .allowsWriting, .allowsReading, .allowsDeleting, .allowsRenaming, .allowsReparenting ]
}

var isTrashed: Bool {
Expand Down
288 changes: 216 additions & 72 deletions Nextcloud.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1320"
LastUpgradeVersion = "1330"
wasCreatedForAppExtension = "YES"
version = "2.0">
<BuildAction
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1320"
LastUpgradeVersion = "1330"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
Expand Down
2 changes: 1 addition & 1 deletion Nextcloud.xcodeproj/xcshareddata/xcschemes/Share.xcscheme
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1320"
LastUpgradeVersion = "1330"
wasCreatedForAppExtension = "YES"
version = "2.0">
<BuildAction
Expand Down
136 changes: 136 additions & 0 deletions NextcloudTests/SharePermissionTest.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
//
// SharePermissionTest.swift
// Nextcloud
//
// Created by Henrik Storch on 29.03.22.
// Copyright © 2021 Henrik Storch. All rights reserved.
//
// Author Henrik Storch <henrik.storch@nextcloud.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//

@testable import Nextcloud
import XCTest
import NCCommunication

class SharePermissionTest: XCTestCase {
override func setUp() {
let json =
"""
{"ocs":{"data":{"capabilities":{"files_sharing":{"default_permissions":31}}}}}
""".data(using: .utf8)!
NCManageDatabase.shared.addCapabilitiesJSon(json, account: "")
}

func testShareCellPermissionCell() throws {
let share = NCTableShareOptions(sharee: NCCommunicationSharee(), metadata: tableMetadata(), password: nil)
let shareConfig = NCShareConfig(parentMetadata: tableMetadata(), share: share)

for row in 0..<shareConfig.permissions.count {
guard let cell = shareConfig.config(for: IndexPath(row: row, section: 0)) as? NCToggleCellConfig else {
XCTFail("Invalid share permission cell")
continue
}
XCTAssertFalse(cell.isOn(for: share))
}

let meta = tableMetadata()
meta.sharePermissionsCollaborationServices = 31
let fullShare = NCTableShareOptions(sharee: NCCommunicationSharee(), metadata: meta, password: nil)
let shareFullConfig = NCShareConfig(parentMetadata: meta, share: fullShare)

for row in 0..<shareFullConfig.permissions.count {
guard let cell = shareConfig.config(for: IndexPath(row: row, section: 0)) as? NCToggleCellConfig else {
XCTFail("Invalid share permission cell")
continue
}
XCTAssertTrue(cell.isOn(for: fullShare))
}
}

func testSharePermission() throws {
XCTAssertTrue(NCLinkPermission.allowEdit.hasResharePermission(for: 15))
XCTAssertTrue(NCLinkPermission.allowEdit.hasResharePermission(for: 11))
XCTAssertTrue(NCLinkPermission.allowEdit.hasResharePermission(for: 7))
XCTAssertFalse(NCLinkPermission.allowEdit.hasResharePermission(for: 13))
XCTAssertFalse(NCLinkPermission.allowEdit.hasResharePermission(for: 1))

XCTAssertTrue(NCLinkPermission.viewOnly.hasResharePermission(for: 25))
XCTAssertTrue(NCLinkPermission.viewOnly.hasResharePermission(for: 17))
XCTAssertFalse(NCLinkPermission.viewOnly.hasResharePermission(for: 12))
XCTAssertFalse(NCLinkPermission.viewOnly.hasResharePermission(for: 2))

XCTAssertTrue(NCLinkPermission.fileDrop.hasResharePermission(for: 4))
XCTAssertFalse(NCLinkPermission.fileDrop.hasResharePermission(for: 27))

XCTAssertTrue(NCUserPermission.create.hasResharePermission(for: 4))
XCTAssertFalse(NCUserPermission.create.hasResharePermission(for: 27))

XCTAssertTrue(NCUserPermission.edit.hasResharePermission(for: 2))
XCTAssertFalse(NCUserPermission.edit.hasResharePermission(for: 29))

XCTAssertTrue(NCUserPermission.reshare.hasResharePermission(for: 16))
XCTAssertFalse(NCUserPermission.reshare.hasResharePermission(for: 15))
}

func testFileShare() throws {
let meta = tableMetadata()
meta.directory = false
let share = NCTableShareOptions.shareLink(metadata: meta, password: nil)
let fileConfig = NCShareConfig(parentMetadata: meta, share: share)
XCTAssertEqual(fileConfig.advanced, NCShareDetails.forLink)
XCTAssertEqual(fileConfig.permissions as? [NCLinkPermission], NCLinkPermission.forFile)

meta.directory = true
let folderConfig = NCShareConfig(parentMetadata: meta, share: share)
XCTAssertEqual(folderConfig.advanced, NCShareDetails.forLink)
XCTAssertEqual(folderConfig.permissions as? [NCLinkPermission], NCLinkPermission.forDirectory)
}

func testUserShare() throws {
let meta = tableMetadata()
meta.directory = false
let sharee = NCCommunicationSharee()
let share = NCTableShareOptions(sharee: sharee, metadata: meta, password: nil)
let fileConfig = NCShareConfig(parentMetadata: meta, share: share)
XCTAssertEqual(fileConfig.advanced, NCShareDetails.forUser)
XCTAssertEqual(fileConfig.permissions as? [NCUserPermission], NCUserPermission.forFile)

meta.directory = true
let folderConfig = NCShareConfig(parentMetadata: meta, share: share)
XCTAssertEqual(folderConfig.advanced, NCShareDetails.forUser)
XCTAssertEqual(folderConfig.permissions as? [NCUserPermission], NCUserPermission.forDirectory)
}

func testResharePermission() throws {
let meta = tableMetadata()
let permissionReadShare = NCGlobal.shared.permissionShareShare + NCGlobal.shared.permissionReadShare
meta.sharePermissionsCollaborationServices = permissionReadShare
meta.directory = false
let share = NCTableShareOptions.shareLink(metadata: meta, password: nil)
let fileConfig = NCShareConfig(parentMetadata: meta, share: share)
XCTAssertEqual(fileConfig.resharePermission, meta.sharePermissionsCollaborationServices)
XCTAssertEqual(fileConfig.advanced, NCShareDetails.forLink)
XCTAssertEqual(fileConfig.permissions as? [NCLinkPermission], NCLinkPermission.forFile)

meta.directory = true
let sharee = NCCommunicationSharee()
let folderShare = NCTableShareOptions(sharee: sharee, metadata: meta, password: nil)
let folderConfig = NCShareConfig(parentMetadata: meta, share: folderShare)
XCTAssertEqual(folderConfig.resharePermission, meta.sharePermissionsCollaborationServices)
XCTAssertEqual(folderConfig.advanced, NCShareDetails.forUser)
XCTAssertEqual(folderConfig.permissions as? [NCUserPermission], NCUserPermission.forDirectory)
}
}
64 changes: 64 additions & 0 deletions NextcloudTests/UserAgentTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
//
// UserAgentTests.swift
// Nextcloud
//
// Created by Henrik Storch on 03.05.22.
// Copyright © 2022 Henrik Storch. All rights reserved.
//
// Author Henrik Storch <henrik.storch@nextcloud.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//

@testable import Nextcloud
import XCTest

class UserAgentTests: XCTestCase {
// https://github.com/nextcloud/server/blob/fc826e98115b510313ddacbf6fef4ce8d041e373/lib/public/IRequest.php#L83
let ncServerUARegex = "^Mozilla\\/5\\.0 \\(iOS\\) (ownCloud|Nextcloud)\\-iOS.*$"

// https://github.com/ProseMirror/prosemirror-view/blob/427d278aaaacde422ed1f2b8c84bb53337162775/src/browser.js#L18-L22
let proseMirrorWebKitUARegex = "\\bAppleWebKit\\/(\\d+)"
let proseMirroriOSUARegex = "Mobile\\/\\w+"

func testDefaultUserAgent() throws {
let userAgent: String = CCUtility.getUserAgent()
let match = try matches(for: ncServerUARegex, in: userAgent).first
XCTAssertNotNil(match)
}

func testTextUserAgent() throws {
let userAgent: String = NCUtility.shared.getCustomUserAgentNCText()
let match = try matches(for: ncServerUARegex, in: userAgent).first
XCTAssertNotNil(match)

let iOSMatch = try matches(for: proseMirroriOSUARegex, in: userAgent).first
XCTAssertNotNil(iOSMatch)

// https://github.com/ProseMirror/prosemirror-view/blob/8f246f320801f8e3cac92c97f71ac91e3e327f2f/src/input.js#L521-L522
let webKitMatch = try matches(for: proseMirrorWebKitUARegex, in: userAgent).first
XCTAssertNotNil(webKitMatch)
XCTAssertEqual(webKitMatch!.numberOfRanges, 2)
let versionRange = webKitMatch!.range(at: 1)
let versionString = userAgent[Range(versionRange, in: userAgent)!]
let webkitVersion = Int(versionString) ?? 0
XCTAssertGreaterThanOrEqual(webkitVersion, 604)
}

func matches(for regex: String, in text: String) throws -> [NSTextCheckingResult] {
let range = NSRange(location: 0, length: text.utf16.count)
let regex = try NSRegularExpression(pattern: regex)
return regex.matches(in: text, range: range)
}
}
25 changes: 9 additions & 16 deletions Share/NCShareExtension+Files.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,22 +47,15 @@ extension NCShareExtension {
collectionView.reloadData()
}

func createFolder(with fileName: String) {

NCNetworking.shared.createFolder(fileName: fileName, serverUrl: serverUrl, account: activeAccount.account, urlBase: activeAccount.urlBase) { errorCode, errorDescription in

DispatchQueue.main.async {
if errorCode == 0 {

self.serverUrl += "/" + fileName
self.reloadDatasource(withLoadFolder: true)
self.setNavigationBar(navigationTitle: fileName)

} else {
self.showAlert(title: "_error_createsubfolders_upload_", description: errorDescription)
}
}
}
@objc func didCreateFolder(_ notification: NSNotification) {
guard let userInfo = notification.userInfo as NSDictionary?,
let ocId = userInfo["ocId"] as? String,
let metadata = NCManageDatabase.shared.getMetadataFromOcId(ocId)
else { return }

self.serverUrl += "/" + metadata.fileName
self.reloadDatasource(withLoadFolder: true)
self.setNavigationBar(navigationTitle: metadata.fileName)
}

func loadFolder() {
Expand Down
Loading

0 comments on commit e2e5236

Please sign in to comment.