Skip to content

Commit

Permalink
Add method to evict an item in FileProviderMaterialisedItemsModel
Browse files Browse the repository at this point in the history
Signed-off-by: Claudio Cambra <[email protected]>
  • Loading branch information
claucambra committed Oct 31, 2023
1 parent 83ef12d commit 53e9d51
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/gui/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,7 @@ IF( APPLE )
macOS/fileprovideritemmetadata_mac.mm
macOS/fileprovidermaterialiseditemsmodel.h
macOS/fileprovidermaterialiseditemsmodel.cpp
macOS/fileprovidermaterialiseditemsmodel_mac.mm
macOS/fileprovidersettingscontroller.h
macOS/fileprovidersettingscontroller_mac.mm
macOS/fileprovidersocketcontroller.h
Expand Down
1 change: 1 addition & 0 deletions src/gui/macOS/fileprovidermaterialiseditemsmodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ class FileProviderMaterialisedItemsModel : public QAbstractListModel

public slots:
void setItems(const QVector<FileProviderItemMetadata> &items);
void evictItem(const QString &identifier, const QString &domainIdentifier);

private:
QVector<FileProviderItemMetadata> _items;
Expand Down
82 changes: 82 additions & 0 deletions src/gui/macOS/fileprovidermaterialiseditemsmodel_mac.mm
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/*
* Copyright 2023 (c) Claudio Cambra <[email protected]>
*
* 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 2 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.
*/

#include "fileprovidermaterialiseditemsmodel.h"

#include <QLoggingCategory>

#import <FileProvider/FileProvider.h>

namespace OCC {

namespace Mac {

Q_LOGGING_CATEGORY(lcMacImplFileProviderMaterialisedItemsModelMac, "nextcloud.gui.macfileprovidermaterialiseditemsmodelmac", QtInfoMsg)

void FileProviderMaterialisedItemsModel::evictItem(const QString &identifier, const QString &domainIdentifier)
{
__block NSFileProviderManager *manager = nil;
NSString *const nsDomainIdentifier = domainIdentifier.toNSString();
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

// getDomainsWithCompletionHandler is asynchronous -- we create a dispatch semaphore in order
// to wait until it is done. This should tell you that we should not call this method very
// often!

[NSFileProviderManager getDomainsWithCompletionHandler:^(NSArray<NSFileProviderDomain *> *const domains, NSError *const error) {
if (error != nil) {
qCWarning(lcMacImplFileProviderMaterialisedItemsModelMac) << "Error fetching domains:"
<< error.localizedDescription;
dispatch_semaphore_signal(semaphore);
return;
}

BOOL foundDomain = NO;

for (NSFileProviderDomain *const domain in domains) {
if ([domain.identifier isEqualToString:nsDomainIdentifier]) {
foundDomain = YES;
manager = [NSFileProviderManager managerForDomain:domain];
}
}

if (!foundDomain) {
qCWarning(lcMacImplFileProviderMaterialisedItemsModelMac) << "No matching item domain, cannot get manager";
}

dispatch_semaphore_signal(semaphore);
}];

dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

if (manager == nil) {
qCWarning(lcMacImplFileProviderMaterialisedItemsModelMac) << "Received null manager for domain" << domainIdentifier
<< "cannot evict item" << identifier;
return;
}

[manager evictItemWithIdentifier:identifier.toNSString() completionHandler:^(NSError *error) {
if (error != nil) {
qCWarning(lcMacImplFileProviderMaterialisedItemsModelMac) << "Error evicting item due to error:"
<< error.localizedDescription;
}
}];

// TODO: Update the model
}


} // namespace OCC

} // namespace Mac

0 comments on commit 53e9d51

Please sign in to comment.