Comparar commits

..

4 Commits

Autor SHA1 Mensagem Data
Klaas Freitag 098b603879 TrayNotification: Add Alert classes for error, warning etc.
For that, the logger needs to pass through the notification
type that it wants to display.

The snore notifications show specific icons for each type.
2016-05-06 17:26:40 +02:00
Klaas Freitag 7c3b3d648b Systray: Broadcast notifications using libsnore if available. 2016-05-06 14:50:09 +02:00
Klaas Freitag 778aca386c CMake: Find and use libsnore for cross platform notifications. 2016-05-06 14:50:09 +02:00
Klaas Freitag 0758b2cf61 Application: Renamed to oCApplication to avoid clashes
with other projeccts that define a class Application as well, such
as the snorenotify lib.
2016-05-06 14:50:09 +02:00
57 arquivos alterados com 286 adições e 196 exclusões
+5
Ver Arquivo
@@ -151,6 +151,11 @@ endif()
find_package(ZLIB)
find_package(LibsnoreQt5 0.6.0)
if(LibsnoreQt5_FOUND)
find_package(LibsnoreSettingsQt5)
endif()
configure_file(config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
configure_file(test/test_journal.db "${CMAKE_BINARY_DIR}/test/test_journal.db" COPYONLY)
+1 -1
Submodule binary updated: 230ed45cd0...a56480559d
@@ -36,7 +36,8 @@ using namespace std;
OCClientInterface::ContextMenuInfo OCClientInterface::FetchInfo()
{
auto pipename = CommunicationSocket::DefaultPipePath();
auto pipename = std::wstring(L"\\\\.\\pipe\\");
pipename += L"ownCloud";
CommunicationSocket socket;
if (!WaitNamedPipe(pipename.data(), PIPE_TIMEOUT)) {
@@ -71,7 +72,8 @@ OCClientInterface::ContextMenuInfo OCClientInterface::FetchInfo()
void OCClientInterface::ShareObject(const std::wstring &path)
{
auto pipename = CommunicationSocket::DefaultPipePath();
auto pipename = std::wstring(L"\\\\.\\pipe\\");
pipename += L"ownCloud";
CommunicationSocket socket;
if (!WaitNamedPipe(pipename.data(), PIPE_TIMEOUT)) {
@@ -24,31 +24,11 @@
#include <fstream>
#define DEFAULT_BUFLEN 4096
#define BUFSIZE 1024
using namespace std;
namespace {
std::wstring getUserName() {
DWORD len = DEFAULT_BUFLEN;
TCHAR buf[DEFAULT_BUFLEN];
if (GetUserName(buf, &len)) {
return std::wstring(&buf[0], len);
} else {
return std::wstring();
}
}
}
std::wstring CommunicationSocket::DefaultPipePath()
{
auto pipename = std::wstring(L"\\\\.\\pipe\\");
pipename += L"ownCloud\\";
pipename += getUserName();
return pipename;
}
#define DEFAULT_BUFLEN 4096
CommunicationSocket::CommunicationSocket()
: _pipe(INVALID_HANDLE_VALUE)
@@ -26,8 +26,6 @@
class __declspec(dllexport) CommunicationSocket
{
public:
static std::wstring DefaultPipePath();
CommunicationSocket();
~CommunicationSocket();
@@ -45,4 +43,4 @@ private:
bool _connected;
};
#endif
#endif
@@ -31,10 +31,25 @@
using namespace std;
#define BUFSIZE 512
std::wstring getUserName() {
DWORD len = BUFSIZE;
TCHAR buf[BUFSIZE];
if (GetUserName(buf, &len)) {
return std::wstring(&buf[0], len);
} else {
return std::wstring();
}
}
// This code is run in a thread
void RemotePathChecker::workerThreadLoop()
{
auto pipename = CommunicationSocket::DefaultPipePath();
auto pipename = std::wstring(L"\\\\.\\pipe\\");
pipename += L"ownCloud\\";
pipename += getUserName();
bool connected = false;
CommunicationSocket socket;
std::unordered_set<std::wstring> asked;
+6 -1
Ver Arquivo
@@ -45,7 +45,7 @@ qt_wrap_ui(client_UI_SRCS ${client_UI})
set(client_SRCS
accountmanager.cpp
accountsettings.cpp
application.cpp
ocapplication.cpp
folder.cpp
folderman.cpp
folderstatusmodel.cpp
@@ -212,6 +212,10 @@ if(QTKEYCHAIN_FOUND OR QT5KEYCHAIN_FOUND)
list(APPEND libsync_LINK_TARGETS ${QTKEYCHAIN_LIBRARY})
include_directories(${QTKEYCHAIN_INCLUDE_DIR})
endif()
if(LibsnoreQt5_FOUND)
add_definitions(-DHAVE_LIBSNORE)
endif()
# add executable icon on windows and osx
include( AddAppIconMacro )
@@ -289,6 +293,7 @@ target_link_libraries( ${APPLICATION_EXECUTABLE} ${QT_LIBRARIES} )
target_link_libraries( ${APPLICATION_EXECUTABLE} ${synclib_NAME} )
target_link_libraries( ${APPLICATION_EXECUTABLE} updater )
target_link_libraries( ${APPLICATION_EXECUTABLE} ${OS_SPECIFIC_LINK_LIBRARIES} )
target_link_libraries( ${APPLICATION_EXECUTABLE} Snore::Libsnore Snore::LibsnoreSettings )
if(WITH_CRASHREPORTER)
target_link_libraries( ${APPLICATION_EXECUTABLE} crashreporter-handler)
+1 -1
Ver Arquivo
@@ -21,7 +21,7 @@
#include "folderstatusmodel.h"
#include "folderstatusdelegate.h"
#include "utility.h"
#include "application.h"
#include "ocapplication.h"
#include "configfile.h"
#include "account.h"
#include "accountstate.h"
+1 -1
Ver Arquivo
@@ -41,7 +41,7 @@ class ActivityListModel;
namespace Ui {
class ActivityWidget;
}
class Application;
class oCApplication;
/**
* @brief The ActivityWidget class
+2 -2
Ver Arquivo
@@ -29,7 +29,7 @@ class TestFolderMan;
namespace OCC {
class Application;
class oCApplication;
class SyncResult;
class SocketApi;
class LockWatcher;
@@ -255,7 +255,7 @@ private:
static FolderMan *_instance;
explicit FolderMan(QObject *parent = 0);
friend class OCC::Application;
friend class OCC::oCApplication;
friend class ::TestFolderMan;
};
+1 -1
Ver Arquivo
@@ -16,7 +16,7 @@
#include "theme.h"
#include "configfile.h"
#include "application.h"
#include "ocapplication.h"
#include "utility.h"
#include "configfile.h"
#include "owncloudsetupwizard.h"
+2 -2
Ver Arquivo
@@ -21,7 +21,7 @@
#include <sys/resource.h>
#endif
#include "application.h"
#include "ocapplication.h"
#include "theme.h"
#include "utility.h"
#include "cocoainitializer.h"
@@ -63,7 +63,7 @@ int main(int argc, char **argv)
#ifdef Q_OS_MAC
Mac::CocoaInitializer cocoaInit; // RIIA
#endif
OCC::Application app(argc, argv);
OCC::oCApplication app(argc, argv);
#ifdef Q_OS_WIN
// The Windows style still has pixelated elements with Qt 5.6,
+1 -1
Ver Arquivo
@@ -16,7 +16,7 @@
#include "theme.h"
#include "configfile.h"
#include "application.h"
#include "ocapplication.h"
#include "utility.h"
#include "configfile.h"
#include "folderman.h"
@@ -14,7 +14,7 @@
* for more details.
*/
#include "application.h"
#include "ocapplication.h"
#include <iostream>
@@ -91,7 +91,7 @@ QString applicationTrPath()
// ----------------------------------------------------------------------------------
Application::Application(int &argc, char **argv) :
oCApplication::oCApplication(int &argc, char **argv) :
SharedTools::QtSingleApplication(Theme::instance()->appName() ,argc, argv),
_gui(0),
_theme(Theme::instance()),
@@ -202,7 +202,7 @@ Application::Application(int &argc, char **argv) :
connect (this, SIGNAL(aboutToQuit()), SLOT(slotCleanup()));
}
Application::~Application()
oCApplication::~oCApplication()
{
// Make sure all folders are gone, otherwise removing the
// accounts will remove the associated folders from the settings.
@@ -214,7 +214,7 @@ Application::~Application()
AccountManager::instance()->shutdown();
}
void Application::slotAccountStateRemoved(AccountState *accountState)
void oCApplication::slotAccountStateRemoved(AccountState *accountState)
{
if (_gui) {
disconnect(accountState, SIGNAL(stateChanged(int)),
@@ -237,7 +237,7 @@ void Application::slotAccountStateRemoved(AccountState *accountState)
}
}
void Application::slotAccountStateAdded(AccountState *accountState)
void oCApplication::slotAccountStateAdded(AccountState *accountState)
{
connect(accountState, SIGNAL(stateChanged(int)),
_gui, SLOT(slotAccountStateChanged()));
@@ -251,7 +251,7 @@ void Application::slotAccountStateAdded(AccountState *accountState)
_gui->slotTrayMessageIfServerUnsupported(accountState->account().data());
}
void Application::slotCleanup()
void oCApplication::slotCleanup()
{
AccountManager::instance()->save();
FolderMan::instance()->unloadAndDeleteAllFolders();
@@ -263,7 +263,7 @@ void Application::slotCleanup()
// FIXME: This is not ideal yet since a ConnectionValidator might already be running and is in
// progress of timing out in some seconds.
// Maybe we need 2 validators, one triggered by timer, one by network configuration changes?
void Application::slotSystemOnlineConfigurationChanged(QNetworkConfiguration cnf)
void oCApplication::slotSystemOnlineConfigurationChanged(QNetworkConfiguration cnf)
{
if (cnf.state() & QNetworkConfiguration::Active) {
//qDebug() << "Trying fast reconnect";
@@ -271,7 +271,7 @@ void Application::slotSystemOnlineConfigurationChanged(QNetworkConfiguration cnf
}
}
void Application::slotCheckConnection()
void oCApplication::slotCheckConnection()
{
auto list = AccountManager::instance()->accounts();
foreach (const auto &accountState , list) {
@@ -293,12 +293,12 @@ void Application::slotCheckConnection()
}
}
void Application::slotCrash()
void oCApplication::slotCrash()
{
Utility::crash();
}
void Application::slotownCloudWizardDone( int res )
void oCApplication::slotownCloudWizardDone( int res )
{
AccountManager *accountMan = AccountManager::instance();
FolderMan *folderMan = FolderMan::instance();
@@ -335,7 +335,7 @@ void Application::slotownCloudWizardDone( int res )
}
}
void Application::setupLogging()
void oCApplication::setupLogging()
{
// might be called from second instance
Logger::instance()->setLogFile(_logFile);
@@ -352,12 +352,12 @@ void Application::setupLogging()
}
void Application::slotUseMonoIconsChanged(bool)
void oCApplication::slotUseMonoIconsChanged(bool)
{
_gui->slotComputeOverallSyncStatus();
}
void Application::slotParseMessage(const QString &msg, QObject*)
void oCApplication::slotParseMessage(const QString &msg, QObject*)
{
if (msg.startsWith(QLatin1String("MSG_PARSEOPTIONS:"))) {
const int lengthOfMsgPrefix = 17;
@@ -375,7 +375,7 @@ void Application::slotParseMessage(const QString &msg, QObject*)
}
}
void Application::parseOptions(const QStringList &options)
void oCApplication::parseOptions(const QStringList &options)
{
QStringListIterator it(options);
// skip file name;
@@ -455,7 +455,7 @@ static void displayHelpText(const QString &t)
}
#endif
void Application::showHelp()
void oCApplication::showHelp()
{
setHelp();
QString helpText;
@@ -473,7 +473,7 @@ void Application::showHelp()
displayHelpText(helpText);
}
void Application::showVersion()
void oCApplication::showVersion()
{
QString helpText;
QTextStream stream(&helpText);
@@ -485,7 +485,7 @@ void Application::showVersion()
displayHelpText(helpText);
}
void Application::showHint(std::string errorHint)
void oCApplication::showHint(std::string errorHint)
{
static QString binName = QFileInfo(QCoreApplication::applicationFilePath()).fileName();
std::cerr << errorHint << std::endl;
@@ -493,12 +493,12 @@ void Application::showHint(std::string errorHint)
std::exit(1);
}
bool Application::debugMode()
bool oCApplication::debugMode()
{
return _debugMode;
}
void Application::setHelp()
void oCApplication::setHelp()
{
_helpOnly = true;
}
@@ -518,7 +518,7 @@ QString substLang(const QString &lang)
return lang;
}
void Application::setupTranslations()
void oCApplication::setupTranslations()
{
QStringList uiLanguages;
// uiLanguages crashes on Windows with 4.8.0 release builds
@@ -582,21 +582,20 @@ void Application::setupTranslations()
#endif
}
bool Application::giveHelp()
bool oCApplication::giveHelp()
{
return _helpOnly;
}
bool Application::versionOnly()
bool oCApplication::versionOnly()
{
return _versionOnly;
}
void Application::showSettingsDialog()
void oCApplication::showSettingsDialog()
{
_gui->slotShowSettings();
}
} // namespace OCC
@@ -12,8 +12,8 @@
* for more details.
*/
#ifndef APPLICATION_H
#define APPLICATION_H
#ifndef OCAPPLICATION_H
#define OCAPPLICATION_H
#include <QApplication>
#include <QPointer>
@@ -49,12 +49,12 @@ class SslErrorDialog;
* @brief The Application class
* @ingroup gui
*/
class Application : public SharedTools::QtSingleApplication
class oCApplication : public SharedTools::QtSingleApplication
{
Q_OBJECT
public:
explicit Application(int &argc, char **argv);
~Application();
explicit oCApplication(int &argc, char **argv);
~oCApplication();
bool giveHelp();
void showHelp();
+31 -13
Ver Arquivo
@@ -11,7 +11,7 @@
* for more details.
*/
#include "application.h"
#include "ocapplication.h"
#include "owncloudgui.h"
#include "theme.h"
#include "folderman.h"
@@ -47,7 +47,7 @@ namespace OCC {
const char propertyAccountC[] = "oc_account";
ownCloudGui::ownCloudGui(Application *parent) :
ownCloudGui::ownCloudGui(oCApplication *parent) :
QObject(parent),
_tray(0),
#if defined(Q_OS_MAC)
@@ -96,10 +96,10 @@ ownCloudGui::ownCloudGui(Application *parent) :
connect( AccountManager::instance(), SIGNAL(accountRemoved(AccountState*)),
SLOT(setupContextMenu()));
connect( Logger::instance(), SIGNAL(guiLog(QString,QString)),
SLOT(slotShowTrayMessage(QString,QString)));
connect( Logger::instance(), SIGNAL(optionalGuiLog(QString,QString)),
SLOT(slotShowOptionalTrayMessage(QString,QString)));
connect( Logger::instance(), SIGNAL(guiLog(QString,QString, Logger::NotificationType)),
SLOT(slotShowTrayMessage(QString,QString, Logger::NotificationType)));
connect( Logger::instance(), SIGNAL(optionalGuiLog(QString,QString, Logger::NotificationType)),
SLOT(slotShowOptionalTrayMessage(QString,QString,Logger::NotificationType)));
connect( Logger::instance(), SIGNAL(guiMessage(QString,QString)),
SLOT(slotShowGuiMessage(QString,QString)));
@@ -237,7 +237,8 @@ void ownCloudGui::slotTrayMessageIfServerUnsupported(Account* account)
tr("The server on account %1 runs an old and unsupported version %2. "
"Using this client with unsupported server versions is untested and "
"potentially dangerous. Proceed at your own risk.")
.arg(account->displayName(), account->serverVersion()));
.arg(account->displayName(), account->serverVersion()),
Logger::Critical );
}
}
@@ -535,19 +536,36 @@ void ownCloudGui::setupContextMenu()
}
void ownCloudGui::slotShowTrayMessage(const QString &title, const QString &msg)
void ownCloudGui::slotShowTrayMessage(const QString &title, const QString &msg, Logger::NotificationType type)
{
if( _tray )
_tray->showMessage(title, msg);
else
if( _tray ) {
QSystemTrayIcon::MessageIcon trayIcon = QSystemTrayIcon::NoIcon;
switch( type ) {
case Logger::NoIcon:
break;
case Logger::Information:
trayIcon = QSystemTrayIcon::Information;
break;
case Logger::SoftError:
trayIcon = QSystemTrayIcon::Warning;
break;
case Logger::Error:
case Logger::Critical:
trayIcon = QSystemTrayIcon::Critical;
break;
}
_tray->showMessage(title, msg, trayIcon);
} else {
qDebug() << "Tray not ready: " << msg;
}
}
void ownCloudGui::slotShowOptionalTrayMessage(const QString &title, const QString &msg)
void ownCloudGui::slotShowOptionalTrayMessage(const QString &title, const QString &msg, Logger::NotificationType type)
{
ConfigFile cfg;
if (cfg.optionalDesktopNotifications()) {
slotShowTrayMessage(title, msg);
slotShowTrayMessage(title, msg, type);
}
}
+6 -5
Ver Arquivo
@@ -17,6 +17,7 @@
#include "systray.h"
#include "connectionvalidator.h"
#include "progressdispatcher.h"
#include "logger.h"
#include <QObject>
#include <QPointer>
@@ -32,7 +33,7 @@ class Folder;
class SettingsDialog;
class SettingsDialogMac;
class ShareDialog;
class Application;
class oCApplication;
class LogBrowser;
class AccountState;
@@ -44,7 +45,7 @@ class ownCloudGui : public QObject
{
Q_OBJECT
public:
explicit ownCloudGui(Application *parent = 0);
explicit ownCloudGui(oCApplication *parent = 0);
bool checkAccountExists(bool openSettings);
@@ -58,8 +59,8 @@ signals:
public slots:
void setupContextMenu();
void slotComputeOverallSyncStatus();
void slotShowTrayMessage(const QString &title, const QString &msg);
void slotShowOptionalTrayMessage(const QString &title, const QString &msg);
void slotShowTrayMessage(const QString &title, const QString &msg, Logger::NotificationType type);
void slotShowOptionalTrayMessage(const QString &title, const QString &msg, Logger::NotificationType type);
void slotFolderOpenAction( const QString& alias );
void slotRebuildRecentMenus();
void slotUpdateProgress(const QString &folder, const ProgressInfo& progress);
@@ -122,7 +123,7 @@ private:
QSignalMapper *_folderOpenActionMapper;
QSignalMapper *_recentItemsMapper;
Application *_app;
oCApplication *_app;
};
} // namespace OCC
+1 -1
Ver Arquivo
@@ -31,7 +31,7 @@ class SyncResult;
namespace Ui {
class ProtocolWidget;
}
class Application;
class oCApplication;
/**
* @brief The ProtocolWidget class
+1 -1
Ver Arquivo
@@ -33,7 +33,7 @@ namespace Ui {
class SettingsDialog;
}
class AccountSettings;
class Application;
class oCApplication;
class FolderMan;
class ownCloudGui;
class ActivitySettings;
+7 -19
Ver Arquivo
@@ -56,13 +56,6 @@
// The second number should be changed when there are new features.
#define MIRALL_SOCKET_API_VERSION "1.0"
static inline QString removeTrailingSlash(QString path)
{
Q_ASSERT(path.endsWith(QLatin1Char('/')));
path.truncate(path.length()-1);
return path;
}
namespace OCC {
#define DEBUG qDebug() << "SocketApi: "
@@ -149,7 +142,7 @@ void SocketApi::slotNewConnection()
foreach( Folder *f, FolderMan::instance()->map() ) {
if (f->canSync()) {
QString message = buildRegisterPathMessage(removeTrailingSlash(f->path()));
QString message = buildRegisterPathMessage(f->path());
sendMessage(socket, message);
}
}
@@ -196,7 +189,7 @@ void SocketApi::slotRegisterPath( const QString& alias )
Folder *f = FolderMan::instance()->folder(alias);
if (f) {
QString message = buildRegisterPathMessage(removeTrailingSlash(f->path()));
QString message = buildRegisterPathMessage(f->path());
foreach(QIODevice *socket, _listeners) {
sendMessage(socket, message);
}
@@ -212,7 +205,7 @@ void SocketApi::slotUnregisterPath( const QString& alias )
Folder *f = FolderMan::instance()->folder(alias);
if (f)
broadcastMessage(QLatin1String("UNREGISTER_PATH"), removeTrailingSlash(f->path()), QString::null, true );
broadcastMessage(QLatin1String("UNREGISTER_PATH"), f->path(), QString::null, true );
_registeredAliases.remove(alias);
}
@@ -232,11 +225,10 @@ void SocketApi::slotUpdateFolderView(Folder *f)
f->syncResult().status() == SyncResult::Error ||
f->syncResult().status() == SyncResult::SetupError ) {
QString rootPath = removeTrailingSlash(f->path());
broadcastMessage(QLatin1String("STATUS"), rootPath,
broadcastMessage(QLatin1String("STATUS"), f->path() ,
f->syncEngine().syncFileStatusTracker().fileStatus("").toSocketAPIString());
broadcastMessage(QLatin1String("UPDATE_VIEW"), rootPath);
broadcastMessage(QLatin1String("UPDATE_VIEW"), f->path() );
} else {
qDebug() << "Not sending UPDATE_VIEW for" << f->alias() << "because status() is" << f->syncResult().status();
}
@@ -310,12 +302,8 @@ void SocketApi::command_RETRIEVE_FILE_STATUS(const QString& argument, QIODevice*
// this can happen in offline mode e.g.: nothing to worry about
statusString = QLatin1String("NOP");
} else {
QString relativePath = QDir::cleanPath(argument).mid(syncFolder->cleanPath().length()+1);
if( relativePath.endsWith(QLatin1Char('/')) ) {
relativePath.truncate(relativePath.length()-1);
qWarning() << "Removed trailing slash for directory: " << relativePath << "Status pushes won't have one.";
}
SyncFileStatus fileStatus = syncFolder->syncEngine().syncFileStatusTracker().fileStatus(relativePath);
const QString file = QDir::cleanPath(argument).mid(syncFolder->cleanPath().length()+1);
SyncFileStatus fileStatus = syncFolder->syncEngine().syncFileStatusTracker().fileStatus(file);
statusString = fileStatus.toSocketAPIString();
}
+53 -1
Ver Arquivo
@@ -12,9 +12,15 @@
* for more details.
*/
#ifdef HAVE_LIBSNORE
#include <libsnore/application.h>
#include <libsnore/notification/icon.h>
#endif
#include "systray.h"
#include "theme.h"
#include <QDebug>
#include <QPointer>
#ifdef USE_FDO_NOTIFICATIONS
#include <QDBusConnection>
@@ -28,8 +34,54 @@
namespace OCC {
void Systray::showMessage(const QString & title, const QString & message, MessageIcon icon, int millisecondsTimeoutHint)
Systray::Systray( )
{
#ifdef HAVE_LIBSNORE
Snore::SnoreCore &snore = Snore::SnoreCore::instance();
snore.loadPlugins( Snore::SnorePlugin::Backend | Snore::SnorePlugin::SecondaryBackend );
snore.setDefaultSettingsValue("Silent", true, Snore::LocalSetting );
_application = Snore::Application( Theme::instance()->appName(), Theme::instance()->applicationIcon() );
_application.hints().setValue( "use-markup", true );
_application.hints().setValue( "windows-app-id", Theme::instance()->appName() );
_application.hints().setValue( "desktop-entry", Theme::instance()->appNameGUI() );
_application.hints().setValue( "tray-icon", qVariantFromValue(QPointer<QSystemTrayIcon>(this)));
// register the Alerts.
Snore::Alert alert( Theme::instance()->appNameGUI(), QIcon() );
_alerts.insert( QSystemTrayIcon::NoIcon, alert);
_application.addAlert(alert);
Snore::Alert alert2( Theme::instance()->appNameGUI(), Theme::instance()->syncStateIcon(SyncResult::Success, false ));
_alerts.insert( QSystemTrayIcon::Information, alert2);
_application.addAlert(alert2);
Snore::Alert alert3( Theme::instance()->appNameGUI(), Theme::instance()->syncStateIcon(SyncResult::Problem, false ));
_alerts.insert( QSystemTrayIcon::Warning, alert3);
_application.addAlert(alert3);
Snore::Alert alert4( Theme::instance()->appNameGUI(), Theme::instance()->syncStateIcon(SyncResult::Error, false ));
_alerts.insert( QSystemTrayIcon::Critical, alert4);
_application.addAlert(alert4);
snore.registerApplication( _application );
snore.setDefaultApplication( _application );
// connect( &snore, SIGNAL( actionInvoked( Snore::Notification ) ), this, SLOT( slotActionInvoked( Snore::Notification ) ) );
#endif
}
void Systray::showMessage(const QString & title, const QString & message, MessageIcon icon,
int millisecondsTimeoutHint)
{
#ifdef HAVE_LIBSNORE
Snore::Alert a = _alerts[NoIcon];
if( _alerts.contains(icon) ) {
a = _alerts[icon];
}
Snore::Notification n( _application , a, title, message, a.icon() );
Snore::SnoreCore::instance().broadcastNotification( n );
return;
#endif
#ifdef USE_FDO_NOTIFICATIONS
if(QDBusInterface(NOTIFICATIONS_SERVICE, NOTIFICATIONS_PATH, NOTIFICATIONS_IFACE).isValid()) {
+15 -1
Ver Arquivo
@@ -15,8 +15,13 @@
#ifndef SYSTRAY_H
#define SYSTRAY_H
#include "logger.h"
#include <QSystemTrayIcon>
#ifdef HAVE_LIBSNORE
#include <libsnore/snore.h>
#endif
class QIcon;
namespace OCC {
@@ -34,8 +39,17 @@ class Systray : public QSystemTrayIcon
{
Q_OBJECT
public:
void showMessage(const QString & title, const QString & message, MessageIcon icon = Information, int millisecondsTimeoutHint = 10000);
explicit Systray();
void showMessage(const QString & title, const QString & message, MessageIcon icon = Information,
int millisecondsTimeoutHint = 10000);
void setToolTip(const QString &tip);
private:
#ifdef HAVE_LIBSNORE
Snore::Application _application;
QHash<QSystemTrayIcon::MessageIcon, Snore::Alert> _alerts;
#endif
};
} // namespace OCC
+4 -4
Ver Arquivo
@@ -74,14 +74,14 @@ Logger::~Logger() {
}
void Logger::postGuiLog(const QString &title, const QString &message)
void Logger::postGuiLog(const QString &title, const QString &message, NotificationType type )
{
emit guiLog(title, message);
emit guiLog(title, message, type);
}
void Logger::postOptionalGuiLog(const QString &title, const QString &message)
void Logger::postOptionalGuiLog(const QString &title, const QString &message, NotificationType type )
{
emit optionalGuiLog(title, message);
emit optionalGuiLog(title, message, type);
}
void Logger::postGuiMessage(const QString &title, const QString &message)
+12 -4
Ver Arquivo
@@ -45,6 +45,14 @@ class OWNCLOUDSYNC_EXPORT Logger : public QObject
{
Q_OBJECT
public:
enum NotificationType {
NoIcon = 0,
Information,
SoftError,
Error,
Critical
};
bool isNoop() const;
void log(Log log);
@@ -57,8 +65,8 @@ public:
static Logger* instance();
void postGuiLog(const QString& title, const QString& message);
void postOptionalGuiLog(const QString& title, const QString& message);
void postGuiLog(const QString& title, const QString& message, NotificationType type = Information);
void postOptionalGuiLog(const QString& title, const QString& message, NotificationType type = Information);
void postGuiMessage(const QString& title, const QString& message);
void setLogFile( const QString & name );
@@ -68,9 +76,9 @@ public:
signals:
void newLog(const QString&);
void guiLog(const QString&, const QString&);
void guiLog(const QString&, const QString&, Logger::NotificationType type);
void guiMessage(const QString&, const QString&);
void optionalGuiLog(const QString&, const QString&);
void optionalGuiLog(const QString&, const QString&, Logger::NotificationType type);
public slots:
void enterNextLogFile();
+23 -18
Ver Arquivo
@@ -92,11 +92,15 @@ SyncFileItem SyncFileStatusTracker::rootSyncFileItem()
return fakeRootItem;
}
SyncFileStatus SyncFileStatusTracker::fileStatus(const QString& relativePath)
SyncFileStatus SyncFileStatusTracker::fileStatus(const QString& systemFileName)
{
Q_ASSERT(!relativePath.endsWith(QLatin1Char('/')));
QString fileName = systemFileName.normalized(QString::NormalizationForm_C);
if( fileName.endsWith(QLatin1Char('/')) ) {
fileName.truncate(fileName.length()-1);
qDebug() << "Removed trailing slash: " << fileName;
}
if (relativePath.isEmpty()) {
if( fileName.isEmpty() ) {
// This is the root sync folder, it doesn't have an entry in the database and won't be walked by csync, so create one manually.
return syncFileItemStatus(rootSyncFileItem());
}
@@ -107,22 +111,22 @@ SyncFileStatus SyncFileStatusTracker::fileStatus(const QString& relativePath)
// update the exclude list at runtime and doing it statically here removes
// our ability to notify changes through the fileStatusChanged signal,
// it's an acceptable compromize to treat all exclude types the same.
if( _syncEngine->excludedFiles().isExcluded(_syncEngine->localPath() + relativePath,
if( _syncEngine->excludedFiles().isExcluded(_syncEngine->localPath() + fileName,
_syncEngine->localPath(),
_syncEngine->ignoreHiddenFiles()) ) {
return SyncFileStatus(SyncFileStatus::StatusWarning);
}
if ( _dirtyPaths.contains(relativePath) )
if ( _dirtyPaths.contains(fileName) )
return SyncFileStatus::StatusSync;
SyncFileItem* item = _syncEngine->findSyncItem(relativePath);
SyncFileItem* item = _syncEngine->findSyncItem(fileName);
if (item) {
return syncFileItemStatus(*item);
}
// If we're not currently syncing that file, look it up in the database to know if it's shared
SyncJournalFileRecord rec = _syncEngine->journal()->getFileRecord(relativePath);
SyncJournalFileRecord rec = _syncEngine->journal()->getFileRecord(fileName);
if (rec.isValid()) {
return syncFileItemStatus(rec.toSyncFileItem());
}
@@ -154,7 +158,7 @@ void SyncFileStatusTracker::slotAboutToPropagate(SyncFileItemVector& items)
} else if (showWarningInSocketApi(*item)) {
_syncProblems[item->_file] = SyncFileStatus::StatusWarning;
}
emit fileStatusChanged(getSystemDestination(item->destination()), syncFileItemStatus(*item));
emit fileStatusChanged(getSystemDestination(*item), syncFileItemStatus(*item));
}
// Make sure to push any status that might have been resolved indirectly since the last sync
@@ -166,7 +170,7 @@ void SyncFileStatusTracker::slotAboutToPropagate(SyncFileItemVector& items)
SyncFileStatus::SyncFileStatusTag severity = it->second;
if (severity == SyncFileStatus::StatusError)
invalidateParentPaths(path);
emit fileStatusChanged(getSystemDestination(path), fileStatus(path));
emit fileStatusChanged(_syncEngine->localPath() + path, fileStatus(path));
}
}
@@ -184,7 +188,7 @@ void SyncFileStatusTracker::slotItemCompleted(const SyncFileItem &item)
Q_ASSERT(_syncProblems.find(item._file) == _syncProblems.end());
}
emit fileStatusChanged(getSystemDestination(item.destination()), syncFileItemStatus(item));
emit fileStatusChanged(getSystemDestination(item), syncFileItemStatus(item));
}
void SyncFileStatusTracker::slotSyncEngineRunningChanged()
@@ -232,19 +236,20 @@ void SyncFileStatusTracker::invalidateParentPaths(const QString& path)
QStringList splitPath = path.split('/', QString::SkipEmptyParts);
for (int i = 0; i < splitPath.size(); ++i) {
QString parentPath = QStringList(splitPath.mid(0, i)).join(QLatin1String("/"));
emit fileStatusChanged(getSystemDestination(parentPath), fileStatus(parentPath));
emit fileStatusChanged(_syncEngine->localPath() + parentPath, fileStatus(parentPath));
}
}
QString SyncFileStatusTracker::getSystemDestination(const QString& relativePath)
QString SyncFileStatusTracker::getSystemDestination(const SyncFileItem& item)
{
QString systemPath = _syncEngine->localPath() + relativePath;
// SyncEngine::localPath() has a trailing slash, make sure to remove it if the
// destination is empty.
if( systemPath.endsWith(QLatin1Char('/')) ) {
systemPath.truncate(systemPath.length()-1);
QString systemFileName = _syncEngine->localPath() + item.destination();
// the trailing slash for directories must be appended as the filenames coming in
// from the plugins have that too. Otherwise the matching entry item is not found
// in the plugin.
if( item._type == SyncFileItem::Type::Directory ) {
systemFileName += QLatin1Char('/');
}
return systemPath;
return systemFileName;
}
}
+2 -2
Ver Arquivo
@@ -35,7 +35,7 @@ class OWNCLOUDSYNC_EXPORT SyncFileStatusTracker : public QObject
Q_OBJECT
public:
explicit SyncFileStatusTracker(SyncEngine* syncEngine);
SyncFileStatus fileStatus(const QString& relativePath);
SyncFileStatus fileStatus(const QString& systemFileName);
public slots:
void slotPathTouched(const QString& fileName);
@@ -54,7 +54,7 @@ private:
SyncFileItem rootSyncFileItem();
void invalidateParentPaths(const QString& path);
QString getSystemDestination(const QString& relativePath);
QString getSystemDestination(const SyncFileItem& syncEnginePath);
SyncEngine* _syncEngine;
+1 -1
Ver Arquivo
@@ -2559,7 +2559,7 @@ No és aconsellada usar-la.</translation>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Comparteix amb %1</translation>
+1 -1
Ver Arquivo
@@ -2563,7 +2563,7 @@ Nedoporučuje se jí používat.</translation>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Sdílet s %1</translation>
+1 -1
Ver Arquivo
@@ -2561,7 +2561,7 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Via %1 teilen</translation>
+1 -1
Ver Arquivo
@@ -2561,7 +2561,7 @@ It is not advisable to use it.</source>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Διαμοιρασμός με %1</translation>
+1 -1
Ver Arquivo
@@ -2582,7 +2582,7 @@ It is not advisable to use it.</source>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation type="unfinished"></translation>
+7 -7
Ver Arquivo
@@ -440,17 +440,17 @@
<message numerus="yes">
<location filename="../src/gui/activitywidget.cpp" line="351"/>
<source>You received %n new notification(s) from %2.</source>
<translation><numerusform>Ha recibido %n nueva notificación de %2.</numerusform><numerusform>Ha recibido %n nueva notificacióne(s) de %2.</numerusform></translation>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/gui/activitywidget.cpp" line="359"/>
<source>You received %n new notification(s) from %1 and %2.</source>
<translation><numerusform>Ha recibido %n nueva notificación de %1 y de %2.</numerusform><numerusform>Ha recibido %n nuevas notificacióne(s) de %1 y de %2.</numerusform></translation>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message>
<location filename="../src/gui/activitywidget.cpp" line="361"/>
<source>You received new notifications from %1, %2 and other accounts.</source>
<translation>Ha recibido nuevas notificaciónes de %1, %2 y otras cuentas.</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/gui/activitywidget.cpp" line="365"/>
@@ -1684,7 +1684,7 @@ for additional privileges during the process.</source>
<message>
<location filename="../src/gui/wizard/owncloudhttpcredspage.cpp" line="51"/>
<source>&amp;Email</source>
<translation>&amp;Email</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/gui/wizard/owncloudhttpcredspage.cpp" line="61"/>
@@ -1952,7 +1952,7 @@ No se recomienda usarla.</translation>
<message>
<location filename="../src/libsync/propagatedownload.cpp" line="552"/>
<source>The downloaded file is empty despite the server announced it should have been %1.</source>
<translation>El archivo descargado está vacio aunque el servidor dice que deberia haber sido %1.</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libsync/propagatedownload.cpp" line="694"/>
@@ -2384,7 +2384,7 @@ No se recomienda usarla.</translation>
<message>
<location filename="../src/gui/sharedialog.cpp" line="113"/>
<source>Retrieving maximum possible sharing permissions from server...</source>
<translation>Descargando el maximo número de permisos compartidos del servidor...</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="169"/>
@@ -2562,7 +2562,7 @@ No se recomienda usarla.</translation>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Compartir con %1</translation>
+1 -1
Ver Arquivo
@@ -2550,7 +2550,7 @@ It is not advisable to use it.</source>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation type="unfinished"/>
+1 -1
Ver Arquivo
@@ -2551,7 +2551,7 @@ Selle kasutamine pole soovitatav.</translation>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Jagatud kasutajaga %1</translation>
+1 -1
Ver Arquivo
@@ -2557,7 +2557,7 @@ Ez da gomendagarria erabltzea.</translation>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation type="unfinished"/>
+1 -1
Ver Arquivo
@@ -2550,7 +2550,7 @@ It is not advisable to use it.</source>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>اشتراکگذاری با %1</translation>
+1 -1
Ver Arquivo
@@ -2558,7 +2558,7 @@ Osoitteen käyttäminen ei ole suositeltavaa.</translation>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation type="unfinished"/>
+1 -1
Ver Arquivo
@@ -2563,7 +2563,7 @@ Il est déconseillé de l&apos;utiliser.</translation>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Partager avec %1</translation>
+1 -1
Ver Arquivo
@@ -2557,7 +2557,7 @@ Recomendámoslle que non o use.</translation>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Compartir con %1</translation>
+1 -1
Ver Arquivo
@@ -2554,7 +2554,7 @@ It is not advisable to use it.</source>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Megosztás vele: %1</translation>
+1 -1
Ver Arquivo
@@ -2562,7 +2562,7 @@ Non è consigliabile utilizzarlo.</translation>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Condividi con %1</translation>
+1 -1
Ver Arquivo
@@ -2561,7 +2561,7 @@ It is not advisable to use it.</source>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>%1 </translation>
+1 -1
Ver Arquivo
@@ -2563,7 +2563,7 @@ Det er ikke tilrådelig å bruke den.</translation>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Del med %1</translation>
+12 -12
Ver Arquivo
@@ -631,42 +631,42 @@
<message numerus="yes">
<location filename="../src/gui/folder.cpp" line="494"/>
<source>%1 and %n other file(s) have been removed.</source>
<translation><numerusform>%1 en %n ander bestand(en) zijn verwijderd.</numerusform><numerusform>%1 en %n andere bestand(en) zijn verwijderd.</numerusform></translation>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/gui/folder.cpp" line="501"/>
<source>%1 and %n other file(s) have been downloaded.</source>
<translation><numerusform>%1 en %n ander bestand(en) zijn gedownload.</numerusform><numerusform>%1 en %n andere bestand(en) zijn gedownload.</numerusform></translation>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/gui/folder.cpp" line="508"/>
<source>%1 and %n other file(s) have been updated.</source>
<translation><numerusform>%1 en %n ander bestand(en) zijn bijgewerkt.</numerusform><numerusform>%1 en %n andere bestand(en) zijn bijgewerkt.</numerusform></translation>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/gui/folder.cpp" line="515"/>
<source>%1 has been renamed to %2 and %n other file(s) have been renamed.</source>
<translation><numerusform>%1 is hernoemd naar %2 en %n ander bestand(en) is hernoemd.</numerusform><numerusform>%1 is hernoemd naar %2 en %n andere bestand(en) zijn hernoemd.</numerusform></translation>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/gui/folder.cpp" line="522"/>
<source>%1 has been moved to %2 and %n other file(s) have been moved.</source>
<translation><numerusform>%1 is verplaatst naar %2 en %n ander bestand(en) is verplaatst.</numerusform><numerusform>%1 is verplaatst naar %2 en %n andere bestand(en) zijn verplaatst.</numerusform></translation>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/gui/folder.cpp" line="529"/>
<source>%1 has and %n other file(s) have sync conflicts.</source>
<translation><numerusform>%1 en %n ander bestand(en) hebben een sync conflict.</numerusform><numerusform>%1 en %n andere bestand(en) hebben sync conflicten.</numerusform></translation>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message>
<location filename="../src/gui/folder.cpp" line="531"/>
<source>%1 has a sync conflict. Please check the conflict file!</source>
<translation>%1 heeft een sync conflict. Controleer het conflict bestand!</translation>
<translation type="unfinished"/>
</message>
<message numerus="yes">
<location filename="../src/gui/folder.cpp" line="536"/>
<source>%1 and %n other file(s) could not be synced due to errors. See the log for details.</source>
<translation><numerusform>%1 en %n ander bestand(en) konden niet worden gesynchroniseerd wegens fouten. Bekijk het log voor details.</numerusform><numerusform>%1 en %n andere bestand(en) konden niet worden gesynchroniseerd wegens fouten. Bekijk het log voor details.</numerusform></translation>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message>
<location filename="../src/gui/folder.cpp" line="538"/>
@@ -1954,7 +1954,7 @@ We adviseren deze site niet te gebruiken.</translation>
<message>
<location filename="../src/libsync/propagatedownload.cpp" line="552"/>
<source>The downloaded file is empty despite the server announced it should have been %1.</source>
<translation>Het gedownloade bestand is leeg, hoewel de server meldde dat het %1 zou moeten zijn.</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libsync/propagatedownload.cpp" line="694"/>
@@ -2386,7 +2386,7 @@ We adviseren deze site niet te gebruiken.</translation>
<message>
<location filename="../src/gui/sharedialog.cpp" line="113"/>
<source>Retrieving maximum possible sharing permissions from server...</source>
<translation>Maximum aantal mogelijke permissies van de server ophalen...</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="169"/>
@@ -2564,7 +2564,7 @@ We adviseren deze site niet te gebruiken.</translation>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Delen met %1</translation>
@@ -3639,7 +3639,7 @@ We adviseren deze site niet te gebruiken.</translation>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="37"/>
<source>Server version downloaded, copied changed local file into conflict file</source>
<translation>Serverversie gedownload, gewijzigde lokale bestand gekopieerd in conflictbestand</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="39"/>
+13 -13
Ver Arquivo
@@ -455,7 +455,7 @@
<message>
<location filename="../src/gui/activitywidget.cpp" line="365"/>
<source>%1 Notifications - Action Required</source>
<translation>%1 Powiadomień - Wymagana akcja</translation>
<translation type="unfinished"/>
</message>
</context>
<context>
@@ -524,7 +524,7 @@
<message>
<location filename="../src/libsync/owncloudpropagator.cpp" line="772"/>
<source>Error writing metadata to the database</source>
<translation>Błąd podczas zapisu metadanych do bazy</translation>
<translation type="unfinished"/>
</message>
</context>
<context>
@@ -1920,7 +1920,7 @@ Niezalecane jest jego użycie.</translation>
<message>
<location filename="../src/libsync/owncloudpropagator.cpp" line="712"/>
<source>Error writing metadata to the database</source>
<translation>Błąd podczas zapisu metadanych do bazy</translation>
<translation type="unfinished"/>
</message>
</context>
<context>
@@ -1938,17 +1938,17 @@ Niezalecane jest jego użycie.</translation>
<message>
<location filename="../src/libsync/propagatedownload.cpp" line="381"/>
<source>Free space on disk is less than %1</source>
<translation>Wolne miejsce na dysku jest mniejsze niż %1</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libsync/propagatedownload.cpp" line="496"/>
<source>File was deleted from server</source>
<translation>Plik został usunięty z serwera</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libsync/propagatedownload.cpp" line="545"/>
<source>The file could not be downloaded completely.</source>
<translation>Ten plik nie mógł być całkowicie pobrany.</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libsync/propagatedownload.cpp" line="552"/>
@@ -1968,7 +1968,7 @@ Niezalecane jest jego użycie.</translation>
<message>
<location filename="../src/libsync/propagatedownload.cpp" line="792"/>
<source>Error writing metadata to the database</source>
<translation>Błąd podczas zapisu metadanych do bazy</translation>
<translation type="unfinished"/>
</message>
</context>
<context>
@@ -2009,7 +2009,7 @@ Niezalecane jest jego użycie.</translation>
<message>
<location filename="../src/libsync/propagatorjobs.cpp" line="181"/>
<source>Error writing metadata to the database</source>
<translation>Błąd podczas zapisu metadanych do bazy</translation>
<translation type="unfinished"/>
</message>
</context>
<context>
@@ -2040,7 +2040,7 @@ Niezalecane jest jego użycie.</translation>
<message>
<location filename="../src/libsync/propagatorjobs.cpp" line="245"/>
<source>Error writing metadata to the database</source>
<translation>Błąd podczas zapisu metadanych do bazy</translation>
<translation type="unfinished"/>
</message>
</context>
<context>
@@ -2066,7 +2066,7 @@ Niezalecane jest jego użycie.</translation>
<message>
<location filename="../src/libsync/propagateremotemkdir.cpp" line="148"/>
<source>Error writing metadata to the database</source>
<translation>Błąd podczas zapisu metadanych do bazy</translation>
<translation type="unfinished"/>
</message>
</context>
<context>
@@ -2094,7 +2094,7 @@ Niezalecane jest jego użycie.</translation>
<message>
<location filename="../src/libsync/propagateremotemove.cpp" line="175"/>
<source>Error writing metadata to the database</source>
<translation>Błąd podczas zapisu metadanych do bazy</translation>
<translation type="unfinished"/>
</message>
</context>
<context>
@@ -2143,7 +2143,7 @@ Niezalecane jest jego użycie.</translation>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="782"/>
<source>Error writing metadata to the database</source>
<translation>Błąd podczas zapisu metadanych do bazy</translation>
<translation type="unfinished"/>
</message>
</context>
<context>
@@ -2563,7 +2563,7 @@ Niezalecane jest jego użycie.</translation>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Współdzielone z %1</translation>
+1 -1
Ver Arquivo
@@ -2562,7 +2562,7 @@ It is not advisable to use it.</source>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Partilhar com %1</translation>
+1 -1
Ver Arquivo
@@ -2563,7 +2563,7 @@ It is not advisable to use it.</source>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Compartilhar com %1</translation>
+1 -1
Ver Arquivo
@@ -2562,7 +2562,7 @@ It is not advisable to use it.</source>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Поделиться с %1</translation>
+1 -1
Ver Arquivo
@@ -2555,7 +2555,7 @@ Nie je vhodné ju používať.</translation>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Zdieľať s %1</translation>
+1 -1
Ver Arquivo
@@ -2560,7 +2560,7 @@ Uporaba ni priporočljiva.</translation>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Omogoči souporabo z %1</translation>
+1 -1
Ver Arquivo
@@ -2556,7 +2556,7 @@ It is not advisable to use it.</source>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Подели са %1</translation>
+1 -1
Ver Arquivo
@@ -2563,7 +2563,7 @@ Det är inte lämpligt använda den.</translation>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Dela med %1</translation>
+1 -1
Ver Arquivo
@@ -2561,7 +2561,7 @@ It is not advisable to use it.</source>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation> %1</translation>
+1 -1
Ver Arquivo
@@ -2561,7 +2561,7 @@ Kullanmanız önerilmez.</translation>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>%1 ile paylaş</translation>
+1 -1
Ver Arquivo
@@ -2551,7 +2551,7 @@ It is not advisable to use it.</source>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation>Поділитися з %1</translation>
+1 -1
Ver Arquivo
@@ -2560,7 +2560,7 @@ It is not advisable to use it.</source>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation> %1</translation>
+1 -1
Ver Arquivo
@@ -2561,7 +2561,7 @@ It is not advisable to use it.</source>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<location filename="../src/gui/socketapi.cpp" line="441"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation> %1 </translation>