mirror of
https://github.com/nextcloud/desktop.git
synced 2024-12-22 13:44:34 +03:00
111 lines
5 KiB
C++
111 lines
5 KiB
C++
|
/*
|
||
|
* Copyright (C) by Daniel Molkentin <danimo@owncloud.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; version 2 of the License.
|
||
|
*
|
||
|
* 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 <CoreServices/CoreServices.h>
|
||
|
#include <CoreFoundation/CoreFoundation.h>
|
||
|
|
||
|
static void setupFavLink_private(const QString &folder)
|
||
|
{
|
||
|
// Finder: Place under "Places"/"Favorites" on the left sidebar
|
||
|
CFStringRef folderCFStr = CFStringCreateWithCString(0, folder.toUtf8().data(), kCFStringEncodingUTF8);
|
||
|
CFURLRef urlRef = CFURLCreateWithFileSystemPath (0, folderCFStr, kCFURLPOSIXPathStyle, true);
|
||
|
|
||
|
LSSharedFileListRef placesItems = LSSharedFileListCreate(0, kLSSharedFileListFavoriteItems, 0);
|
||
|
if (placesItems) {
|
||
|
//Insert an item to the list.
|
||
|
LSSharedFileListItemRef item = LSSharedFileListInsertItemURL(placesItems,
|
||
|
kLSSharedFileListItemLast, 0, 0,
|
||
|
urlRef, 0, 0);
|
||
|
if (item)
|
||
|
CFRelease(item);
|
||
|
}
|
||
|
CFRelease(placesItems);
|
||
|
CFRelease(folderCFStr);
|
||
|
CFRelease(urlRef);
|
||
|
}
|
||
|
|
||
|
bool hasLaunchOnStartup_private(const QString &)
|
||
|
{
|
||
|
// this is quite some duplicate code with setLaunchOnStartup, at some point we should fix this FIXME.
|
||
|
bool returnValue = false;
|
||
|
QString filePath = QDir(QCoreApplication::applicationDirPath()+QLatin1String("/../..")).absolutePath();
|
||
|
CFStringRef folderCFStr = CFStringCreateWithCString(0, filePath.toUtf8().data(), kCFStringEncodingUTF8);
|
||
|
CFURLRef urlRef = CFURLCreateWithFileSystemPath (0, folderCFStr, kCFURLPOSIXPathStyle, true);
|
||
|
LSSharedFileListRef loginItems = LSSharedFileListCreate(0, kLSSharedFileListSessionLoginItems, 0);
|
||
|
if (loginItems) {
|
||
|
// We need to iterate over the items and check which one is "ours".
|
||
|
UInt32 seedValue;
|
||
|
CFArrayRef itemsArray = LSSharedFileListCopySnapshot(loginItems, &seedValue);
|
||
|
CFStringRef appUrlRefString = CFURLGetString(urlRef); // no need for release
|
||
|
for (int i = 0; i < CFArrayGetCount(itemsArray); i++) {
|
||
|
LSSharedFileListItemRef item = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(itemsArray, i);
|
||
|
CFURLRef itemUrlRef = NULL;
|
||
|
|
||
|
if (LSSharedFileListItemResolve(item, 0, &itemUrlRef, NULL) == noErr) {
|
||
|
CFStringRef itemUrlString = CFURLGetString(itemUrlRef);
|
||
|
if (CFStringCompare(itemUrlString,appUrlRefString,0) == kCFCompareEqualTo) {
|
||
|
returnValue = true;
|
||
|
}
|
||
|
CFRelease(itemUrlRef);
|
||
|
}
|
||
|
}
|
||
|
CFRelease(itemsArray);
|
||
|
}
|
||
|
CFRelease(loginItems);
|
||
|
CFRelease(folderCFStr);
|
||
|
CFRelease(urlRef);
|
||
|
return returnValue;
|
||
|
}
|
||
|
|
||
|
void setLaunchOnStartup_private(const QString &appName, const QString& guiName, bool enable)
|
||
|
{
|
||
|
Q_UNUSED(guiName)
|
||
|
QString filePath = QDir(QCoreApplication::applicationDirPath()+QLatin1String("/../..")).absolutePath();
|
||
|
CFStringRef folderCFStr = CFStringCreateWithCString(0, filePath.toUtf8().data(), kCFStringEncodingUTF8);
|
||
|
CFURLRef urlRef = CFURLCreateWithFileSystemPath (0, folderCFStr, kCFURLPOSIXPathStyle, true);
|
||
|
LSSharedFileListRef loginItems = LSSharedFileListCreate(0, kLSSharedFileListSessionLoginItems, 0);
|
||
|
|
||
|
if (loginItems && enable) {
|
||
|
//Insert an item to the list.
|
||
|
LSSharedFileListItemRef item = LSSharedFileListInsertItemURL(loginItems,
|
||
|
kLSSharedFileListItemLast, 0, 0,
|
||
|
urlRef, 0, 0);
|
||
|
if (item)
|
||
|
CFRelease(item);
|
||
|
CFRelease(loginItems);
|
||
|
} else if (loginItems && !enable){
|
||
|
// We need to iterate over the items and check which one is "ours".
|
||
|
UInt32 seedValue;
|
||
|
CFArrayRef itemsArray = LSSharedFileListCopySnapshot(loginItems, &seedValue);
|
||
|
CFStringRef appUrlRefString = CFURLGetString(urlRef);
|
||
|
for (int i = 0; i < CFArrayGetCount(itemsArray); i++) {
|
||
|
LSSharedFileListItemRef item = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(itemsArray, i);
|
||
|
CFURLRef itemUrlRef = NULL;
|
||
|
|
||
|
if (LSSharedFileListItemResolve(item, 0, &itemUrlRef, NULL) == noErr) {
|
||
|
CFStringRef itemUrlString = CFURLGetString(itemUrlRef);
|
||
|
if (CFStringCompare(itemUrlString,appUrlRefString,0) == kCFCompareEqualTo) {
|
||
|
LSSharedFileListItemRemove(loginItems,item); // remove it!
|
||
|
}
|
||
|
CFRelease(itemUrlRef);
|
||
|
}
|
||
|
}
|
||
|
CFRelease(itemsArray);
|
||
|
CFRelease(loginItems);
|
||
|
};
|
||
|
|
||
|
CFRelease(folderCFStr);
|
||
|
CFRelease(urlRef);
|
||
|
}
|
||
|
|