Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
b8aa318
Add custom build for debugging merge
tsdicloud Jan 31, 2024
b6a2c2a
Add script for automatic backport PR creation
tsdicloud Feb 12, 2024
9a7c460
Update script for adding new stable branch
TSI-amrutwaghmare Mar 29, 2024
e3f395f
Update stable branch 5.2.7
TSI-amrutwaghmare Apr 15, 2024
ac8fc24
Update new version 5.2.7
TSI-amrutwaghmare May 22, 2024
869c1ad
Update nmc-custom-client.yml
TSI-amrutwaghmare Jul 26, 2024
59a1999
Update nmc-custom-stables.yml
TSI-amrutwaghmare Aug 26, 2024
9fe80ae
Update nmc-custom-stables.yml for NC stable 5.5.5
TSI-amrutwaghmare Sep 30, 2024
d9b50f9
Update nmc-custom-client.yml for NC Stable 5.5.5
TSI-amrutwaghmare Sep 30, 2024
9fec798
Update nmc-custom-stables.yml for stable-6.1.3
harshada-15-tsys Nov 18, 2024
b6e7e85
Update nmc-custom-stables.yml
harshada-15-tsys Mar 31, 2025
73e21e2
Update nmc-custom-client.yml
harshada-15-tsys Mar 31, 2025
177fd9a
Update nmc-custom-stables.yml for NC stable-6.6.0
harshada-15-tsys Apr 16, 2025
6142f88
Update nmc-custom-stables.yml for NC Stable 6.5.0
harshada-15-tsys Apr 17, 2025
36f7309
Update nmc-custom-stables.yml for NC stable-6.6.0
harshada-15-tsys Apr 17, 2025
b1930e7
NMC 2161 - Menu option images and color theming changes
TSI-amrutwaghmare Nov 29, 2023
f57d26e
NMC 2161 - Menu option images and color theming and other changes
harshada-15-tsys Apr 11, 2025
8406051
NMC 2161 - Menu option changes
harshada-15-tsys Oct 3, 2025
223c2f8
Update nmc-custom-stables.yml for NC Stable 6.5.0
harshada-15-tsys Apr 17, 2025
0a15a58
Update nmc-custom-stables.yml for NC stable-6.6.0
harshada-15-tsys Apr 17, 2025
792b70d
NMC 2161 - Menu option images and color theming changes
TSI-amrutwaghmare Nov 29, 2023
bef1088
NMC 2161 - Menu option images and color theming and other changes
harshada-15-tsys Apr 11, 2025
cdf27da
NMC 2161 - Menu option changes
harshada-15-tsys Oct 3, 2025
fa937ea
NMC 2161 - Menu option changes
harshada-15-tsys Dec 16, 2025
b73ea1b
Update script for adding new stable branch
TSI-amrutwaghmare Mar 29, 2024
77b2db4
NMC 2161 - Menu option images and color theming changes
TSI-amrutwaghmare Nov 29, 2023
3ba6699
NMC 2161 - Menu option images and color theming and other changes
harshada-15-tsys Apr 11, 2025
24e05ae
NMC 2161 - Menu option changes
harshada-15-tsys Oct 3, 2025
55b55d1
NMC 2161 - Menu option images and color theming changes
TSI-amrutwaghmare Nov 29, 2023
f6771d7
NMC 2161 - Menu option images and color theming and other changes
harshada-15-tsys Apr 11, 2025
738da1f
NMC 2161 - Menu option changes
harshada-15-tsys Oct 3, 2025
6895c63
NMC 2161 - Menu option changes
harshada-15-tsys Dec 16, 2025
f0eff91
NMC 2161 - Menu option images and color theming changes
TSI-amrutwaghmare Nov 29, 2023
dc425df
NMC 2161 - Menu option images and color theming and other changes
harshada-15-tsys Apr 11, 2025
181685e
NMC 2161 - Menu option changes
harshada-15-tsys Oct 3, 2025
17a20e4
NMC 2161 - Menu option images and color theming changes
TSI-amrutwaghmare Nov 29, 2023
aa046c6
NMC 2161 - Menu option images and color theming and other changes
harshada-15-tsys Apr 11, 2025
45bc5b4
NMC 2161 - Menu option changes
harshada-15-tsys Oct 3, 2025
8c6fac1
NMC 2161 - Menu option changes
harshada-15-tsys Dec 16, 2025
4e5dbfc
NMC 2161 - Menu option images and color theming changes
TSI-amrutwaghmare Nov 29, 2023
974b825
NMC 2161 - Menu option images and color theming and other changes
harshada-15-tsys Apr 11, 2025
3413fe2
NMC 2161 - Menu option changes
harshada-15-tsys Oct 3, 2025
c95296a
NMC 2161 - Menu option images and color theming changes
TSI-amrutwaghmare Nov 29, 2023
4b2ede7
NMC 2161 - Menu option images and color theming and other changes
harshada-15-tsys Apr 11, 2025
051ee5b
NMC 2161 - Menu option changes
harshada-15-tsys Oct 3, 2025
8fec1c9
NMC 2161 - Menu option changes
harshada-15-tsys Dec 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions .github/workflows/nmc-custom-client.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
###
# SPDX-License-Identifier: AGPL-3.0
#
# Author: Bernd rederlechner <bernd.rederlechner@t-systems.com>
#
# Builds a stable release package based on a release assembly
# customisation-<version>-<increment>
#
# As soon as a package is deployed to production, the tag and the branch
# MUST STAY FOR 2 years and not deleted.
#
# Release packages, tags and customisation branches not delivered to production should
# be deleted asap a newer release is available.
#

name: MCLOUD custom client merge

on:
workflow_dispatch:
inputs:
branch:
type: choice
description: Custom build from base branch
options:
- master
- stable-4.9.7
- stable-5.2.1
- stable-5.2.7
- stable-5.5.0
- stable-5.5.5
- stable-6.1.3
- stable-6.2.7
# - v3.0.8
default: master

jobs:
assemble-custom:
uses: nextmcloud/.github/.github/workflows/nmc-custom-client.yml@master
with:
trunk: 'master'
stable: ${{ inputs.branch }}
result: ${{ format('customisation-{0}-{1}', github.actor, inputs.branch) }}
secrets: inherit
40 changes: 40 additions & 0 deletions .github/workflows/nmc-custom-stables.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
###
# SPDX-License-Identifier: AGPL-3.0
#
# Author: Bernd rederlechner <bernd.rederlechner@t-systems.com>
#
# Builds a stable release package based on a release assembly
# customisation-<version>-<increment>
#
# As soon as a package is deployed to production, the tag and the branch
# MUST STAY FOR 2 years and not deleted.
#
# Release packages, tags and customisation branches not delivered to production should
# be deleted asap a newer release is available.
#

name: MCLOUD create stable backports

on:
workflow_dispatch:
inputs:
branch:
type: choice
description: Custom build from base branch
options:
- stable-6.6.0
- stable-6.5.0
- stable-6.2.7
- stable-6.1.3
- stable-5.5.5
- stable-5.5.4
- stable-5.2.7
default: stable-6.6.0

jobs:
backport-custom:
uses: nextmcloud/.github/.github/workflows/nmc-custom-stables.yml@master
with:
trunk: 'master'
stable: ${{ inputs.branch }}
secrets: inherit
8 changes: 8 additions & 0 deletions Nextcloud.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,10 @@
C0DECA022F65000100C0D001 /* NCCameraRollTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DECA012F65000100C0D001 /* NCCameraRollTests.swift */; };
CA1700013000000000000001 /* NCUploadedAssetsCleanupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA1700013000000000000002 /* NCUploadedAssetsCleanupTests.swift */; };
CB3666201AF7550816B5CD6A /* NCContextMenuComment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8932E90EC4278026D86CCCC9 /* NCContextMenuComment.swift */; };
AFCE353927E5DE0500FEA6C2 /* NCShare+Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353827E5DE0400FEA6C2 /* NCShare+Helper.swift */; };
B52FAED52DA8F616001AB1BD /* NCSelectableNavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52FAED42DA8F616001AB1BD /* NCSelectableNavigationView.swift */; };
C04E2F232A17BB4D001BAD85 /* FilesIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C04E2F222A17BB4D001BAD85 /* FilesIntegrationTests.swift */; };
D575039F27146F93008DC9DC /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A0D1342591FBC5008F8A13 /* String+Extension.swift */; };
D5B6AA7827200C7200D49C24 /* NCActivityTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5B6AA7727200C7200D49C24 /* NCActivityTableViewCell.swift */; };
F0A1B2C430B5000100D4E5F6 /* NCMediaViewerFloatingTitleViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0A1B2C330B5000100D4E5F6 /* NCMediaViewerFloatingTitleViewTests.swift */; };
F0A1B2C630B6000100D4E5F6 /* NCImageZoomViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0A1B2C530B6000100D4E5F6 /* NCImageZoomViewTests.swift */; };
Expand Down Expand Up @@ -1447,6 +1451,8 @@
AFCE353627E4ED7B00FEA6C2 /* NCShareCells.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCShareCells.swift; sourceTree = "<group>"; };
AFCE353827E5DE0400FEA6C2 /* Shareable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Shareable.swift; sourceTree = "<group>"; };
BB7697C94BA14450A0867940 /* NCContextMenuProfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCContextMenuProfile.swift; sourceTree = "<group>"; };
AFCE353827E5DE0400FEA6C2 /* NCShare+Helper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCShare+Helper.swift"; sourceTree = "<group>"; };
B52FAED42DA8F616001AB1BD /* NCSelectableNavigationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCSelectableNavigationView.swift; sourceTree = "<group>"; };
C0046CDA2A17B98400D87C9D /* NextcloudUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NextcloudUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
C04E2F202A17BB4D001BAD85 /* NextcloudIntegrationTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NextcloudIntegrationTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
C0DECA012F65000100C0D001 /* NCCameraRollTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCameraRollTests.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -2956,6 +2962,7 @@
F7603298252F0E550015A421 /* Collection Common */ = {
isa = PBXGroup;
children = (
B52FAED42DA8F616001AB1BD /* NCSelectableNavigationView.swift */,
F75FE06B2BB01D0D00A0EFEF /* Cell */,
F70D7C3525FFBF81002B9E34 /* NCCollectionViewCommon.swift */,
F7CAFE172F164B9200DB35A5 /* NCCollectionViewCommon+CellDelegate.swift */,
Expand Down Expand Up @@ -5511,6 +5518,7 @@
F7FFFCA22FB300600015441E /* NCAssistantSharedTextStore.swift in Sources */,
F3DDFE0F2F15453900A784C8 /* NCAssistantChat.swift in Sources */,
F7D68FCC28CB9051009139F3 /* NCManageDatabase+DashboardWidget.swift in Sources */,
B52FAED52DA8F616001AB1BD /* NCSelectableNavigationView.swift in Sources */,
F76882292C0DD1E7001CF441 /* NCManageE2EEModel.swift in Sources */,
F716DA672FA5F01A006A6703 /* NCMediaViewerPagingView.swift in Sources */,
F7CCAB512ECF316700F8E68B /* NCCollectionViewCommon+SyncMetadata.swift in Sources */,
Expand Down
130 changes: 130 additions & 0 deletions iOSClient/Main/Collection Common/NCSelectableNavigationView.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
//
// NCSelectableNavigationView.swift
// Nextcloud
//
// Created by Henrik Storch on 27.01.22.
// Copyright © 2022 Henrik Storch. All rights reserved.
//
// Author Marino Faggiana <marino.faggiana@nextcloud.com>
// 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/>.
//

import NextcloudKit
import Realm
import UIKit

extension RealmSwiftObject {
var primaryKeyValue: String? {
guard let primaryKeyName = self.objectSchema.primaryKeyProperty?.name else { return nil }
return value(forKey: primaryKeyName) as? String
}
}

public protocol NCSelectableViewTabBar {
var tabBarController: UITabBarController? { get }
var hostingController: UIViewController? { get }
}

protocol NCSelectableNavigationView: AnyObject {
var viewController: UIViewController { get }
// var appDelegate: AppDelegate { get }
var selectableDataSource: [RealmSwiftObject] { get }
var collectionView: UICollectionView! { get set }
var isEditMode: Bool { get set }
var fileSelect: [String] { get set }
// var selectIndexPaths: [IndexPath] { get set }
var appDelegate: AppDelegate { get }
var selectableDataSource: [RealmSwiftObject] { get }
var collectionView: UICollectionView! { get set }
var isEditMode: Bool { get set }
var selectOcId: [String] { get set }
var appDelegate: AppDelegate { get }
var selectIndexPaths: [IndexPath] { get set }
var titleCurrentFolder: String { get }
var navigationItem: UINavigationItem { get }
var navigationController: UINavigationController? { get }
var layoutKey: String { get }
var serverUrl: String { get }
// var tabBarSelect: NCSelectableViewTabBar? { get set }
// var dataSource: NCCollectionViewDataSource { get set }

// func reloadDataSource(withQueryDB: Bool)
var tabBarSelect: NCSelectableViewTabBar? { get set }

func reloadDataSource(withQueryDB: Bool)
// func reloadDataSource(withQueryDB: Bool)
func setNavigationLeftItems()
func setNavigationRightItems(enableMenu: Bool)
func createMenuActions() -> [NCMenuAction]

func toggleSelect(isOn: Bool?)
func onListSelected()
func onGridSelected()
}

extension NCSelectableNavigationView {
func setNavigationLeftItems() {}

func saveLayout(_ layoutForView: NCDBLayoutForView) {
NCManageDatabase.shared.setLayoutForView(layoutForView: layoutForView)
NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterReloadDataSource)
setNavigationRightItems(enableMenu: false)
}

/// If explicit `isOn` is not set, it will invert `isEditMode`
func toggleSelect(isOn: Bool? = nil) {
DispatchQueue.main.async {
self.isEditMode = isOn ?? !self.isEditMode
self.fileSelect.removeAll()
// self.selectIndexPaths.removeAll()
self.selectOcId.removeAll()
self.selectIndexPaths.removeAll()
self.setNavigationLeftItems()
self.setNavigationRightItems(enableMenu: true)
self.collectionView.reloadData()
}
}

func collectionViewSelectAll() {

fileSelect = selectableDataSource.compactMap({ $0.primaryKeyValue })
// fileSelect = NCCollectionViewDataSource().getMetadataSourceForAllSections().compactMap({ $0.primaryKeyValue })
// selectOcId = selectableDataSource.compactMap({ $0.primaryKeyValue })
collectionView.reloadData()
setNavigationRightItems(enableMenu: false)
}

func tapNotification() {
if let viewController = UIStoryboard(name: "NCNotification", bundle: nil).instantiateInitialViewController() as? NCNotification {
navigationController?.pushViewController(viewController, animated: true)
}
}

func tapTransfer() {
if let navController = UIStoryboard(name: "NCTransfers", bundle: nil).instantiateInitialViewController() as? UINavigationController,
let viewController = navController.topViewController as? NCTransfers {
viewController.modalPresentationStyle = .pageSheet
// self.present(navigationController, animated: true, completion: nil)
navigationController?.present(navController, animated: true, completion: nil)
}
}
}

extension NCSelectableNavigationView where Self: UIViewController {
var viewController: UIViewController {
self
}
}
Loading