Once upon a time, the SyncEngine was instantiated once per sync. But now that
the SyncEngine is kept between sync, we need to reset all these variable between
syncs.
Reverts commit 622017adcf
Could be the cause of #5092 and the cost is higher than the benefit if this is the case.
A network request taking more than 30 seconds isn't something unlikely in this world
and shouldn't be a good reason to abort. We should try to untangle the threads
dependencies to properly fix this if possible instead.
It opens a window and connects to a cipher test
page, showing the output from there, that helps for debugging.
The window is enabled by setting the environment variable
OWNCLOUD_SHIBBOLETH_DEBUG
While loading the account, only override the server url if Theme::forceConfigAuthType
is set. This restore the behavior from the client 2.1 for theme that did not
use Theme::forceConfigAuthType.
Issue: owncloud/enterprise#1418
This was removed in 0194ebb222
because it breaks on Linux. However, it looks like it is correct
for Windows. In the meantime the surrounding ifdef has changed
from !Q_OS_MAC to Q_OS_WIN, so reverting it makes sense.
Since the SyncEngine now quits and waits for the discovery thread,
the main thread can enter a deadlock where the discovery thread waits
for its directory result.
Add a 2 seconds timer to the discovery thread wait condition
to limit the deadlock time.
This allows creating a new build simply by hitting F7 in visual studio
and then committing the changed files in the binary submodules without
having to know which files to move where.
Since this isn't yet built together with the rest, we can't reliably
use the client version without having to rebuilt the extension manually
on each release. But it would still be nice to be able to tell if a user
has the right version or not loaded, so instead just tag each update of
the DLLs with a separate release version.
This means that every time we update those binaries we'll have to manually
increment the number in the header, but worst case we'll forget from time
to time but we'll be able to know if we didn't, and know if we can rely on
the number or not.
This disables the workaround 487e1fdca5ee04fc98c1ed77898df70d740967c8
for servers that are new enough to support fine grained permissions
on federated shares.
The consequence is that the 'reshare' permission is now granted by
default and that users can edit permissions on the usual fine-grained
level again.
The way the client deals with servers <9.1 is unchanged.
Use a QMap to avoid using a full hashtable for only a few entries, and
clear the QMap once we're done with the measuring. This saves a few
hundred bytes per job during propagation that would otherwise only be
freed at the end of the sync.
During propagation, we create a line for each file, taking memory, but
we delete all lines passed 2000 right at the beginning of the next sync.
Since the user has little chances of being able to read past those 2000
lines in the log, we might as well keep it capped at 2000 also during
propagation to prevent it from eating memory.
The SyncRunFileLog owned by the Folder must be destroyed after the
SyncEngine since the SyncEngine will abort during destruction, resulting
in all jobs being aborted.
It's possible that this crash only happens with a debug build.
The FolderWatcher inserts files to be marked as SYNC and we
currently assume that all file statuses will be updated by the
following sync. It's however possible that the FolderWatcher
notify us of a change that csync won't consider necessary to
propagate, in which case a new status wouldn't be pushed and
the file manager would continue showing this file as syncing.
Re-push the file status when emptying the dirty files list
before propagating to avoid this issue, most likely the OK
status.
No need to allocate (and initialize to 0) a 10 MiB buffer for each files, even
when most files are much smaller than that.
So make sure the buffer that we allocate is not bigger than the file size.
And Also 10 MiB is a bit big for a buffer. 500 KiB should be more than enough.
(Too big allocations can cause problem because of memory fragmentation and such)
We first need to set the abort flag to csync and then aborting the discovery
job, otherwise, the discovery thread could start a new job in the mean time.
We also need to make sure that the thread has existed before we destroy the
exclude list.
Events from the crash reporter suggest that the QNAM and its
child replies might get deleted before returning from this method
and the only possible cause we can see is that the inner event
loop has something to do with it.
Try keeping a ref on the QNAM while in this method to make sure
that it won't get deleted by the inner event loop.
Same fix as in commit 60c101d9
From the crash reporter:
Crash
EXCEPTION_ACCESS_VIOLATION_READ at 0x4
qnetworkreply.cpp in QNetworkReply::request at line 476
propagateupload.cpp in OCC::PUTFileJob::slotTimeout at line 100
moc_abstractnetworkjob.cpp in OCC::AbstractNetworkJob::qt_static_metacall at line 98
qobject.cpp in QMetaObject::activate at line 3716
moc_qtimer.cpp in QTimer::timeout at line 192
qtimer.cpp in QTimer::timerEvent at line 247
qobject.cpp in QObject::event at line 1267
qapplication.cpp in QApplicationPrivate::notify_helper at line 3722
qapplication.cpp in QApplication::notify at line 3505
qcoreapplication.cpp in QCoreApplication::notifyInternal at line 932
FolderDefinition::save and load escapes the alias. We also need to escape
it when we remove it.
New folder can't be created with alias that needs escaping, but old folder
from old config may still exist, and we must allow user to delete them.
For issue #4927:
On Windows 10, we get a notification after the sync is finished for file that were
just downloaded. The guard we have against our "own changes" are only working when
the sync is running and the OwncloudPropagator still alive.
Setting the Environment variable only for owncloud makes in inconsistant with
other Qt application running at the same time.
The users can still set it themself for the whole desktop if they wish.
Addresses #4840
Previously rejecting any kind of certificate meant that the user
was never asked again, even if the certificate changed.
Now we keep track of which certificates were rejected and ask again
if the ones mentioned in the ssl errors change.
mitmproxy is excellent for testing this.
* Progress: Don't count dirs without propagation jobs #4856
These directory SyncFileItems are necessary for bookkeeping
but should not influence the progress display at all.
* Progress: Skip ignored files #4856
The problem in this case is if we rename the file "xxx" to "invalid\file".
The rename will fail because the new filename constains a slash, and it
will be blacklisted.
But then if the user re-rename the file to "valid_name", then we should
invalidate the blacklist entry and retry to upload. But we did not do
that because renaming don't change the mtime and we did not store the
rename target in the database
IL issue 558
This fixes an issue in which too many jobs are started un parallel
while uploading many files, which could cause too much memory usage as the
chunks are stored in memory.
Probably the fix for #4611
Issue #4855
A typo in the context string made the translation lookup fail.
But also the %Ln was not recognized as a plural form by transifex, so only
the singular was translated
The assert was there to make sure that this case wasn't happening
to eventually be properly tested. Remove the assert for now but this
codepath should eventually be unit tested using this specific situation.
Since the windows implementation first does cache lookups using the
path string, directories need to be passed identically as through
RETRIEVE_FILE_STATUS.
Change the convention to never have a trailing slash for directories
in the protocol. This allows the convention to be applied without
having to access the disk (since we'd need to know if the path is
represented by a directory) and also matches the convention of the
rest of the sync engine. Individual file manager plugins are then
responsible of handling pushed paths as not ending with a trailing
slash.
This also:
- Moves the trailing slash removal logic from the SyncFileStatusTracker
to the SocketApi class
- Remove the unneeded QString::normalized call in fileStatus, since
this should already be done by the FolderWatcher and plugins
Since the statuses are cached and that we can't invalidate the cache,
sending NOP would need to be overwritten by the default OK status
once the client successfully connected. But instead of remembering
which files we NOPed, rather wait until we are ready to sync before
sending the REGISTER_PATH message to the socket API client. It will
also prevent the client from sending unnecessary RETRIEVE_FILE_STATUS
requests.
Also remove AccountState::canSync, since it does the same as
isConnected and syncing is not an account responsibility.
Go through fileStatus like other cases to make sure that all use
cases go through the same code path. This also makes sure to use
lookupProblem which will use lower_bound which is more efficient
for larger sets of sync problems.
This also fixes the issue with lookupProblem that prevented it to
properly match an empty pathToMatch, caused by the fact that the
problem map contains relative paths not starting with a slash.
Make sure that we push the new status when the status of the SyncEngine
changed. SyncEngine::started comes a bit late, only when the propagation
starts, although it's better in this case since child folders will
only switch to Sync in aboutToPropagate.
Also fix an issue with SyncEngine::findSyncItem when using an empty
fileName; this would match and return the wrong item, even though
not currently happening with the code since fileStatus won't call
it with an empty fileName anymore.
As before, we rely on metadata-update SyncFileItem entries for parent
directories to notify us that a directory contains files to propagate,
and to know when all children were propagated through its itemCompleted
signal.
Those metadata SyncFileItems however have a None direction and we need
to add a explicit directory check to show them as Sync.
This fix also handles new files as well as existing ones, so no need
to keep a separate logic for new files.
* Fix nautilus and nemo plugin branding strings.
Fix for owncloud/enterprise#1314
* nautilus plugin: Add a comment why the line needs to stay unchanged.
propagatedownload.cpp:712:35: error: 'seenLockedFile' is a protected member of 'OCC::OwncloudPropagator'
Signals are protected in Qt4 but public in Qt5, mark the class accessing it
as friend when compiling with Qt4
Do the visual stuff from designer.
The previous code that was ment to change the color in red did not work
and changed it to gray instead.
Also I don't see why there should be a frame.
Issue #4773
When a conflict-rename or a temporary-rename fails, notify the
LockWatcher. It'll regularly check whether the file has become
accesible again. When it has, another sync is triggered.
owncloud/enterprise#1288
If the downloaded file is empty but the PROPFIND previously announced it
should not have been empty, this might mean the file was somehow corrupted
because of a bug on the server and that we should therefore not accept
the file.
Normaly we accept a change between the actual size of the file and what we
got during discovery because the file might have been updated to a new version
inbetween. But after this patch we won't accept the file if it was replaced
by an empty file.
Will help for issue #4583
Also requested by IL for issue 548
This uses the file watcher to keep track of files that were modified
in order to assign them the blue icon.
This is transient state that's not persisted across restarts.
After discussion and studying docs again we agreed that
the parameter is not neccessary here as it only affects
the process that opens the handle. And we do not want to
do async stuff.
Before commit 1a51b6718a, the wizard was
making sure folder had an alias but this is no longer the case.
So generate still an unique alias.
Alias is not used in the UI any longer, it's just use for internal purposes.
For issue #4737
As discussed on issue ##4460
Having the quote to be queried on subfolder is wrong in the generic case,
so add a branding option to configure it.
This partially reverts commit ff4cdc3161
In the before-propagate slot, new files that wait to be
pushed to the server are remembered in the _syncProblems
map. That way, the parents show a sync icon properly as
asked for in #4682.
After the item has been transfered properly, the item is
removed from the map again because success is the default.
Added in previous commit from pull request #4663
As discussed, we do not need this option so no need to introduce
a new dependency on the config file in the sync engine
If an app modifies the expiration date (for example the password policy
app) then on more recent versions of the server we will get the share
object back REST style. We should use that info!
Fixes#4409
* Add checksums/supportedTypes and checksums/preferredUploadType
capabilities. The default is that no checksum types are supported.
* Remove the transmissionChecksum config option. Servers must now
use the capabilities to indicate that they are fine with the
client sending checksums.
Note: This intentionally breaks brandings that overrode
Theme::transmissionChecksum. The override must be removed and the
server's capabilities must be adjusted to include the new values.
I don't see a reason we should not allow this. We detect
a "failed stat reply" in other ways. Maybe this was a legacy
csync decision somewhow that is not valid anymore?
The reason is that updateFolderView is invoked by the
emitted signal folderSyncStateChange() anyway.
This will reduce the traffic over the SocketAPI nicely,
maybe this was the reason why it was slower than before.
There were two issues:
* With the refactoring of how Folder and SyncEngine relate, the
ignore_hidden_files flag on the CSync context was reset after
each sync run and not updated from the configuration again.
* The folder watcher failed to enumerate hidden folders and thus
didn't watch for changes inside them. (linux only)
SQLITE_DONE is the indicator for not more query results, which is a legal
thing and not an error condition.
Also, check _getFileRecordQuery for null pointer, as close() wipes it.
The problem with QSet is that the QDateTime was part of
the hash, but that does not make sens as it should be unique
per widget and not per <date, widget>
Instead make it a QHash so there is only one entry per widget.
The idea is that the next call to any database operation will try to
reopen the database through the checkConnect() method. So even if there
was a disconnect trom the db file, this will reestablish the connection.
Imagine tgus scenario on a read only share that you move file from
one location to a new directory in the read only share.
Creating the read only directory fails for permission error.
But we should also restore the files that have been moved.
IL issue 542
Remove all configure_files:
- Move all tests to cpp files
- Use the QTEST_MAIN macro instead of a generated main.cpp
- Include test*.moc in the cpp to let CMAKE_AUTOMOC call moc
- Pass info through add_definitions instead of generating oc_bin.h with them
This makes sure that build errors points to the original test source
file instead of the generated one in the build directory to be able to
jump and fix errors directly from the IDE's error pane.
Bring back the hardcoded status logic for excluded files.
Since the activity log doesn't even mention those files on purpose,
we can't rely on the SyncEngine to notify us about the status of those files.
Looking up a/aa while an error is present in a/aab/aaba would return
a warning status since a/aa is a substring of a/aab.
Fix the issue by checking if the following character is a slash.
This prevents having to define a Problem structure with dubious
operator overloads to accomplish the same.
Also use std::map::lower_bound to quickly iterate over the
list of problems.
* Remove duplicate remote path
* Use thin progress bar
* Move bandwidth and file info to tooltip
* Shorten overall progress message
This also fixes#4562 by making the layout not dependent on the
width of the displayed text.
This also remove all smartness from the SocketApi about the status
of a file and solely use info from the current and last sync.
This simplifies the logic a lot and prevents any discrepancy between
the status shown in the activity log and the one displayed on the
overlay icon of a file.
The main benefit of the additional simplicity is that we are able
to push all new status of a file reliably (including warnings for
parent folders) to properly update the icon on overlay implementations
that don't allow us invalidating the status cache, like on OS X.
Both errors and warning from the last sync are now kept in a set,
which is used to also affect parent folders of an error.
To make sure that errors don't become warning icons on a second
sync, SyncFileItem::_hasBlacklistEntry is also interpreted as an error.
This also renames StatusIgnore to StatusWarning to match this semantic.
SyncEngine::aboutToPropagate is used in favor of SyncEngine::syncItemDiscovered
since the latter is emitted before file permission warnings are set on the
SyncFileItem. SyncEngine::finished is not used since we have all the
needed information in SyncEngine::itemCompleted.
SyncFileStatus' purpose is to track overlay icon status.
Instead of putting comments and default: clauses in switch
on both sides about unused enums, use different enums.
This also remove STATUS_NEW which is the equivalent of
STATUS_SYNC in all shell extension implementations, and
remove STATUS_UPDATED and STATUS_STAT_ERROR which have
the same semantic as STATUS_UPTODATE and STATUS__ERROR.
This currently is no-op code since the socket API isn't notified
that the tainted folder list changed, and the result is the same
since a sync will be triggered within the next 5 seconds and the
modified folder will be shown as SYNC at that point anyway.
Removing the dependency to the file watcher allows moving the
status estimation logic to libsync.
This will help moving the SyncEngine construction in the constructor
and allow moving functionalities from Folder to SyncEngine or its
delegated objects.
If the user tries to install an older version of a branded client
with shell extensions, and also install the 2.1 ownCloud client
side-by-side, both shell extensions DLLs will be registered and might
lead to both DLLs versions being loaded by exlorer, causing a system
crash.
Since we don't support both branded and non-branded shell extensions
to work at the same time, at least make sure to unregister any legacy
CLSID that could cause explorer to load the previous version DLL.
The policy that was said is that if a notification has no action, the
client can and should display a close-button. This patch does it.
In additon to that, the client needs a blacklist of closed notifcations
otherwise they would re-appear next time the server notifications are
fetched again.
Also, changed the cleanup of not-longer-used widgets to be more robust.
If a notification is not longer in the list that comes from the
server, the notification is removed.
That is mainly for the notifications that are created by the
announcement application
Since the quota is a per-folder value, this will make the displayed data
more useful when a single sync folder is configured.
Of course each subfolder could have a different quota again.
The date we receive from the server is an ISO8601 datetime that
includes the offset from UTC. Qt does correctly parse this
information and creates the appropriate QDateTime object.
Calling setTimeSpec(UTC) will force the timezone offset to 0 and
thereby change the referenced point in time to an incorrect one.
Soldiering on with a broken or incomplete response could lead to
incorrect sync behavior.
Since discovery uses LsCol jobs which already handle errors
correctly, this should not have a significant impact.
the size on the server might be different from the size on the client
with certain backend so it should be ignored.
(cherry picked from commit 9222db6df9b19a21e1bea5a238d745d96a6385e3)
In SQLite bindings are not cleared by sqlite3_reset() calls, so
skipping a sqlite3_bind call to create a NULL value doesn't work,
instead the previous value will be written.
To fix this, I clear all bindings in SqlQuery::reset and make sure
to explicitly bind NULL when desired in SqlQuery::bind.
To make sure there's no confusion about SqlQuery::reset and
sqlite3_reset, I rename our method to reset_and_clear_bindings().
(cherry picked from commit 7bd4f95b8c)
In SQLite bindings are not cleared by sqlite3_reset() calls, so
skipping a sqlite3_bind call to create a NULL value doesn't work,
instead the previous value will be written.
To fix this, I clear all bindings in SqlQuery::reset and make sure
to explicitly bind NULL when desired in SqlQuery::bind.
To make sure there's no confusion about SqlQuery::reset and
sqlite3_reset, I rename our method to reset_and_clear_bindings().
The isValid check should be used everywhere the capabilities
are used as the loading of the capabilities is happening
in parallel of the startup, so it is not guaranteed to be
available always.
As interaction is required, the notifications are displayed in a
separate widget above the server activity list.
Note that design and also where we display the notifications can
still be discussed and changed.
If the ownCloud server does not have the activity app enabled,
it returns 999 as status code. If all the configured accounts
do that, this code hides the entire tab with the server
activities.
This is supposed to fix#4533
Helps with small file sync #331
When I benchmarked this, it went up to 6 parallelism and
was about 1/3 faster than the previous fixed 3 parallelism.
Doing more than 6 is dangerous because QNAM limits to 6 TCP
connections and also the server might become a bottleneck.
Should also help for #4081
Previously one could accidentally call Folder::setSyncPaused() and miss
some expected side effects. Before, the correct call was to FolderMan::
slotSetFolderPaused(). Now the setter on Folder has the expected effect.
This will be useful if we ever want to store account-level gui state.
I built this originally because I thought a paused account would be
this kind of state.
The creation doesn't need to be separated from the SyncEngine anymore.
This allows the SyncEngine to be created in fewer steps if we want to
use it in tests.
This moves most of the direct csync code from Folder into the SyncEngine.
The exclude file logic for the context has been wrapped using the
existing ExcludedFiles class as well.
Given that we control all call sites, the only way that this can fail is during
OOM. Also remove the code in csync itself to make sure that it's obvious that
any new error case wouldn't be handled by call sites.
As discussed with Klaas, this seems to be a better compromise.
10MB * 3 prarralel jobs = 30MB in memory, and to retry in case of
disconnection. Which is still reasonable. And might make the upload
almost twice as fast on fast network where the amount of chunk is the
bottleneck (because of more server processing)
Relates to issue #4354
If the PROPFIND return an invalid code (like 200) then we would
not recieve the error signal and we would never sync again.
Found while investigating https://github.com/owncloud/enterprise/issues/1068
The ".sys.admin#recall#" is the recall file and should not be ignored
even if hidden.
The remote discovery do not need to detect hidden files because it
is already detected by csync in all cases. So this avoid code duplication
This script creates the Nemo plugin out of the Nautilus plugin.
Both are source compatible, but need to include the right modules
depending on the name of the file manager.
The script is called by cmake.
ln has a special syntax to create the symlink inside the last path if it's
a directory (or a symlink to a directory).
Also pass --strict to codesign --verify to catch this kind of error.
Users have complained that they don't see the notification when it is
shown and are not aware that their files aren't syncing.
Remove the non-interactive credentials fetch logic and add make sure
that the shibboleth popup will flash in the taskbar instead.
This will still not allow the popup to show in front in all cases,
but this is a compromise that we have to chose.
This reverts commit dcb687929f.
Issue https://github.com/owncloud/enterprise/issues/990
This is the fix for issue #4370
Step to reproduce the bug:
1) have lots of files in directory "dir1"
2) do mkdir dir2 && mv dir1/* dir2
3) DURING the sync (which takes time because of the many moves) do mkdir dir3 && mv dir2/* dir3/
4) observe that files are PUT in the next sync
The problem is that SyncJournalFileRecord::SyncJournalFileRecord will fail to
get the inode after the forst move because the files are already moved on the
filesystem. Normaly it should use the inode from the discovery phase in that
case but that is not working because it comes from the remote node in case of
moves, so the code in SyncEngine::treewalkFile would not set the inode.
Test in https://github.com/owncloud/smashbox/pull/143
Added a new "chunkSize" entry in the General group of the owncloud.cfg
which can be set to the size, in bytes, of the chunks.
This allow user with hude bandwidth to select more optimal chunk size
Issue #4354
QFontMetrics::boundingRect doesn't return the right size for this
font size for some reason, while it works well if we remove the
smaller point size adjustment for the progress font.
To avoid having to debug the font system in Qt just increase the
existing +2px adjustment to +5px so that it renders fine.
Server older than 8.1 cannot cope with invalid char in the filename
so we must not send them from the client. We were already checking
for new files, but not for renames or new directories.
https://github.com/owncloud/enterprise/issues/1009
The height adjustment done to place the button in the middle of the
non-error area was only done for rendering. Make sure that we do the
same adjustment when mapping click events as well.
Also replace some wrong occurences of aliasMargin*2 for margin.
Previously we would fail to start if the directory was not existing.
This was working for relative directory, but it should also work for
absolute ones
https://github.com/owncloud/enterprise/issues/970
The bug seems to be in Windows when it upscales an smaller icon for
HiDPI displays. It works fine if we provide a 256x256 size in the
ico files.
Use the new square icons also used on OS X that removes the share badge
and instead has a share icon only for the OK state. This means that we
can also remove 3 icons and release 3 slots in the registry for
overlay icons (only the first few are actually loaded by explorer).
This also adds a script that uses ImageMagick to convert our SVG icons
to Windows ico files. Since ImageMagick seems to have issue doing
proper antialiasing with pixels on the edge of icons, this also
slightly scale the icons to leave 2px on each edge, out of its
logical 128px width.
Use QT_DEVICE_PIXEL_RATIO=auto on Qt<=5.5 to enable automatic
scale factor settings on Windows. Also move the existing
Qt::AA_EnableHighDpiScaling logic to use the equivalent
QT_AUTO_SCREEN_SCALE_FACTOR=1 environment variable just to
keep the 5.5 and >=5.6 code at the same place.
* Ensure every time a file becomes a directory or the other way around
the item is flagged as INSTRUCTION_TYPE_CHANGE.
* Delete the badly-typed entity if necessary in the propagation jobs.
QPainter::drawText uses the top of the font for the y position of its
rect argument, but uses the baseline when using a point argument.
Also use the margin variable that matches the font used instead of
the aliasMargin and make sure that the margin is only added between
the box and the text once.
The Qt HTTP thread calls authenticationRequired (indirectly) using a
BlockingQueuedConnection. So when we call invalidateToken from slot
connected to this signal and end up calling QNAM::clearAccessCache which
waits on the thread for 5 seconds
Backtraces:
Qt HTTP thread:
#0 0x00007ffff20c707f in pthread_cond_wait@@GLIBC_2.3.2 ()
#1 0x00007ffff43f0c0b in QWaitConditionPrivate::wait
#2 QWaitCondition::wait
#3 0x00007ffff43ea06b in QSemaphore::acquire
#4 0x00007ffff45dcf6f in QMetaObject::activate
[...]
#9 0x00007ffff45dd607 in QMetaObject::activate
#10 0x00007ffff4edbaf7 in QHttpNetworkReply::authenticationRequired
#11 0x00007ffff4e0b2b4 in QHttpNetworkConnectionPrivate::handleAuthenticateChallenge
#12 0x00007ffff4e10753 in QHttpNetworkConnectionChannel::handleStatus
#13 0x00007ffff4e11cc9 in QHttpNetworkConnectionChannel::allDone
#14 0x00007ffff4e14605 in QHttpProtocolHandler::_q_receiveReply
Main Thread:
#0 0x00007ffff20c7428 in pthread_cond_timedwait@@GLIBC_2.3.2 ()
#1 0x00007ffff43f0b56 in QWaitConditionPrivate::wait_relative (time=5000, this=0x136c580)
#2 QWaitConditionPrivate::wait (time=5000, this=0x136c580)
#3 QWaitCondition::wait (this=this@entry=0x136c788, mutex=mutex@entry=0x136c760, time=time@entry=5000)
#4 0x00007ffff43efa6e in QThread::wait (this=<optimized out>, time=time@entry=5000)
#5 0x00007ffff4e1edd3 in QNetworkAccessManagerPrivate::clearCache
#6 0x00007ffff7b6fb03 in OCC::HttpCredentials::invalidateToken()
#7 0x000000000057adb4 in OCC::AccountState::slotInvalidCredentials()
#8 0x000000000057ac76 in OCC::AccountState::slotConnectionValidatorResult(OCC::ConnectionValidator::Status, QStringList const&) ()
#9 0x00000000005ab45c in OCC::AccountState::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)
#10 0x00007ffff45dcd30 in QMetaObject::activate
#11 0x00007ffff7b78671 in OCC::ConnectionValidator::connectionResult(OCC::ConnectionValidator::Status, QStringList) ()
#12 0x00007ffff7ae2514 in OCC::ConnectionValidator::reportResult(OCC::ConnectionValidator::Status) ()
#13 0x00007ffff7ae39b7 in OCC::ConnectionValidator::slotAuthFailed(QNetworkReply*) ()
#14 0x00007ffff7b784a9 in OCC::ConnectionValidator::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) ()
#15 0x00007ffff45dcd30 in QMetaObject::activate
#16 0x00007ffff7b766dc in OCC::AbstractNetworkJob::networkError(QNetworkReply*)
#17 0x00007ffff7af9f6e in OCC::AbstractNetworkJob::slotFinished()
#18 0x00007ffff7b7654d in OCC::AbstractNetworkJob::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) ()
#20 0x00007ffff45dd607 in QMetaObject::activate
#21 0x00007ffff4edd143 in QNetworkReply::finished
#22 0x00007ffff4e3fec7 in QNetworkReplyHttpImplPrivate::finished
#23 0x00007ffff4e41818 in QNetworkReplyHttpImpl::close
#24 0x00007ffff7b7047b in OCC::HttpCredentials::slotAuthentication(QNetworkReply*, QAuthenticator*) ()
#25 0x00007ffff7b79092 in OCC::HttpCredentials::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) ()
#27 0x00007ffff45dd607 in QMetaObject::activate
#28 0x00007ffff4e1d6fb in QNetworkAccessManager::authenticationRequired
#29 0x00007ffff4e1ea07 in QNetworkAccessManagerPrivate::authenticationRequired
#30 0x00007ffff4e3c784 in QNetworkReplyHttpImplPrivate::httpAuthenticationRequired
Another case of Main Thread:
#5 0x00007ffff4e1edd3 in QNetworkAccessManagerPrivate::clearCache
#6 0x00007ffff7b6fb03 in OCC::HttpCredentials::invalidateToken()
#7 0x000000000057b1e4 in OCC::AccountState::slotInvalidCredentials() ()
#8 0x00000000005abb8a in OCC::AccountState::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) ()
#9 0x00007ffff45dcd30 in QMetaObject::activate
#10 0x00007ffff7b76ed5 in OCC::Account::invalidCredentials() ()
#11 0x00007ffff7ad55f5 in OCC::Account::handleInvalidCredentials()
#12 0x00007ffff7afa69a in OCC::AbstractNetworkJob::slotFinished()
#13 0x00007ffff7b7654d in OCC::AbstractNetworkJob::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) ()
#15 0x00007ffff45dd607 in QMetaObject::activate
#16 0x00007ffff4edd143 in QNetworkReply::finished
#17 0x00007ffff4e3fec7 in QNetworkReplyHttpImplPrivate::finished
#18 0x00007ffff4e41818 in QNetworkReplyHttpImpl::close
#19 0x00007ffff7b7047b in OCC::HttpCredentials::slotAuthentication(QNetworkReply*, QAuthenticator*) ()
#20 0x00007ffff7b79092 in OCC::HttpCredentials::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) ()
#22 0x00007ffff45dd607 in QMetaObject::activate
#23 0x00007ffff4e1d6fb in QNetworkAccessManager::authenticationRequired
Now that we have a separate list for files that could not be synced,
we can make sure that it only shows entries for files that are still
not in sync with the server. This allows the user to treat this list
as action items in order to get everything synced, including the
blacklist.
Simply remove the keep-errors logic that was used when the lists were
merged to achieve this result.
This has been fixed in the meanwhile, but we are still shipping
with Qt 5.4. Also, some Linux Distros will still have older Qt
versions.
Addresses issue #4301
The error status of children should only be used for the etag logic.
The SocketApi uses a path matching system to do this and the UI should
report errors only for individual involved files/directories.
This use the previous code by resetting the progress to hide
the progress back and then return errors in the FolderErrorMsg
data role of the folder model.
This also remove the unused FolderRemotePath role, remove FolderStatus
in favor of invalidating all roles in dataChanged and make sure
that the SyncRunning role is transfered properly from the SyncResult
to show the warning icon during sync.
Since the presence of any path in SyncEngine::_syncedItems
would translate in a SYNC status, platforms that don't refresh
all their status cache after an UPDATE_VIEW message like OS X
or Windows would keep displaying that status even after all
files are successfully synchronized.
- Read SyncFileItem::_status to determine the status to display mid-sync
- Match moved paths also to _renameTarget since this might be the
path to match
- Make sure that PropagateDirectory jobs also set SyncFileItem::_status
properly
If all the files bring us to past timestamp, it is possibly a backup
restoration in the server. In which case we want don't want to just
overwrite newer files with the older ones.
Issue #2325
After c3cf6aef7d the invokeMethod calls
should be adjusted to pass the new method arguments.
The result was currently a passing sync with this error message on
the console:
QMetaObject::invokeMethod: No such method OCC::Folder::slotSyncFinished()
The socket api uses native folder separator. We need to use QDir::cleanPath
for anything else so we only work with '/' everywhere else in the code
This fixes the sharing dialog on window.
Issue #4311
Since owncloud 2.1, csync_vio_local_stat was optimized because readdir
would already fetch most of the info. This works for the discovery,
but not later. And we used this function later for symliks and co.
So this fixes the .lnk on windows
Issue #4300
This conflicts with the KDE_INSTALL_PLUGINDIR and prevent the
dolphin plugin to be installed at the right location.
Since csync no longer have plugin, this can be removed
This secret key was used to wipe the database. In the past this was
usefull because of many bugs, but now this is not usefull anymore.
And cause trouble because it also erase the selective sync list.
Issue #4182
It's just a feature that was not there in 2.0
It means that removed folder stay on the undecided list if it is removed
from the server until the user press apply in the selective sync widget.
Not a very bad bug anyway.
... by replacing CONFIG by NO_MODULE option in find package
From the manual: "The CONFIG option may be used to skip Module mode
explicitly and switch to Config mode. It is synonymous to using
NO_MODULE."
As discusses with jan.
* Detailed permissions displayed in qtoolboxmenu
* Made share rows slightly smaller
Bug fix:
* Do not show delete permissions for file shares
Before the selective sync status text and apply/cancel buttons
were shown as soon as any folder was expanded. This changes it
to only show when the model is dirty (or a big folder confirmation
is needed).
This is nice because we auto-open the folder list sometimes
and having the apply/cancel buttons visible makes users think a
decision is needed.
* Compute the content checksum (in addition to the optional
transmission checksum) during upload (.eml files only)
* Add hook to compute and compare the checksum in csync_update
* Add content checksum to database, remove transmission checksum
The signal jsonReceived() now not only delivers the raw json string, but
also the status code that came as OCS reply.
Also, fixed a typo in the signals name (recieved => received).
Fix the warning:
QLayout: Attempting to add QLayout "" to OCC::ActivitySettings "", which already has a layout
It was caused because one layout was created with the wrong parent
A 403 is a reply code sent from the file firewall to indicate that
this directory is forbidden to use for the user.
The patch handles it by setting the state to IGNORED.
This addresses #3490
This patch lets a successful etag job check mark a timestamp.
If next time a connection check is requested, it is checked if
the last ETag happened within the last 30 seconds and if so the
connection check can be checked.
This way we avoid half of the PROPFINDs if all goes well.
- Changed sequence of menu items
- lowercased entries
- removed the "Account" from entries, its in the toolbox button already
- added a little space between toolbox button label and the rectangle.
Note that the activity has also entries of files that are not synced so
that not every activity entry has to have a local pendant.
Also, one activity entry can reference multiple files, so only the first
one is shown.
The problem was that Share could be deleted *before*
the OcsShareJob itself finished. Since Share was the
parent of the network job, its object would be deleted
too early.
In general, it's unnecessary to assign parents to the OcsJobs
because they delete themselves when finished.
If a folder was paused while being the next item in the scheduling
queue, the whole scheduling could get stuck.
This also fixes the progress information of paused folders possibly
getting stuck.
Now we have 1 simple dialog that includes 2 widgets.
* ShareLinkWidget (for link shares)
* ShareUserGroupWidget (for user/group shares)
The ShareUserGroupWidget is only included if the server version is >=
8.2.0
For <8.2.0 the old behavior is preserved
We changed the discovery code not to ignore files whose filename contains
charachter invalid on windows. (Because newer versions of the server
supports them)
Servers older than 8.1 will just say "Bad Request" as an error and it's a
regression against previous client version. So keep nice error even with
older server.
Relates to #3736
We did not flush or closed the file after having modified it from the UI.
So when the socket api was reloading it, it wouldn't be able to load
the newly added rules
These changes were committed to 2.0.2-rc1 branch https://github.com/owncloud/client/pull/3957/files6da2139a1b but that branch was never merged up into 2.0 (or 2.0.2-rc2) so the changes never went anywhere.
These changes could also be applied on 2.0.2-rc2 and 2.0.2 branch for completeness - then they would be in every branch in which they have appeared.
When the toolbar is full because there is no enough room, make the extension
of the toolbar work, by using QWidgetAction::createWidget instead of
QToolBar::insertWidget
There should not be prolem when the window is too narrow.
Relates #3832
Regressed since d610693af1. The problem
is that the _size vector contains the pathToRemove and that it was removed
before.
Reorganize a bit the code so there is only one loop that has still all the
information.
On unix we don't safe much (otherwise csync would have been
designed differently).
On windows however, the readdir already fetch all the info, so we
can as well use it.
We still have to query for the file id but we might optimize that later
- Disable the whole group box
- Add a tooltip explaining why it is disabled
- Make sure it is disabled in the settings in case of upgrade
- Do a runtime check in case the running Qt is greater
So we avoid lots of memory allocation.
We can work with char* directly since both the pattern and the file
name are in UTF-8 and there is no need to understand unicode for
such pattern.
(In fact, '?' would not match anyore non-ascii characters, but I
don't think that's a problem. I don't think anyone use '?' in its
exclude list. And the two allocations per call to csync_fnmatch are
really worth getting rid of)
To use the same logic as the other clients and unify ownBrander
implementations, the switch is now called multiAccount() rather
than singleAccount() with a reverse logic.
Desktop Client stays with the default of having multiaacount
enabled.
Note that existing brandings need to rename the switch.
https://github.com/owncloud/ownbrander/issues/443
If there is a any none files, we do not show the dialog saying that all
files have been removed. If a directory contiains ignored files, we still
want to show this message box even if the directory will not be deleted
There is now a generic OCSJob which must be inherited by other jobs. This is in
prepartion for the other OCS job that will come (for the Sharee API endpoint
for example).
More logic is moved from the sharedialog to the OcsShareJob. So in the GUI code
we now only say what we want (a new share, set the password etc). And the code
in libsync will make that happen. Error handling is for now still done in the
GUI part.
For now the ocsjob and ocssharejob live in gui but probabaly we should
create a libshare or libocs at some point.
Progress estimation is usually based on transfer speed. That makes no
sense when we're doing operations like deletes, that need very little
data transfer but nevertheless take a long time.
This hack attempts to detect this case better and switches to a
different estimate.
We should rewrite this to maintain and update estimates for the
transfer speed, per-file overhead and chunk-assembly overhead each
time an item finishes. Then we could provide more consistent progress
estimates without ad-hoc fixes like this one.
Also, there's an issue where resuming a partial download will lead
to exaggerated transfer speed estimates.
This menu in 2.0.* now has 4 options.
The small screenshot needs updating also. @carlaschroder it is probably best if you take a new screen shot from whatever client version you have been using for screen shots. That way they will all have a consistent look.
Introduce a global ExcludedFiles instance to avoid loading the global
exclude lists several times.
One could still add per-folder exclude lists by checking these after
the global ones.
Instead of checking whether the library path ends up somewhere in /usr,
set the architecture prefix, anyway. The library path mechanism is also
used in custom prefixes, without this change, the library gets installed
globally on Debian and Ubuntu, leading to non-standard behaviour and
cross-build problems, as multiple architecture builds of this library
can't be installed alongside each other.
This is the minimal change to correct this behaviour from upstream cmake.
Otherwise win32 api simply does not open reparse points at all,
such as junctions.
This will improve the user experience of #3813 as we now identify
the junctions as symlinks.... and ignore them properly.
Registry keys are no directories; you would not "migrate" to keys if you are just about to switch to them; resembling formulas as "Edit these / this Registry key/s" ease fast reading, for that also ":" instead of "::" at the end (formatting what follows)
fixes the unicode issue #3753
I don't know much CPP and Qt but after some google research I found this http://wiki.qt.io/Strings_and_encodings_in_Qt
it does mention trUtf8() that has done the trick for me on Linux with Gnome 3.16.
Haven't tested it on other systems
OwnCloudFinderRequestManager::_shareMenuTitle was not retained anymore
after the FinderSync refactoring which would cause it to contain any
kind of garbage value for some reason.
Fix the issue by also enabling ARC for RequestManager.m.
We can't enable ARC for the whole project since Finder.h is included
by many .m files and it's not trivial to port to ARC.
Registry keys are no directories; you would not "migrate" to keys if you are just about to switch to them; resembling formulas as "Edit these / this Registry key/s" ease fast reading, for that also ":" instead of "::" at the end (formatting what follows)
Should be stated clearly that there are no alternative 32- / 64-bit-ownCloud-Clients, but just a 32-bit-ownCloud-Client that is treated differently in 32- / 64-bit-Windows
fixes the unicode issue #3753
I don't know much CPP and Qt but after some google research I found this http://wiki.qt.io/Strings_and_encodings_in_Qt
it does mention trUtf8() that has done the trick for me on Linux with Gnome 3.16.
Haven't tested it on other systems
Now that fetchFromKeychain is solely called from AccountState::slotInvalidCredentials
and that this one already protects the fetch call using _waitingForNewCredentials,
we can remove that extra check.
This moves the responsibility of asking the user or not for
credentials from the Credentials classes back to the AccountState.
fetch() now only extract credentials from the keychain, reports
the result to the AccountState which then decides if askFromUser()
should be called or not. The result is once more reported to the
AccounState.
This also replaces the HttpCredentials::queryPassword virtual
which now lets HttpCredentialsGui and HttpCredentialsText do it
the way that they prefer.
The AccountState is now the only class responsible for triggering credentials
fetching from the keychain or from the user.
With the ShibbolethRefresher out of the question it's possible
to remove the invalidateAndFetch virtual and manually call invalidateToken.
This also allows us to move that code from Account to AccountState.
In the end this also allows us to move the fetch() call from the
ConnectionValidator and use the same code path as for invalid credentials.
Change the wording of the certificate error dialog to include the
account URL and be a bit more accurate.
(Do not mention "SSL" in user facing messages)
Previously, in case of an error while deleting a directory, we would not
remove the entries from the local db, despite most of the files would
be deleted.
Which means that if the files re-appear on the server with the same etag,
we would think the file were deleted from the client and propagate the change.
In 1.8.0 we had this bug that we would not see some directory in the server in
some cases. This would lead us to delete the file on the client. Normaly the
files are deleted from the local database and next sync would re-download the files.
But in the cases where there was an error deleting one of the file (for example
if it was locked) we would then propagate the delete to the server.
Fix this by always deleting from the database the files that we deleted.
Issue #3206
The original problem is that showing a popup not originated
from the main settings window while it's focused won't be
shown in front to the user.
This try not to highjack the user's attention of the user
by showing a notification when checking the connection for
valid credentials, and require the user to sign in through
the UI. There are still issues with showing that popup from
the tray icon, but the user will most likely be looking for
the popup in that case. The new sign in button directly in
the settings account works properly.
Use an iterator variable declared outside of the loop condition
expression.
MinGW doesn't support C99 very easily and it's easier to keep
our C code C89 compliant.
This function only checks the full path and the basename and is thus
around 7x faster. It is very useful in a csync_update context where
we know that the leading dirs have already been checked for exclusion.
A space at the start of the bullet point about "Locate and open the following file" seems to be causing that bullet point to not line up nicely on the rendered page.
Some "downloading" that should be "uploading".
Some bullet points with "code" items were rendering with bold, italics on the published page. These seemed to be bullet points that had 3 spaces at the start of their 2nd line of text. Other bullet points that rendered correctly had only 2 spaces. So I removed the extra space. I hope it renders nicely in the published form - it is a bit hard to know in the GitHub Preview, because that is trying to show change-sidebars and differences also.
- Invert icon color depending on the darkness of the theme
- Ensure icons and colors are changed when theme or colors
get changed during application run
Final patch for #3582
Because that's what's going on. A job can 'complete an item' or 'finish'.
Note that several jobs could complete the same item: a new directory
will complete on the PropagateRemoteMkdir and the PropagateDirectory
jobs.
Previously, PropagateDirectory jobs didn't emit the completed() signal.
Now that they do, we need to make sure to not add extra lines to the
protocol widget for them.
To accomplish that, the jobCompleted() signal now also contains the job
that completed the item.
instead of pretending it suicceed and not recursing in it.
This fixes a bug in which a folder with a too long name would be properly
created, then removed on the server in the next sync.
(cherry picked from commit 4bbf7669091cde7ec726b1708d8c54427b68f016)
Conflicts:
csync/src/csync.h
csync/src/csync_exclude.h
csync/src/csync_update.c
When user wants to limit the bandwidth, he does not care about speed
anymore. And parallelism on slow network might cause problems.
For issue #3382
Will also help for #3095
(cherry picked from commit b20f29f22797367c7aa92bd74389c99b10c852a4)
csync_vio_local_unix.c:109:7: warning: ignoring return value of function declared with
warn_unused_result attribute [-Wunused-result]
asprintf(&file_stat->original_name, "%s/%s", handle->path, dirent->d_name);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This should allow for the case when a user has set the limit to 0 and a new empty folder appears on the server. The folder will have size 0 (no files in it). Doing the >= test here will mean that the user will be prompted about the new folder, which I think is the behaviour they would expect.
The side-effect of this change is that if the user has a limit of, for example, 10,000,000 and a new folder comes along with exactly 10,000,000 of content then they will now be prompted about it. Before the change such a new folder would have been auto-synced without prompting the user. I do not think this is a big deal - I cannot believe that users will be counting exact bytes for this limit, they are just setting a rough number of MB at the UI.
Should fix https://github.com/owncloud/client/issues/3542
Now that the client is pushing all changes of state, we don't need
to track the requested URLs anymore and risk that the way that we
reseted that list could leave a few entries in Finder's cache outdated.
We can remove the same code from other platforms in a later release,
a bit earlier than a week before beta1.
This fixes a few issues with the new FinderSync integration on OSX which
can't easily clear its status cache when receiving an UPDATE_VIEW message
except by unregistering the folder, but which causes flickering.
This fix should also make the regeneration of the cache unnecessary on other
platforms through possibly expensive RETRIEVE_FILE_STATUS commands.
To allow forwarding all OK states of sync jobs to the socket API
we need to make sure that the vector doesn't contain unneeded items.
This initially was intended to force updating the metadata for parent
folders, but since then the should_update_metadata flag check was
added both here and in PropagateDirectory::finalize where the metadata
is actually updated for parent folders. We can safely remove the inclusion
of all remote directory items.
The signal is emitted in this case if the instruction is NONE
but in the only ultimately connected slot to this signal,
SocketApi::slotSyncItemDiscovered, we return early according
to the same condition.
The emission of the same signal at the end of treewalkFile remains
and take care of the normal cases.
that does not understand nullptr
Note that we can't just replace nullptr by 0 in createIndex otherwise
it would be ambiguious.
So leave it commented to show that your intention is to create it with
a null pointer (which is the default because of the default parameter)
- Remove the copy constructor. The default constructor is fine. Having
a user defined copy constructor inhibit the move constructor.
- Pass QVariantMap arguments via const references
- Do not return a pointer to Capabilities from the account. It is a
value type and should not be used by pointer.
This makes sure that users won't have to go into settings
to activate the extension. This might upset users by forcing
them to re-disable it on each oC upgrade, but if this becomes
an issue we should then make this configurable in the client's
settings itself.
The owncloud wizard already created the directory, but the recent addition
of FolderMan::checkPathValidityForNewFolder stopped allowing unexisting directories.
So change FolderMan::checkPathValidityForNewFolder to allow non existing directory
and whange the FolderWizard to create the directory if it does not exist.
Issue #3492
To avoid us having to construct the URL for public shares just rely on the
server to do it.
This makes it easier to maintain. For example if (in the not do distat future)
the index.php part is removed the server would just server this new url.
Together with the updater timer, check on linux, if the version on the
disk has still the same version string as the one that is running. If
not, restart if nothing is currently syncing.
The proxyAuthenticationRequired() signal now goes to the
ProxyAuthHandler class. That class will try to read the proxy settings
from the keychain or ask the user about them.
We won't ask the user for credentials for explicitly configured proxies.
It also does not change how the credentials for explicitly configured
proxies are stored. (see #261)
especially at places where the file system is hit. APPLICATION_NAME
may contain colons and other strange chars. APPLICATION_SHORTNAME
has to be a clean name.
This fixes client#3445
That allows better handling of remove requests that should not be done
because the directory is not empty on the remote side (as it contains
ignored files).
In particular:
* It's always possible to sign out, even if there's currently a
network problem or the service is unavailable.
* You can only sign in when you explicitly signed out before.
If we have a slow connection we do now want to show the share checkbox until we
have retrieved the shares (so we know the state). Else we might try to enable
sharing on an already shared file.
Issue #3239
The feature to dynamically resize the column only came with Qt5,
But give a better default size of the name column so we can read the
contents.
factorize the function to check the validity of a new folder out of
the folder wizard to the FolderMan.
There is even a test for it now.
That way we can also use it in the normal wizard
This made no sens. Folders are setup when the account is setup.
Also this had the bad side effect to shut the sync engine too early,
leaving the SyncEngine::_syncRunning to true, and leading to ASSERT later
Issue #3427
Before we only had c_utf8_to_locale, but now functionality is needed to
convert a path to UNC before converting it. That does c_utf8_path_to_locale
now, while c_utf8_string_to_locale only converts the plain string, ie.
to generate wide char strings for output.
This enables the calling function to free these accordingly. That is needed
because the makeLongWinPath for efficiency reasons does not always realloc
the original string.
No such slot OCC::GeneralSettings::slotForceRemoteDiscoveryOnFolders()
(sender name: 'OCC__IgnoreListEditor')
(receiver name: 'OCC__GeneralSettings')
The slot was in another settings page (because the button 'edit ignored files'
was moved.
Move the actual code to IgnoreListEditor where it logically belong.
Add a comment on the why this code is there.
Issue #3413
There was two problem:
- First, when singing in we were setting an account that was connected
to disconnected (AccountState::State)
- Second, while getting the result from the ConnectionValidator, we would
not set the state to connected if the previous call to ConnectionValidator
was ConnectionValidator::Connected, regardless of the old state of the account
Users with accounts on multiple servers could easily use the same
username on both servers. The password dialog did not tell users
what server the password is for. I added the account name to the
dialog.
For unencrypted connections there used to be a small arrow indicating
that more information was available, but clicking the button had no
effect. That indicator is now gone because we unset the SslButton's
menu for these cases.
* Show connection errors for all failing accounts in the tooltip.
* Don't hide the 'service unavailable' state. We don't want intrusive
pop ups, but we don't want to pretend we're syncing when we aren't.
* Show sync-running icon also for SyncPrepare state. In my tests I
very rarely saw the sync-running icon before.
application.cpp still had a global folder syncing on/off switch
when an account connected or disconnected. That couldn't work with
multiaccount.
Instead FolderMan listens to accountStateChanged messages and
schedules or de-schedules the folders for accounts that change state.
- Make it translatable
- Make use of the %n so that it supports plurals (but this will only
take effect if we have an english translation)
- Only put two units. eg: "5 years 7 months" instead of
"5 years 7 months 12 days 34 minutes 23 seconds"
Even when it is "2 hours 23 minutes" the amount of second does not
matter, especially since the estimation is likely to be boggus anyway
Issues #2672 and #3097
That way we do not need to include QIcon in theme.h
So the header can be included (indirrectly) from cmd.cpp
which is not compiled with the QtGui include paths
Too many people complained about that the entry can not be removed
if this should be synced. Users that want that one be synced please
add it to the user exclude list.
This reverts commit 5860e5a46b.
This allows developers to build and run the extension by default.
Official packages bundles will be re-signed after the build, we
The SocketApi prefix can be set at configure time through cmake and
should match the key that will be used to sign the whole .app bundle
(including the embedded FindexSync .appex bundle).
Since we use that class to lookup the NSBundle using bundleForClass
use a more specific name to avoid any clash with any othe liferay
extension. I couldn't figure out from the documentation if that is
only resolved using the class name, but found some warnings on
stackoverflow and better be safe than sorry for what it costs.
The problem was that the modified ignore pattern was not applied
to the parts of the remote tree we simply retrieve from the db
because the folder etag didn't change.
Even worse, if one removed an ignore pattern, the un-ignored
files would not be synced correctly.
With this change, a modification to the ignore list always results
in a full remote discovery. This guarantees that we find un-ignored
files.
Since we periodically recreatet the QNAM owned by the Account,
the web view could end up holding a dangling pointer to it.
Let the web view use its own QNAM, but make sure that the cookie
jars are shared so that we can grab the session token given
by the server.
It was only used on OS X and couldn't be used by the FinderSync
extension since that one runs in a sandbox. So use the same system
to load images in the legacy extension by shipping them in the
extension bundle instead of the owncloud.app bundle.
This is also given that the legacy extension needs padded icons
while the FinderSync one needs unpadded icons.
Do not pass AccountState in constructor of Folder, set with a
new method called setAccountState after creation. Thus the
parameter does not need to be passed through all over.
Since GIT_SHA1 would need to be updated in config.h, all files
including it would be rebuilt by make.
Reduce the number of files to rebuild by moving this variable
to version.h instead.
The archive buildaction causes this. Use the default build while
forcing the Release configuration instead.
In both cases the result will end up in SYMROOT.
Theme will eventually be moved to the GUI
Theme::appNameGUI and QApplicaiton::applicationName are the same, it is currently
set in the constructor of ConfigFile
This uses the new official API to show overlay icons and add our
custom context menu entry instead of hooking directly into the
Finder process and intercept drawind routines.
A dummy desktopclient target is also in the project to allow debugging
directly in Xcode while the official client can be started from the
command line. Otherwise Xcode won't allow attaching to the debugee.
Dummy icon files have been added while we get proper icon produced.
We can't use the old icons since what we use for the legacy shell
integration is already padded according to where the badge should
appear on the full icon.
This prepares the switch to the official FinderSync API on Yosemite
which requires the extension to run in a sandbox. This complicates
the usage of a local socket to communicate with a non-sandboxed GUI
client. An NSConnection is easier to use in this case, which we can
use as long as the server name (i.e. Mach port registered name) is
prefixed with the code signing Team Identifier.
A placeholder server implementation is also added to the client's
SocketApi which basically reproduces the interface of a QLocalSocket.
Most of the references to individual sockets we're only using
QIODevice methods so the type was simply reduced. A typedef to
replace the QLocalServer was the only other part needed.
Since our DLLs version number aren't bumped, a same file size could
cause a DLL not to be installed to replace an old one.
This eventually can cause a crash of explorer if an incompatible version
of OCUtil.dll is installed alone.
Fix the issue by defining LIBRARY_IGNORE_VERSION. This also makes sure
that installing an old version of the client over a more recent one
if we decide to add version numbers to those DLLs.
All things pushed to the "coverity_scan" branch will now get build by Travis and the resulting binary is pushed to Coverity and analyzed automatically.
Since Coverity has a fair usage policy which allows us up to 8 builds per week with a maximum of 2 builds per day we cannot run this automatedly on every push. Which also doesn't make that much sense.
Currently this can be used by reating a "coverity_scan" branch and force-pushing the new code to analyze. If all went well the Travis build should pass and Coverity should display the new information (give it some time to process the build though). In Coverity the SHA of the processed build will be used as version number as well as descriptive text.
(we can automate this though in the future as well if we want that too)
This will fail at the moment on master since Qt4 builds are failing as per https://ci.owncloud.org/job/client-build-matrix-linux/ - probably something that should get fixed. 1.8 branch worked fine though.
In particular the 'unsupported client version' error message
is now visible to the user when trying to connect to a
server that no longer supports the current client version.
Removed the Worker postfix from the method names to reflect their non
threaded character, they moved into a thread in the Validator class.
Thanks ckamm for review.
* Change the textedit-empty text to be just "Password"
* Hide the 'Copy link' button when the share isn't created yet
* Show the checked and disabled 'Password required' checkbox
when a password is required.
For remote renames that are replicated locally the _file member is
overwritten by the target file name when the new entry is added to
the metadata table. Using _originalFile here guarantees that
the affected local file is mentioned.
this fixes the error and makes complete oCC compile with GCC 5.
error: ISO C does not support '__FUNCTION__' predefined identifier
[-Wpedantic]
According to the porting guide:
The fix is either to use the standard predefined identifier __func__
(since C99), or to use the __extension__ keyword.
Do not request the status of all entries in the cache. Instead force Finder
to request the ones that it deems necessary by keeping the old statuses
in a separate dictionary which are only used while the new status arrives.
removeIcons isn't called and clearFileNameCacheForPath was always
called with a "nil" path.
Remove the return value of askForIcon which was always 0, and use
that value explicitly at the only call site.
Remove the "-1" code path in iconByPath since setIcons prevents
-1 from getting into _fileNamesCache in all cases.
Since QNonContiguousByteDeviceThreadForwardImpl::reset will
call UploadDevice::reset with a BlockingQueuedConnection, this
allows us to reset the HTTP channel along with its buffers
before they get the chance to be reused with a subsequent request.
Do not request the status of all entries in the cache. Instead force
explorer to request the ones that it deems necessary by keeping the old
statuses in a separate dictionary which are only used while the new status
arrives.
If 1.8.0 caused missing data in the local tree, this patch gets it
back. For that, the usage of the journal for remote repository is
disabled at the first start.
When the local sync target is just a drive letter (e.g. "X:\"), neither
the display of the sync status via file icon overlay, nor the creation of a
share link works. In the latter case no pop-up comes up and no server
request is done.
QDir::cleanPath() usually removes trailing slashes, but not if the path to
be cleaned is just "X:\". In that case the trailing slash is kept. This
commit accounts for that exception.
The problem was that on network error the networkError() and
finishedWithError() signals both fired. To fix it, I collapse all
error handing into a slot triggered by finishedWithError().
I tested the redirection case and the invalid credentials case.
I had a situation here where we were showing stale desktop notifications when a remote folder
errored out and then sync finished with _syncResult data from previous sync.
Use a QSharedPointer to keep the same ownership and
continue passing the SyncFileItems as a const& when
ownership isn't taken. This allows sharing the same
allocations between the jobs and the result vectors.
This saves about 20MB of memory (off 120MB) once all
jobs are created.
Since the QLocalServer parent of the QLocalSockets gets destroyed
after the _listeners QList, onLostConnection might try to update
an already destroyed list.
Fix the issue by simply making sure that _localServer is destroyed
first.
Also, use the mirall version for ocsync.
Currently, the csync engine part and the Qt part have different UAs,
and this makes debugging (i.e. reading access logs) difficult. On
top, we haven't increased the ocsync version number in ages. So
as a consequence, I think it would be the best to have ocsync
and the rest share the same version number, and make them identify
with the same user agent.
To ease debugging for our side, we'll still append "(csyncoC)"
for calls made by csync.
For issue #3106
1) Always use the actual timestamp from the file in the file system
to create the conflict file. This is important because if one edit a
file several time, they should have different name. Also it makes more
sens to have the mtime of the modified file.
2) Give the correct size to the job so we know when the temporary file
is complete in case of resuming.
Because file system like FAT only have two second accuracy and would result
in a upload if the mtime in the database is not the same as the one that was
downloaded
Issue #3103
The AccountManager does not belong in the libsync because it is not
part of the synchronisation algorithm, but is just an helper class
for the UI to maintain the account and read/save the config
csync_reconcile.c:159:26: warning: address of array 'tmp->path' will always evaluate to 'true' [-Wpointer-bool-conversion]
if( tmp->path ) {
~~ ~~~~~^~~~
csync_file_stat_s::path is an array so it is never null
What was meant here is to check if the string was not empty
In some cryptic cases where the getetag property wasn't returned by
the server, we might be trying to c_strdup a null pointer in
csync_vio_file_stat_copy.
At least avoid crashing in this case by looking for
CSYNC_VIO_FILE_STAT_FIELDS_ETAG, like csync_vio_file_stat_destroy
does.
The default constructor of the iterator points to NULL, which makes
it != end() but invalid to dereference.
Use an integer index instead to keep 0 as a valid default value that
can always correctly be checked against size().
Also make sure that no data is shared between threads by making the
csync_vio_file_stat_t copyable and passing it as const.
Deleting the QLocalSocket while iterating the QList with qDeleteAll
would trigger onLostConnection, which would modify the list mid-air
and leave dangling pointers in it.
Calling save() in the CookieJar destructor was problematic. For instance
we sometimes create a new QNAM with a new CookieJar and then call
setCookieJar() on it to assign some other jar. That destroy the fresh
jar and potentially overwrite cookies.
Also explicitly saving the account's cookies when the account is saved
is more explicit and thus more reliable than counting on the Account
destructor to do it.
This is largely a guess, but this is the only place where we use
a QIODevice to push data through QNAM and that the QIODevice isn't
a direct child of the QNetworkReply.
Fix the issue by making sure that we don't go back to the event loop
and possibly handle network events between the destruction of the
upload QIODevice and the QNetworkReply, which might lead to QNAM
dereferencing a dangling QIODevice pointer.
Make sure that we define NDEBUG in all configurations.
Also remove inconsistent defines:
WIN32: We don't use
_DEBUG;_WINDOWS;_USRDLL: Should be defined by the compiler if necessary
OCCONTEXTMENU_EXPORTS: We currently don't use dllimport anyway
This also update the binary submodule with an updated build.
The QNetworkAccessManager is reset when we are disconnected, just
before attempting to fetch the server's status.php.
This may help fix the problem described in various issues where we
get 'Connection closed' or timeout errors after the OS has woken
from sleep.
Since each new connection to the socket API would trigger a broadcast
of REGISTER_PATH to all existing connections, opening the context menu
would trigger a SHChangeNotify call of the root directory through
the overlay icon extension, which is currently also connected to the
socket API, waiting for changes.
Fix the issue by sending the initial REGISTER_PATH automatic response
only to the connecting socket.
This moves the crash handler installation during the OCC::Application
contruction. This still leaves a window where crashes wouldn't be
caught, leaving the QtSingleApplication and theme initialization
code unreported, but isn't requiring any refactoring for now.
Issue #2952
It was not emitted when a removed folder finished its sync,
and that left the UI in an old state sometimes.
Removing the Folder explicitly is unnecessary as a QSignalMapper
will automatically remove mappings for deleted QObjects.
The config currently only disable the reporter, but still leaves
the crash handler installed on startup. This causes conflicts
when running those builds in lldb.
Work around the issue by requiring the crash reporter to be
disabled in the settings before owncloud can be run in lldb.
This has the negative side-effect of not covering the
initial ConfigFile loading with the crash handler.
Issue #2946
If a file or directory is shared without resharing permission, the
share dialog displays an error. This is not the optimal solution, but
best for now, as we do not have the permissions available for the file
manager plugin.
This fixes#2923
- Check the share checkbox automatically on open of the dialog
- Use the date picker with popping up calendar
- Proper initial size
- no resizing and appearing and disappearing.
Fixes probably #2917, also #2764
This attempts to replicate what i686-w64-mingw32-gen_sym_files
is doing for us with MinGW by parsing the output of otool -L
to get the library name actually used by the executable.
If the password or user was wrong during setup, the client showed a
ConnectionClosed error instead of a proper Username or password wrong
message. This was because in HTTPCredentials::slotAuthentication, the
reply is closed, and a property is set to indicate the auth problem.
This patch now checks at all occurences of networkErrors if it might
have been an authentication problem, and displays something useful.
There is a good chance that this is a sufficient fix for
owncloud/enterprise#556
Import a fix from libcrashreporter-qt that should remove
usage of symbols not available in XP's msvcrt.dll
This should help solving #2907 with the crash reporter enabled.
In order to initiate the conneciton, we should not send a GET on the
webdav URL because that is not a valid webdav command on a collection.
Issue #2911
QNetworkReply::OperationCanceledError may be both because of anthentication
error (because the HTTPCredentials abort the reply) or because of a timeout
(the timer abort the reply). We should only ask for the password if the
reply was canceled because the password was wrong.
QFileInfo has to be refreshed if the underlying file has been
modified in between. That is dangerous so ckamm and me decided
to eliminate the QFileInfo based implementations.
This was triggered by a bug that the client uploaded files that
it should not have.
sendMessage would only be called if there were options to
be sent to the running application.
Fix the issue by having explicitly named messages and always
send the show settings message.
Issue #2374
There is a race condition that can initialize the RemotePathChecker
instance concurrently on the same address and cause a crash when locking
the mutex. The reason is that local static initialization is not
thread-safe with MSVC2013.
Fix the issue by using call_once to initialize a static unique_ptr
instead.
This could be related to some reports of issue #2836.
The same file is on the two sync trees under different names in case of a rename
We must therefore use the rename target as the key in the _syncItemMap to ensure
that the trees are correctly merged.
Also use the same UTF-8 decoding for the target than for the actual file in order
to catch invalid utf-8 in the rename target
CMake is using "c++" as the compiler and the clang detection fails.
Since we require C++11 at this point, enable it in all cases.
Removed the MSVC todos since we don't plan supporting it yet.
The compilation error was
account.h:140:113: error: expected ')'
const QList< QPair<QString, QString> > &queryItems = QList< QPair<QString, QString> >());
^
followed by more errors.
The problem is because the compiler has hard time disambiguiating the comma
int foo(const QPair<int, int> &p = QPair<int, int>());
^
It is indeed quite hard for the compiler to know if this comma is a separation
between complate arguments or the separation between arguments of the functions.
Use the C++11 construct instead which does not need commas
50ms is sometimes not enough when the client is busy synchronizing.
Wait up to 500ms for the client to answer before we give up and show an
empty menu title.
Ideally we should request the title before the watched directory list, but
the list is currently sent implicitly on connect.
The context menu will now show "Share with ownCloud" instead of "Share" as
it does on other platforms.
This also updates the submodule to point to matching binaries.
The problem occurs because of the sorting of items when we have things like
bigfolder
bigfolder/bigsubfolder
bigfolder-2
Then, because dashes come before slash in ascii, the bigfolder-2 would come before its content
and the propagator would thinkg bigfolder is empty and save the etag before it is processed
Should fix issue #2832
That makes it defaulting to the APPLICATION_NAME which is ownCloud.
That is what we want and expect to read the system exclude file from
on linux.
How we find the system exclude file linux:
ConfigFile::excludeFileFromSystem()
-> Theme::instance()->appName()
-> OwncloudTheme::appName() returns "ownCloud"
-> default Theme::appName() returns APPLICATION_SHORTNAME
-> cmake installs to ${SYSCONFDIR}/${APPLICATION_SHORTNAME}
It seems like verclsid.exe hangs on our class IDs when invoked
through explorer.exe for 5-10 seconds. It doesn't hang if I
invoke the same command line from cmd.exe, so there could be some
process parameters that don't play well with our extra thread
or to the pipe connection that we do in it.
Delay creating the RemotePathChecker thread until the first
IsMemberOf call. verclsid.exe only seems to instantiate a object
of each registered class, without actually using them, so we
can use this as a workaround.
This should be fixing issue #2680.
* Fix various spaces vs tabs issues
* Rewrite
- to use instance variables consistently
- to not make shared state explicit instead of relying on
class variables of a common base
* Fix reconnecting to an oC client.
Occasionally on Windows ~DiscoveryMainThread() triggered a crash.
Probably because the QMutableLinkedListIterator was destroyed after
it's underlying data had been removed (from the map).
Cleaning up the map and lists was redundant anyway, so the
destructor is changed to only explicitly destroy the vio_file_stat
objects.
The _listeners list is destroyed before the _localServer.
And since _localServer is the parent of all generated QLocalSockets,
they get destroyed in turn - which triggers onLostConnection() and
thus accessed the destroyed _listeners list.
To avoid that, delete all active QLocalSockets in SocketApi before
its members are destructed.
We also now delete sockets when we're done with them. I think
disconnected sockets would otherwise linger until SocketApi destruction.
It make jenkins fail with the error:
CMake Error at CMakeLists.txt:3 (cmake_policy):
Policy "CMP0020" is not known to this version of CMake.
This reverts commit 6d380c8548.
Usefull when the folder does not exist (for example in case the theme
has a defaultServerFolder that does not yet exist, #2788)
But also to avoid confusion (issue #2663)
This crash was uncovered when testing parallel chunks when one chunk
finished the upload. The propagate was then finished with the other
UploadDevices still being in-flight in the QNAM.
There could be a race condition if the file was updated on the server
between the discovery and the propagate phase. By taking the mtime from
the server, we make sure that we do not have a race.
This is tested by t6.pl with BIG3.file because the script was modifying
the file between the two phases
We need to add the davPath in there.
Otherwise there will be a redirect which will break shiboleth
(We want to only enter the password once)
Issue #2739 and #2780
Windows finds DLLs using PATH or the directory of the process'
executable. By outputing those dependend DLLs together with
owncloud.exe, the developer only need to have OpenSSL's bin
and the qtkeychain build directory in his PATH to let the
dynamic linker find them.
As the documentation of RUNTIME_OUTPUT_DIRECTORY points out,
this only affects windows as other platforms don't consider
libraries as runtime targets.
- qtkeychain isn't necessarily in a qt5keychain subdirectory.
- Explicitly add OpenSSL to the include directories
- Make sure that the USE_OUR_OWN_SQLITE3 code is initialized
for csync by calling find_package.
Since Qt5.4, on release build, qDebug do not provide anymore the line
number unless we define QT_MESSAGELOGCONTEXT
Also define QT_USE_QSTRINGBUILDER while i'm on it (free optimisation)
When connecting to a https:// URL fails, present the user with three
choices:
* Try again with a http:// URL
* Configure client-side TLS certificates
* Go back and enter a different URL
This allows users connecting with an ownCloud server secured with
client-side TLS certificates to start the certificate import wizard
manually instead of relying on a custom server error message.
Otherwise we run into "can't upload because it's too recent" issues
when the folder watcher triggers a sync.
We used to do this, but my recent refactoring started counting the
time since the last sync against this minimum delay, leading to
1ms delays in practice. This fixes the regression.
To make the Sharedialog a bit cleaner and to only have the logic in one place.
The postdata is now passed as a QList<QPair<QString, QString>> to the
OcsShareJob.
* removed broken QSsl::SslV3 default
* rewrote slotHandleErrors(): no longer claim errors which are none.
* hack reverted: lib64 was not the cause for NixOS issues related to libraries.
* refactored csync/src/csync_owncloud.c and discovered+fixed why the dav_connect was never getting the certPath+certPassoword
* cleanup of code but seems this crushed the ssl client certificate support
* fixes the https://github.com/owncloud/client/issues/69#issuecomment-69358377 issue
* lots of cleanup
* From TODO list : translate all french comments into english
* changed _pemCertificate type from QString to QByteArray
- Some dialog changes: Made it less vertical space comsuming
- Some variable cleanups
- Allow to share files that are not within the synced dir by
copying them to the root of a sync dir first.
The server generates a new share when a password is set/deleted so we need to
refetch the shares once that is done.
It is not possible to set an expiration date in the past for a share. So do not
allow the user to select a date in the past.
There are several reason why start==0
* The Content-Range header was not present
* We can't parse it
* Or it is actually 0
If we can't parse it, we cannot assume anything and must error out.
So only in the first case we should discard the temporary file and continue.
Issue #2708
We must not use the SI units if we use power of 2
I believe that we should use SI units and power of 10
But since the server still use power of 2, we need to show the same numbers
But at least we use the proper standard IEC unit that are explicit
The password field now show correct info when a password is entered etc.
Maybe we should have an extra info part where we state that the user needs to
press enter to submit the password
This is a merge from the movie in the original commit (which was local) to the
QProgressIndicator. However, on all connections I tested it, it did not add
much since the API is in gernal pretty quick. So maybe we can just remove this.
This should solve #2675 and #1981
By preloading the chunks in memory before sending them, we don't keep the
file open and therefore we let other program open the file for writing.
If the file is modified between two chunks, we detect that and abort anyway
The server is slow to process each chunk. As a result the time between
the chunks is not neglectible. Therefore we gain a lot of time by
uploading the chunks in parallel. So the bandwitdh is used when the
server is waiting between chunks.
Basically the same functionality as for user sharing. Maybe it would be wise to
merge the two functionalities. Should be rather straight forward if we also
merge the UI parts.
This commit needs a lot of cleaning up. And a lot of error checking needs to be
added. However it is now possible to change and add new shares with users.
Sharing with groups should be just copy paste.
Also the UI needs some love.
The wizard code used to call hide() on hardcoded wizards.
This means that for a brief moment, the first page with the URL
(disabled line edit) may be seen. I think that's completely
legitimate from a feedback perspective. The alternative would
be to unhide on error, but this is rather unelegant...
... instead of uploading the file with replacement character, and asserting
on the next sync.
Issue #2649
If the file or folder on the file system has a name with invalid UTF-8,
We would convert the name to utf-8, and the conversion would result in
replacement character placeholder. And we would upload that file on the server
with that name, and save it with this name on the database.
Fix this issue by showing an error to the user for invalid files.
We are using a QHash to store all the folder objects. This does not allow for
easy sorting and looks weird to the user. Now they are first inserted into a
temp QMap to sort them properly.
* When folder config is used, other folder definitions are always
removed.
* Fix a bug with the wizard becoming stuck when 'skip folder config'
is used.
* Use a shared pointer to Account everywhere to ensure
the instance stays alive long enough for a sync to terminate
* Folder is now tied to an AccountState
* SyncEngine and OwncloudPropagator tie to an Account and use that
for all jobs they run
Issue: Since the setup wizard currently always replaces the
account, it will always wipe all folder definitions, even when
the actual changes to the account were minor.
This allows all the account state information to live in gui
while the sync-relevant data stays in libsync.
I also moved quotainfo to gui since it depends on the account state.
The server might support resuming, so don't always erase the temporary file
and pass the startSize, so the temporary file will be remove if the server
does not support it after all (because it is not sending the "bytes" header
Also pass the expected etag for consistency even if it's not used in this case.
The account state is now managed mostly by the Account itself
instead of through Application. The gui can still control whether
an account is signed out or not.
I just wanted to fix the warning:
QObject::connect: No such slot OCC::SettingsDialog::slotUpdateAccountIcon(QIcon) in settingsdialog.cpp:108
It turns out we don't need anymore the signal or any of the code that
was updating the account icon in the settings dialog since it we now have a fixed icon
* Stop the quota job from having an effect on account status
as it can sometimes take a long time to reply. See #2485 and
owncloud/core#12744.
* Instead of indirectly using the quota job, use the connection
validator to regularly ping the server with a basic PROPFIND for
'getlastmodified' on /.
This request was usually fast for users even when the quota PROPFIND
was slow.
It also registers and unregisters the shell extensions properly and
forces explorer to reload/unload the DLLs so they can be removed.
This obsoletes #2377.
Fixes#2487Fixes#2377
This fixes mirall#1132
A variable that counts the affected items of the propagator operation
done on a item was added to SyncFileItem. Usually that is 1 because
most operations affect only the item itself. But for removes, the
number can be higher for directories (one remove removes a whole tree).
Some rearrangements were needed.
An url can contains % signs, so if it does, the errors formating was wrong
because of the use of QString::args
Also, the error is in html format, and we need to let the message box know
that, otherwise we will just see <br/>
- move items on top like on Mac OS (right is free for accounts now)
- The account icon no longer reflects the current status (in prep for multi-account)
We need to do a sync even if the etag was empty because we do not know
if this is because the etag really changed or because it was new.
Also, some part of the code rely on this fact to schedule a sync.
The fact that there is two sync with 30 sec at the beginning is not
a big problem, because we also need to do the sync the put the directory
etag in the db.
This reverts commit 1c001ee138.
It was deleting too many cookies.
That function is virtual in Qt5 and is used when adding cookie.
But some Shibboleth have several cookies with the same name, and we need to keep them.
Our implementaiton was meant to delete all the shiboleth cookies when we want to log out
If content-lenght is 0, don't chack it is the size we recieved.
It can be zero when using HTTP chunk encoding.
Also do not remove the temporary file so it can be re-used on the next sync
and ask for a new sync immediatly to re-do the sync.
Fixup the fix to task #2528
We need Qt 5.3.3.
If the compiled qt version is Qt 5 but smaller than Qt 5.3.3, do a runtime
check.
OWNCLOUD_NEW_BANDWIDTH_LIMITING is still there for a special setup in which
we patch Qt with the patches
503 for directories means that the dir is a mounted directory from an
external mount which currently is not available. The directory is
ignored and not traversed into during discovery phase.
https://github.com/owncloud/mirall/issues/2215
As of version 10.10 Yosemite, Mac OS X offers the user the option to use
a dark version of the dock and menu bar. The systray icon was black even
on the dark menu bar, thus rendering it nearly impossible to spot.
Previously when a sync failed, we'd retry very soon (30s) no matter how
often a sync had failed before. After this change we'll retry twice and
then back off to the regular 5min interval.
In e5269a4151 I moved the reset calls to
before the first bindValue() because we didn't consistently reset()
after exec().
However, some queries may keep a lock on the database so it is necessary
to reset() as soon as the data is read. This commit reintroduces these
reset() calls.
There also was a bug in syncjournaldb: in some error conditions the
sql query wasn't reset properly. We now always reset a query before
calling bindValue.
The fix in commit 86d8079 made the detection of changes inside
a directory more robust.
As a result, changes are detected inside a directory, even if the
files that are changed were moved away on the other remote, the algorithm
won't let the directory be removed and the directory will be re-created
Found while investigating #2296
The problem is that we should not remove a directory locally if it contains
modified files.
But the modification time of the directory is not necessarily chaning (so
the instruction of the directory may still be NONE)
We have to move the child_modified test a bit down to be recursive
As described in http://www.sqlite.org/cvstrac/wiki?p=MultiThreading precompiled
statements should not be used across thread borders. However, the reconcile
phase would reuse the statements if defined (it calls statedb function from
a different thread) so it is saver to finalize them at the end of the
update run.
Squashed commit of the following:
commit 4d9b072f560fa171a1390b7c74425614aa20e955
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Tue Oct 14 16:04:02 2014 +0200
Remove useless variable
commit 8e85de0307ec5f31bf3f92a7de793fed7d41c2ea
Author: Daniel Molkentin <danimo@owncloud.com>
Date: Tue Oct 14 16:01:52 2014 +0200
Make Windows Explorer Extension build
commit 8e2942cd9fd32e3af72d60cba0d06bd9d6222a45
Author: Daniel Molkentin <danimo@owncloud.com>
Date: Tue Oct 14 11:39:37 2014 +0200
Fix compilation
commit 0fc0c0e0e0c7e58ad97f62700256c7d1f8c0670b
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Tue Oct 14 11:48:32 2014 +0200
Windows Shell Integration: Try to let the thread notify about changes when there are changes
commit 4a1712b7c03269ca3007f167b8f313ea47655967
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Tue Oct 14 11:35:20 2014 +0200
Windows Shell Integration: Share the RemotePathChecker amongst all the OCOverlay instances
commit 2d87408e9af5a4d7ab71c460ce606ba1f367c09f
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Mon Oct 13 18:55:15 2014 +0200
Windows Shell Integration: Attempts to wait on multiple objects (WIP)
commit e448e427b6d1561ad7a40d08fc6632f4d2b4ef44
Author: Daniel Molkentin <danimo@owncloud.com>
Date: Mon Oct 13 17:58:02 2014 +0200
Introduce a worker thread
commit 2344407ec0bc1ce173ebbacadcf3992d62d94078
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Mon Oct 13 17:03:47 2014 +0200
Windows Shell Integration: try to keep the socket open using a thread (WIP)
commit ea6d5273ed60d8bc3f1c5d5c6936364d783a1c0f
Author: Daniel Molkentin <danimo@owncloud.com>
Date: Mon Oct 13 15:27:46 2014 +0200
Make Explorer plugin work again with named pipes
This is a temporary hack, which needs more refactoring.
commit 44a3437a44082379efa0078c9afd7b8bbde930de
Author: Daniel Molkentin <danimo@owncloud.com>
Date: Sat Oct 11 07:31:24 2014 +0200
Fix code
commit 123390a0f3516c0078309d7048c6d2acb9293676
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Fri Oct 10 16:29:35 2014 +0200
Windows shell integration: Use named pipe (WIP)
commit 9eea7e2321abeac6b8db0bd85bfce612dbf6bb20
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Wed Oct 1 12:04:13 2014 +0200
Windows Shell Integration: Simplify StringUtil
This fixes a memory leak in CommunicationSocket::ReadLine
This allows to handle the --trust option in owncloudcmd. In the
owncloudcmd subclass of the httpcredentials, we allow to manually trust
the ssl certificate through a command line switch.
It is possible that we have should_update_etag set to true for files
that we also need to propagate. In which case we must not write to the DB
too early as this could cause data loss. (cf: issue #2296)
In the sync engine. Because that makes tha tthe lower_bounds in selective sync works properly.
For example, if both "Test" and "Test Test" are in the list, then "Test/Foo" would match the "Test Test"
because slash is after space
Task #2289
* If a 416 is returned and we used a Range header, try again
from scratch.
* The direct URL logic was also inconsistent for resumed downloads:
it sent the Range header but didn't check the returned
Content-Range header correctly. Now resuming is disabled for
direct URL downloads.
If lastEtag was null, a force sync was triggered. Force syncs
don't update the etag. The etag retrieval job would only run if
lastEtag was not null. So it could never become non-null.
Use the right check to determine whether a file has a blacklist entry,
SyncFileItem::FileIgnored was incorrect because that denotes files from
the ignore list or blacklisted files with no retries left.
The blacklistedInDb flag does the right thing. Rename it to
hasBlacklistEntry to be more explicit.
The server keeps the mtime and etag anyway.
And changing the mtime also changes the etag and so make other clients re-download
the file instead of detecting the move
By enabling ARC for GCDAsyncSocket (as we should have done before
https://github.com/robbiehanson/CocoaAsyncSocket/wiki/ARC) there
is no chance anymore for a situation where the to-be-written NSData*
is deleted before the socket has had a chance to write it.
Interestingly, this only happened after switching to local sockets,
probably because of how immediatly the NSData* would be sent.
This commit also keeps the debug symbols for the Finder plugin.
The server keeps the mtime and etag anyway.
And changing the mtime also changes the etag and so make other clients re-download
the file instead of detecting the move
The SocketAPI sends status updates for files without being asked for.
And in order to not draw the emblem again if it had not changed, the
state is compared before calling add_emblem
In case it is not allowed to create files or dirs because of missing
permissions in shares, the socket API has to report an error state
rather than the NEW state.
As discussed in mirall issue #1931
A top level shared dir can always be removed on the client, even if it is
read only shared. In that case, the removal means "unsharing". Fixed the
permission check accordingly.
See bug #1918 for more information.
Issue #1385
When renaming, we would normaly already have an error if the file already exist.
And we want to allow the renaming to chang ethe case (Eg. "hello" -> "HELLO"
Before, 0 was used to indicate the sync start which wipes the activity
window. However, if there _are_ no synced items but only ignored items
the overall counter stays zero which wipes the list all the time.
This fixes bug #2171
In some owncloud server setups multiple concurrent connections for the
same session are not supported: owncloud/core#11153
This causes issues with multiple uploads and downloads. A usual symptom
is the quota job failing and the sync aborting.
This workaround lets activity on the propagator's GET and PUT jobs
reset the timeout of all network jobs. That way, queries like the quota
job would not time out while a large up/download is in progress.
The real bug in #2219 actually was that the gui allowed users to
choose to not sync the root folder. That's not supported and no
longer possible in the UI.
Instead you may now sync a folder's files without syncing its sub-
folders.
See #2167 and #2169.
* csync_detect_update: Reupload a file if the sizes differ, similar
to how we reupload if the mtimes differ.
* PropagateUploadFileQNAM::slotPutFinished(): Abort an upload if the
size changed, similar to how we abort an upload if the mtimes changed.
The problem was that the backup function failed as we tried to
move /home/xxx/ownCloud/ to /home/xxx/ownCloud/.oC_bak
The intention was to move it to /home/xxx/ownCloud.oC_bak
Issue #1989
The client (in this case mirall) tells the Finder plugin where to get the icons.
This enables installation in different locations and in branded clients.
The apple build was broken because the elseif in the CMakeLists is never triggered.
Some code was not properly adapted for the new qtmacgoodies.
Some paths were not adapted to new split.
Re-retrieve all icons for a path in case we receive UPDATE_VIEW.
(But in contrast to previous code, don't delete the icons which then
would have caused screen flickering)
* Downloadinfo entries for files that no longer need to be downloaded
are useless and can be removed. In particular, the temporary files
holding partially retrieved files are now deleted when no longer
necessary.
* The same is true for blacklist entries for paths that are no longer
being discovered.
* Same for uploadinfos for files that no longer need to be uploaded.
On signout, syncs that are running in folders are aborted. That used to
also switch the state of these folders to 'paused'. To fix that, aborts
that are caused by user actions no longer change the folder paused
state.
Aborts due to errors should still pause folders! Otherwise we'd try
resyncing them even though there was an error.
Syncing without the system exclude file would cause lots of trouble.
For instance we would try uploading the temporary files we store
partially completed downloads in.
The installation fails because of these:
TabError: inconsistent use of tabs and spaces in indentation
SyntaxError: Missing parentheses in call to 'print'
Otherwise, method unloadFolder can not do important frees.
This is one part of the fix for #2073 because now the socketapi will
send the UNREGISTER_PATH message over the socket.
Handle problems which happen because of pausing the sync as soft errors
rather than normal errors which are blacklisted and displayed in the
gui.
This fixes bug #1959
Otherwise, if the account is signed out and opens the credential popup,
there is a wrong icon displayed. If the account is coming from keychain
this icon is quickly overwritten.
With that , make the status model aware of the account connection state.
With that, we can grey out the correct state icon if the account is not
connected and display the normal icon if the account is connected.
Remove the setSyncEnabled() call to individual folders which mistakenly
set the folders to pause. Let the folders keep their pause state on their
own.
If FolderMan is set to be enabled emit a general refresh signal rather
than one for each folder.
Previously, in folder and folderman there have been the syncEnabled
properties, but they confused the semantics: While in FolderMan the
syncEnabled flag represents the network connection and stuff, in
Folder it represented if the user paused or resumed the folder.
This resulted in mixed use of both, which lead to wrong icon states.
This patch renames the folder methods and properties to isPaused to
make more clear about what it is.
Add another index on the pathlen column. Use that column to deselect
all rows that are shorter than the path to search files below. That
shrinks the amount of rows to examine using LIKE tremendously by
a cheaply to query for criteria.
The connect in SocketAPI had to be moved because it also uses
FolderMan::instance(). And since SocketAPI is instanciated in
FolderMans constructor, this was a deadlock.
Now the connect is tried on every new socket connection in SocketAPI
but I assume that multiple attempts to connect are not an issue.
It is not enough to only implement it for the QNAM returned
by the ShibbolethCredentials, because we sometimes need it
when we have no valid credentials set (and are using dummy
credentials in the course). The main use case is the
Webview opened by Shibboleth for FBA.
But as a side-effect, we can use it to handle auth requests
from the updater and other places.
The fields varialbe should contain or'ed flags of the fields set
in the csync_vio_file_stat_t struct. The problem was that the field
for CSYNC_VIO_FILE_STAT_FIELDS_PERM was assigned rather than or'ed
which makes the release function for the struct not freeing the
etag memory => memleak.
When recovering from a inalid move operation, we call
avoidReadFromDbOnNextSync. This will remove the fileid from the db so
we don't detect a move on the next sync. But we want the next sync to fetch
the file id again, and this can only happen if we don't read them
from the db and do the actual PROPFIND, this is done by avoidReadFromDbOnNextSync
However, if there is propagation in that source directory later, it
will overide the invalid etag with the real one and we will not uissue the PROPFIND
to fetch the fileid.
We must therefore also protect the future write to the DB when calling
avoidReadFromDbOnNextSync
With UPDATE_VIEW the plugin gets notified to update the overlays.
It invalidates the entries in the file icon cache for the path
that comes with the UPDATE_VIEW and than refreshes the view.
It is called automatically by QWizard and do not need to be called explicitly
But setVisibla(false) don't really have an effect there since show() is going
to be called on the page
When the url do not have a path (for example: "http://example.com" as
opposed to "http://example.com/"), its path is not a prefix of the
root path of the cookie (usually '/')
By adding the dav path, we make sure the URL has a path.
This made a bug when the owncloud url was just a domain name and did not
have a path
Some PUT, may take a long time on the server to process (for example, the
last chunk). It may take more time that the timeout.
So in that case the server may reply with an url that we can poll for the etag
This patch is still work in progress
Otherwise the buffer might fill up too quickly and get too large and consume
too much memory which could lead to crash in extreme cases
Should fix issue #1974
The fields varialbe should contain or'ed flags of the fields set
in the csync_vio_file_stat_t struct. The problem was that the field
for CSYNC_VIO_FILE_STAT_FIELDS_PERM was assigned rather than or'ed
which makes the release function for the struct not freeing the
etag memory => memleak.
When using the "Limit automatically" limit, we wait for 25% of the time
it took to upload something.
However, if we go to sleep while uploading, the time it took to upload may take
days. And waiting for 25% of a day is too long.
So never wait for more than 10 seconds
This may be related to issue #1880
If the local folder changes, the sync has to be reinitialized as
well. Until now we did not detect that, which led to the case that
the sync folder was not reinitialized in case only the local folder
changed in the setup dialog.
Before, we would only detect it if all the files were removed, and no
file where added or changed. This may not be enough because there might
be a welcome.txt file. Now, we check that none of the file stays the same,
and some files are removed.
Relates issue #1948
We can't call csync_set_userdata in owncloudcmd because it is
going to be overwritten later in the SyncEngine.
So we had an object of type SyncEngine* that we cast to CmdOptions*
and the trust flag was in the padding, so was some random data.
Therefore we must use global variables in that case in order to
know if we should ignore the certificate.
That macro is new in Qt5, define it as well when compiling with Qt4
so we can use it in mirall
Note: QNetworkCookieJar::deleteCookie was not existing in Qt4.
Headers need not to be added if they are not going to be installed
The list was incomplete anyway, and most of the _HEADERS variables
were even not used
Those class are maintaining the folder for the mirall configuration
They are not usefull in command line clients
Also the FolderWatcher is only used by the folder and not used by the
command line clients
Earlier clients used QtKeychain without a QSettings object, which made
QtKeychain to write the password encrypted into a settings default
location, ie. the registry under windows.
If we can not find a password at the new location it is tried to read
the password from the old default location once. That makes people
happy in migration scenarios.
We decided that we never want to rename a directory behind the
back of the user as the user may be using files in the directory
during the sync.
If moving is not allowed, we just erase the inode form the database so
the next sync will try to do an upload and delete and recover from there
using normal resolution.
This also add some code to update the inode back to the db when it is detected
as changed.
The mutex is not shared with any thread, so it is totaly useless.
Yes: there are possible races here. (with the account, but also with the
user and password)
In order to avoid the warning
warning: anonymous variadic macros were introduced in C99
Due to the use of variadic macro in the qDebug macro in Qt 5.3
C++11 requires a space between string literal and macro to avoid the
ambiguity with user defined litteral
That reads the credentials from the mirall config file if it was not
defined on the command line. Moreover, the connection is validated
before, which sets up the credentials properly.
While uploading a new folder, if the folder is renamed on the server
when still uploading, the result will be that the files that are already
uploaded will end up in the new filder name, but the file that were
not still are in the old folder.
After renaming, all the new uploads wil fail with an error on this sync
because the parent directory don't exist.
But they were uploaded with the old name in the next sync because
the renaming was not detected because the file id was not in the DB
Fix the problem by fetching the file id always when creating a new
directory, on the next sync, and saving it in the database ummediatly
https://github.com/owncloud/enterprise/issues/191
The current code only update the permissions in the DB when
the permission becomes non-empty.
Now we update the permission each time they change.
That way the code is the same for file id and permission so it is
simpler.
To distinguish no permission present to nothing is allowed.
That was the intention of the old code but it did not work as
the first if was always taken
Since remotePerm from csync is never NULL (as it is a buffer),
we consider that if it is empty, there was no permission set
(and therefore everything is allowed)
csync will put a space in the permission if any permission was set
If the result of a restored directory is SoftError, this prevent
to sync the rest of the directory
Therefore, we introduced a new status Restored, which means that
the job was a success, but is a restoration and therefore should be
seen as a warning
when the instruction is NONE, we may return from this function
before having registered the permission in the SyncEngine::_remotePerms
hash.
Move the code a bit up.
If we don't have the cookie in the keychain (e.g. the keychain is
unavailable) but there is still session cookie in the cookie jar,
showing the browser won't ask for authentication.
parseCookies did not work as expected. Now we just hard-set the
token credentials into the Cookie header for QNAM jobs.
This is the same behaviour as for neon jobs.
(cherry picked from commit 855a8c0a335f76b82b8e647a8c5a4ae692065d3b)
The legacy job might still need the neon session and the propagator.
We need to make sure the thread exits before.
This fixes crash when pausing a sync made with the legacy jobs
(for example when there is network limitation)
This should fix https://github.com/owncloud/enterprise/issues/200
If the Folder::Map object is kept locally in the wizard, changes to
the map are not reflected there, as they happen when signing out.
This fixes bug #1875
Direcotries are removed at the end, and we don't want to update
parent directory etag before the delete is performed, or the next
sync may read from db and think the files are not removed.
Issue #1845
When we detect a precondition failed, it is possible that it is
because the etag in the database is wrong. We must therefore not
read from the database on the next sync. In order to avoid that, we
reset the etag of parent directories to invalid values
Fixes#1767
Or an url with '#'
Fixes#1838
The problem is a bug fixed in Qt5 now breaks.
In Qt4, QUrl::setPath() did not properly handle path with '#' in them
and QUrl::toString would restitute the '#'.
But csync will blindly do "uri + path" before passing the path to
VIO. because csync_update has no idea that the VIO plugin need special
encoding, the encoding cannot be done there. But csync_owncloud then
encodes the full path. So if the uri contains '#', it must not be already
encoded or there will be two encoding.
The problem was if there was a false conflict: the file has been touched
both on the server and the client.
- etag has changed on the server
- mtime has changed on the server and the client and is the same
- and file size is the same on both the server and the client
This may also happen if the file is uploaded on the server, but the client
looses connection (or crashes) before it get notified of the etag.
In both tree, the instruction is EVAL, but we reduce it to a NONE because
we detected that the conflict is 'false'. Still, we need to update the db
with the new etag. (_should_update_db)
The problem was that we would set the flag on the wrong tree.
This was not a problem when the file was NEW on both side since we checked
for null etag and used the other one then.
We need to compare the other way round and compare only the file name
because our sync directory might be symlinked and then resolve to
another canonical path (but we were only interested in the filename part
anyway)
When we abort, each job currently running may result in a call to finished().
It used to cause a crash because we would unlock the _syncMutex twice
Fixes#1793
This will cause the browser window to open again after it has been told to close
if a network job has run in the background while the browser window was visible.
Fixes#1814
The goal here is that it is going to be destroyed with the application
It need to be destoyed so the folder are destroyed, which is required
for properly finishing the sync while exiting.
It must not be destroyed after the application because the QSQLite plugin
may be already destroyed in that case.
Since the constructor of FolderMan is called earlier, we can't call the
config file too early
fixes 1793
Returns true if the underlying file system is case preserving instead
of case sensitive. That is true for Mac and Windows currently. Only
Linux has a case sensitive file system usually.
- Don't give the settings window an always-on-top hint, or else
sub dialogs will pop-under. Also, people seem to (ab-)use it
as a status monitor... well
- raiseWidget() can only really do one thing: remove the dialog status
from dialogs without a parent due to a bug in Qt. The previous
implementation never really worked. Tested on Mac and Gnome 3 so far.
Fixes#1795
Fixes parts of #1775
The shibboleth implementation no longer maintains its own QNAM.
Instead, MirallAccessManager now holds a custom QNAM implementation
which saves cookies to a file on disk.
This patch also reduces some complexity wrt the browser window,
which used to be deleted via a roundtrip to its callee, which
is not longer required.
Fixes#1764 and Enterprise bug #165
Going forward, AbstractCredentials::getQNAM() could maybe removed entirely.
If a user only builds some parts of the documentation and afterwards
wants to install owncloud-client afterwards via "make install", the
built parts should be installed in any case.
bubbleUpSyncResult is only called from slotSyncFinished, so if _engine
is invalid there, it is also invalid in slotSyncFinished
This reverts commit aee7515d42.
In case two renames are done on the same file/folder very quickly we
lost the information that the second operation was also a rename. That
was because we tried to get the inode value from a stat on the file once
the first rename was finished. But at that point, the file was already
gone because of the second rename.
Now the original inode is kept and written to db in case the file can
not be stat'ed.
This fixes bug #1737
We don't include them in the total amout of files so it should
not be included in the progress either.
Also, for some reasons directories seems to be 16kB on windows
Fixup commit 9193286fc1
Use the right URL for the PROPPATCH and HEAD, do not let other
jobs start when we wait for the UpdateMTimeAndETagJob
Update the etag and the fileid of the real item.
Changed the account settings estimation to display both current file and overwhole estimation.
Decresed the progress font size to fit the added information
This is only used for a very specific server that do not support
changing the extension of files without re-uploading the file.
Since the change is small and self contained, it is guarded by a #ifdef
(Removed old BLACKLIST_ON_ERROR option that is no longer in use)
Before, we would only set up a file system watcher when we read the
config at startup. But we also need to do it in the other case when
the user configure new folder to watch
We can't use the quota job for that as it needs the credidentials and therefore
may re-enter the credidential code when we are currently trying to fetch the credentials.
The quotainfo.cpp part of this patch is basically a revert of d836b80153
We fetch the id from the server, but don't save them in the database.
I Could have used INSTRUCTION_UPDATED for that, but then i would need to update the
reconcile algorithm to take in account the fact that UPDATED is possible there.
Instead, use should_update_etag which means the db is going to be written again
Remove reference to old instruction _UPDATED and _DELETED which does not make sens with
the new propagator
Improve the test to test this case, and that etags are properly writen to the DB
when there is a fake conflict
This can cause the crash because the _engine member is deleted in the
sync finished slot. The solution is to store the stopWatch object
before the engine is destroyed.
Fixes bug #1675
From the Qt 5 documentation:
Note: when porting QDesktopServices::DataLocation(obsolete)
to QStandardPaths::DataLocation, a different path will
be returned.
QDesktopServices::DataLocation was GenericDataLocation
+ "/data/organization/application", while
QStandardPaths::DataLocation is GenericDataLocation
+ "/organization/application".
We'll resort to the deprecated version, since we'll need to fix
data locations to be XDG compliant sooner than later anyway
(currently scheduled for 1.8)
- Use SHA 265 instead of obsolete MD5 where possible (Qt5)
- Remove <tt> formatting: that simply looked ugly
- Wrap SHA 265 hash
- Use spaces as separators
As usual, the default needs to remain ':' separation, because
it's needed to pass valid hashes to csync.
set(SOCKETAPI_TEAM_IDENTIFIER_PREFIX""CACHESTRING"SocketApi prefix (including a following dot) that must match the codesign key's TeamIdentifier/Organizational Unit")
endif()
find_package(OpenSSL1.0.0REQUIRED)
if(APPLE)
find_package(Sparkle)
endif(APPLE)
if(UNIX)
find_package(INotifyREQUIRED)
else()
@@ -109,7 +155,13 @@ endif()
find_package(Sphinx)
find_package(PdfLatex)
find_package(SQLite33.8.0REQUIRED)
# On some OS, we want to use our own, not the system sqlite
@@ -5,10 +5,11 @@ direct these to the [mailing list][mailinglist] or our [forum][forum].
We are also available on [IRC][irc].
### Bug Reporting Guidelines
* Important: Report the issue using our [template][template], it includes all the
informations we need to track down the issue.
*__Important__: Report the issue using our [template][template], it includes all the
information we need to track down the issue.
* __SECURITY__: Report any potential security bug to security@owncloud.com following our [security policy](https://owncloud.org/security/) instead of filing an issue in our bug tracker
* This repository is *only* for issues within the ownCloud desktop client.
Issues in other compontents should be reported in their own repositores:
Issues in other components should be reported in their own repositores:
RUN zypper --non-interactive --gpg-auto-import-keys refresh
RUN zypper --non-interactive --gpg-auto-import-keys ar http://download.opensuse.org/repositories/windows:/mingw/openSUSE_42.1/windows:mingw.repo
RUN zypper --non-interactive --gpg-auto-import-keys ar http://download.opensuse.org/repositories/isv:ownCloud:toolchains:mingw:win32:2.2/openSUSE_Leap_42.1/isv:ownCloud:toolchains:mingw:win32:2.2.repo
RUN zypper --non-interactive --gpg-auto-import-keys install cmake make mingw32-cross-binutils mingw32-cross-cpp mingw32-cross-gcc \
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Gelditu beharreko ${APPLICATION_EXECUTABLE} prozesua(k) aurkitu dira.$\nNahi duzu instalatzaileak zure partetik hauek gelditzea?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"kill prozesua ez da aurkitu!"
StrCpy$PageReinstall_NEW_Field_1"${APPLICATION_NAME}ren bertsio zaharrago bat instalatuta dago. Aholkatzen da hau desinstalatzea berria instalatu baino lehen. Hautatu nahi duzun aukera eta sakatu Hurrengoa jarraitzeko."
StrCpy$PageReinstall_NEW_Field_2"Desinstalatu instalatu baino lehen"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Hautatu nola nahi duzun ${APPLICATION_NAME} instalatzea."
StrCpy$PageReinstall_OLD_Field_1"${APPLICATION_NAME}ren bertsio berriago bat instalatuta dago! Ez da aholkatzen bertsio zaharrago bat instalatzea. Benetan bertsio zaharrago hau instalatu nahi baduzu, hobe da lehenengo bertsio berria desinstalatzea. Hautatu nahi duzun aukera eta sakatu Hurrengoa jarraitzeko."
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
StrCpy$PageReinstall_NEW_Field_1"An older version of ${APPLICATION_NAME} is installed on your system. It is recommended that you uninstall the current version before installing. Select the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_OLD_Field_1"A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE"Choose the maintenance option to perform."
StrCpy$UNINSTALLER_APPDATA_LABEL_2"Leave unchecked to keep the data folder for later use or check to delete the data folder."
StrCpy$UNINSTALL_MESSAGEBOX"It does not appear that ${APPLICATION_NAME} is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?"
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
StrCpy$UAC_ERROR_ELEVATE"Unable to elevate, error:"
StrCpy$UAC_ERROR_LOGON_SERVICE"Logon service is not running, aborting!"
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Mostrar les notes de versió"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"S'ha trobat el(s) procés ${APPLICATION_EXECUTABLE} que s'ha d'aturar.$\nVoleu que l'instal·lador l'aturi?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"S'estan matant els processos ${APPLICATION_EXECUTABLE}."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Procés per matar no trobat!"
StrCpy$PageReinstall_NEW_Field_1"Una versió anterior de ${APPLICATION_NAME} està instal·lada en el vostre sistema. Es recomana desinstal·lar la versió actual abans d'instal·lar. Seleccioneu l'operació que desitjeu realitzar i feu clic a Següent per continuar."
StrCpy$PageReinstall_NEW_Field_2"Desinstal·lar abans d'instal·lar"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Trieu la manera com voleu instal·lar ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Una versió més recent de ${APPLICATION_NAME} ja està instal.lada!! No es recomana instal.lar una versió més antiga. Si realment voleu instal.lar una versió més antiga, és millor primer desinstal.lar la versió actual. Seleccioni l'operació que desitjeu realitzar i feu clic a Següent per a continuar."
StrCpy$INIT_NO_DESKTOP"Drecera de l'escrpitori (sobreescriu l'existent)"
StrCpy$UAC_ERROR_ELEVATE"No es pot elevar, error:"
StrCpy$UAC_INSTALLER_REQUIRE_ADMIN"Aquest instal·lador requereix accés d'administrador, intenteu-ho de nou"
StrCpy$INIT_INSTALLER_RUNNING"L'instal·lador ja s'està executant."
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"Aquest desinstal·lador requereix accés d'administrador, intenteu-ho de nou."
StrCpy$INIT_UNINSTALLER_RUNNING"El desinstal·lador ja s'està executant."
StrCpy$SectionGroup_Shortcuts"Dreceres"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
StrCpy$PageReinstall_OLD_Field_1"A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
StrCpy$UNINSTALL_MESSAGEBOX"It does not appear that ${APPLICATION_NAME} is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?"
StrCpy$INIT_UNINSTALLER_RUNNING"The uninstaller is already running."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
StrCpy$UAC_ERROR_LOGON_SERVICE"Logon service is not running, aborting!"
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Zobrazit poznámky k vydání"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Nalezen proces(y) ${APPLICATION_EXECUTABLE}, které je nutné ukončit .$\nPřejete si, aby je instalátor za vás ukončil?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Proces k ukončení nebyl nalezen! "
StrCpy$PageReinstall_NEW_Field_1"Starší verze ${APPLICATION_NAME} je nainstalována na tomto systému. Doporučuje se předem tuto verzi odinstalovat. Zvolte operaci, kterou chcete uskutečnit, a klikněte na tlačítko Další pro pokračování."
StrCpy$PageReinstall_NEW_Field_2"Odinstalovat před instalací"
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Zobrazit poznmky k vydn¡"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Nalezen proces(y) ${APPLICATION_EXECUTABLE}, kter‚ je nutn‚ ukonŸit .$\nPýejete si, aby je instaltor za vs ukonŸil?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Proces k ukonŸen¡ nebyl nalezen! "
StrCpy$PageReinstall_NEW_Field_1"Starç¡ verze ${APPLICATION_NAME} je nainstalovna na tomto syst‚mu. DoporuŸuje se pýedem tuto verzi odinstalovat. Zvolte operaci, kterou chcete uskuteŸnit, a kliknØte na tlaŸ¡tko Dalç¡ pro pokraŸovn¡."
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Zvolte, jak chcete ${APPLICATION_NAME} nainstalovat."
StrCpy$PageReinstall_OLD_Field_1"Novější verze aplikace ${APPLICATION_NAME} je již nainstalována. Instalace starší verze se nedoporučuje. Pokud opravdu chcete tuto starší verzi nainstalovat, je lepší nejprve odinstalovat současnou verzi. Zvolte požadovanou operaci a klikněte na Další pro pokračování."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} je již nainstalována.\nZvolte požadovanou operaci a klikněte na Další pro pokračování."
StrCpy$PageReinstall_SAME_Field_2"Přidat či znovu instalovat komponenty"
StrCpy$PageReinstall_OLD_Field_1"NovØjç¡ verze aplikace ${APPLICATION_NAME} je ji§ nainstalovna. Instalace starç¡ verze se nedoporuŸuje. Pokud opravdu chcete tuto starç¡ verzi nainstalovat, je lepç¡ nejprve odinstalovat souŸasnou verzi. Zvolte po§adovanou operaci a kliknØte na Dalç¡ pro pokraŸovn¡."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} je ji§ nainstalovna.$\n$\nZvolte po§adovanou operaci a kliknØte na Dalç¡ pro pokraŸovn¡."
StrCpy$PageReinstall_SAME_Field_2"Pýidat Ÿi znovu instalovat komponenty"
StrCpy$OPTION_SECTION_SC_DESKTOP_Desc"Zástupce na ploše pro ${APPLICATION_NAME}."
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_Desc"Zástupce rychlého spuštění pro ${APPLICATION_NAME}."
StrCpy$UNINSTALLER_APPDATA_SUBTITLE"Odstraňte složku s daty aplikace ${APPLICATION_NAME} z tohoto počítače."
StrCpy$UNINSTALLER_APPDATA_LABEL_1"Chcete smazat složku s daty ${APPLICATION_NAME}?"
StrCpy$UNINSTALLER_APPDATA_LABEL_2"Ponechejte nezaškrtnuté, pokud chcete složku s daty ponechat pro pozdější využití, nebo zaškrtněte, pokud chcete složku smazat."
StrCpy$UNINSTALLER_APPDATA_CHECKBOX"Ano, smazat tuto složku s daty."
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Toon opmerkingen bij deze uitgave"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Gevonden ${APPLICATION_EXECUTABLE} proces(sen) moet worden gestopt.$\nWilt u dat het installatieprogramma dat voor u doet?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Het te stoppen proces is niet gevonden!"
StrCpy$PageReinstall_NEW_Field_1"Er is een oudere versie van ${APPLICATION_NAME} geïnstalleerd op uw systeem. geadviseerd wordt om de huidige versie te de-installeren voordat de nieuwe versie wordt geïnstalleerd. Selecteer de uit te voeren actie en klik op Verder om door te gaan."
StrCpy$PageReinstall_NEW_Field_2"De-installeren voor installeren"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Kies hoe u ${APPLICATION_NAME} wilt installeren."
StrCpy$PageReinstall_OLD_Field_1"Er is al een recentere versie van ${APPLICATION_NAME} geïnstalleerd! Installeren van een oudere versie wordt niet aangeraden. Als u echt de oudere versie wilt installeren, adviseren we de huidige versie eerst te verwijderen. Kies de actie die u wilt uitvoeren en druk op Verder om door te gaan."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is al geïnstalleerd.\nKies de actie die u wilt uitvoeren en druk op Verder om door te gaan."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is al geïnstalleerd.$\n$\nKies de actie die u uit wil voeren en druk op Verder om door te gaan."
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Choose how you want to install ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Vali, kuidas sa soovid paigaldada ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Uuem versioon ${APPLICATION_NAME} on juba paigaldatud! Vanema versiooni paigaldus ei ole soovitatav. Kui tõesti tahad paigaldada vanemat versiooni, siis on parem esmalt eemaldada olemasolev. Vali tehtav toiming ning kliki Jätka."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} on juba paigaldatud.\nVali tehtav toiming ning kliki Jätka."
StrCpy$UAC_ERROR_ELEVATE"Ei suuda ülendada õigusi, viga: "
StrCpy$UAC_INSTALLER_REQUIRE_ADMIN"See paigaldaja vajab admini ligipääsu, proovi uuesti"
StrCpy$INIT_INSTALLER_RUNNING"Paigaldaja on juba käimas."
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"See desinstallija vajab admini ligipääsu, proovi uuesti"
StrCpy$INIT_UNINSTALLER_RUNNING"See desinstallija on juba käimas"
StrCpy$SectionGroup_Shortcuts"Viidad"
StrCpy$UAC_ERROR_LOGON_SERVICE"Sisselogimisteenus ei tööta, katkestamine!"
StrCpy$INIT_UNINSTALLER_RUNNING"See desinstallija on juba käimas."
StrCpy$SectionGroup_Shortcuts"Otseteed"
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"نمایش پادداشت های انتشار نسخه"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"${APPLICATION_EXECUTABLE} پردازش (ها) که باید متوقف شوند را پیدا کرد. $\nآیا میخواهیم برنامه نصاب این پردازشها را برای شما متوقف کند ؟"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"پردازش برای از بین بردن یافت نشد!"
StrCpy$PageReinstall_NEW_Field_1"نسخهی قدیمی از برنامه ${APPLICATION_NAME} بر روی سیستم شما نصب شده است، پیشنهاد میشود نسخهی فعلی را قبل از نصب حذف کنید. عملیات مورد نظر را انتخاب کنید و برای ادامه روی دکمه Next کلیک کنید."
StrCpy$PageReinstall_NEW_Field_2"عمل حذف را قبل از نصب انجام دهید"
StrCpy$PageReinstall_NEW_Field_3"حذف نکن"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_TITLE"از قبل نصب شده است"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"نحوهی نصب ${APPLICATION_NAME} را انتخاب کنید."
StrCpy$PageReinstall_OLD_Field_1"نسخه جدیدتری از برنامه ${APPLICATION_NAME} بر روی سیستم شما نصب شده است، نصب نسخهی قدیمیتر پیشنهاد نمیشود. درصورتیکه میخواهید نسخهی قدیمی را نصب کنید، حذف نسخهی کنونی قبل از اجرای نصب جدید پیشنهاد میشود. عملیات مورد نظر را انتخاب و بر روی دکمهی Next کلیک کنید."
StrCpy$PageReinstall_SAME_Field_1"نسخه ${VERSION} از ${APPLICATION_NAME} هماکنون نصب شده است.$↩$\nعملیات مورد نظر را انتخاب و بر روی دکمه Next کلیک کنید."
StrCpy$OPTION_SECTION_SC_DESKTOP_Desc"میانبر دسکتاپ برای ${APPLICATION_NAME} ."
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_Desc"میانبر اجرای سریع برای ${APPLICATION_NAME}"
StrCpy$UNINSTALLER_FILE_Detail"نوشتن حذف کننده"
StrCpy$UNINSTALLER_REGISTRY_Detail"در حال نوشتن کلید های رجیستری نصاب"
StrCpy$UNINSTALLER_FINISHED_Detail"اتمام"
StrCpy$UNINSTALL_MESSAGEBOX"به نظر نمی رسد نرم افزار ${APPLICATION_NAME} در '$INSTDIR'.$\n$\nنصب شده باشد.$\nآیا می خواهید ادامه دهید ( توصیه نشده است ) ؟"
StrCpy$UNINSTALL_ABORT"عمل حذف توسط کاربر متوقف شد"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Havaittiin sovelluksen ${APPLICATION_EXECUTABLE} prosessi (tai prosesseja) jotka pitäisi pysäyttää.$\nHaluatko että asennusohjelma pysäyttää nämä puolestasi?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Tapettavaa prosessia ei löytynyt!"
StrCpy$PageReinstall_NEW_Field_1"Vanhempi versio sovelluksesta ${APPLICATION_NAME} on jo asennettu. On suositeltavaa että poistat vanhan asennuksen ensin. Valitse mikä toiminto suoritetaan ja napsauta Seuraava jatkaaksesi."
StrCpy$PageReinstall_NEW_Field_2"Poista ennen asentamista"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Valitse miten ${APPLICATION_NAME} asennetaan."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} on jo asennettu.\nValitse suoritettava toimenpide ja napsauta Seuraava jatkaaksesi."
StrCpy$PageReinstall_OLD_Field_1"Uudempi versio sovelluksesta ${APPLICATION_NAME} on jo asennettu! Vanhan version asennus ei ole suositeltavaa. Jos todella haluat asentaa vanhemman version, kannattaa poistaa nykyisen version asennus ensin. Valitse minkä toimenpiteen haluat suorittaa ja paina Seuraava jatkaaksesi."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} on jo asennettu.$\n$\nValitse haluamasi toiminto ja napsauta Seuraava jatkaaksesi."
StrCpy$UNINSTALL_MESSAGEBOX"Vaikuttaa siltä että sovellus ${APPLICATION_NAME} on asennettu kansioon '$INSTDIR'.$\n$\nHaluatko jatkaa tästä huolimatta (ei suositeltavaa)?"
StrCpy$UNINSTALL_ABORT"Poistaminen keskeytettiin käyttäjän toimesta"
StrCpy$UAC_ERROR_ELEVATE"Kohottaminen ei onnistu, virhe:"
StrCpy$UAC_INSTALLER_REQUIRE_ADMIN"Tämä asennusohjelma vaatii ylläpitäjän oikeudet, yritä uudelleen."
StrCpy$INIT_INSTALLER_RUNNING"Asennusohjelma on jo käynnissä."
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"Tämä poisto-ohjelma vaatii ylläpitäjän oikeudet, yritä uudelleen."
StrCpy$UAC_ERROR_LOGON_SERVICE"Kirjautumispalvelu ei ole käynnissä, perutaan!"
StrCpy$INIT_UNINSTALLER_RUNNING"Poisto-ohjelma on jo käynnissä."
StrCpy$SectionGroup_Shortcuts"Pikakuvakkeet"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
StrCpy$PageReinstall_NEW_Field_1"An older version of ${APPLICATION_NAME} is installed on your system. It is recommended that you uninstall the current version before installing. Select the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_OLD_Field_1"A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
StrCpy$UNINSTALL_MESSAGEBOX"It does not appear that ${APPLICATION_NAME} is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?"
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Montrer les notes de version"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Le(s) processus en cours d’exécution ${APPLICATION_EXECUTABLE} doit être stoppé afin de poursuivre.$\nVoulez-vous que le programme d’installation s’en charge pour vous ?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"Fermeture du processus ${APPLICATION_EXECUTABLE}."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Les processus à stopper n'ont pas été trouvés."
StrCpy$PageReinstall_NEW_Field_1"Une vieille version de ${APPLICATION_NAME} est installée sur votre système. Il est recommandé que vous désinstalliez cette version avant l'installation. Sélectionnez l'opération que vous voulez exécuter et cliquez sur Suivant pour continuer."
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Afficher les notes de version"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Les processus ${APPLICATION_EXECUTABLE} en cours d’exécution doivent être stoppés avant de poursuivre.$\nVoulez-vous que le programme d’installation s’en charge pour vous ?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"Fermeture des processus ${APPLICATION_EXECUTABLE}."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Le processus à stopper n'a pas été trouvé !"
StrCpy$PageReinstall_NEW_Field_1"Une ancienne version de ${APPLICATION_NAME} est installée sur votre système. Il est recommandé de désinstaller cette version avant de continuer. Sélectionnez l'opération que vous voulez exécuter et cliquez sur Suivant pour continuer."
StrCpy$PageReinstall_NEW_Field_2"Désinstaller avant d'installer à nouveau"
StrCpy$PageReinstall_NEW_Field_3"Ne pas désinstaller"
StrCpy$PageReinstall_OLD_Field_1"Une version plus récente de ${APPLICATION_NAME} est déjà installée ! Il n'est pas recommandé d'installer une version plus ancienne. Si vous voulez vraiment installer cette version plus ancienne, il est préférable de d'abord désinstaller la version courante. Sélectionnez l'opération que vous voulez exécuter et cliquez sur Suivant pour continuer."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} est déjà installée.\nSélectionnez l'opération que vous voulez exécuter et cliquez sur Suivant pour continuer."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} est déjà installé.$\n$\nSélectionnez l'opération que vous souhaitez effectuer et cliquez sur Suivant pour continuer."
StrCpy$PageReinstall_SAME_Field_2"Ajouter/Réinstaller des composants"
StrCpy$PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE"Choisir l'option de maintenance à appliquer."
StrCpy$SEC_APPLICATION_DETAILS"Installer les essentiels de ${APPLICATION_NAME}."
StrCpy$PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE"Choisir l'opération de maintenance à effectuer."
StrCpy$SEC_APPLICATION_DETAILS"Installation des essentiels de ${APPLICATION_NAME}."
StrCpy$OPTION_SECTION_SC_SHELL_EXT_SECTION"Intégration à l'Explorateur Windows"
StrCpy$OPTION_SECTION_SC_SHELL_EXT_DetailPrint"Installation de l'intégration à l'Explorateur Windows..."
StrCpy$OPTION_SECTION_SC_START_MENU_SECTION"Raccourci programme du menu Démarrer"
StrCpy$OPTION_SECTION_SC_START_MENU_DetailPrint"Ajouter un raccourci pour ${APPLICATION_NAME} au menu Démarrer."
StrCpy$OPTION_SECTION_SC_START_MENU_DetailPrint"Ajout d'un raccourci pour ${APPLICATION_NAME} au menu Démarrer."
StrCpy$OPTION_SECTION_SC_DESKTOP_SECTION"Raccourci Bureau"
StrCpy$OPTION_SECTION_SC_DESKTOP_DetailPrint"Créer un raccourci Bureau"
StrCpy$OPTION_SECTION_SC_DESKTOP_DetailPrint"Création d'un raccourci sur le Bureau"
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_SECTION"Raccourci de lancement rapide"
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint"Créer un raccourci de lancement rapide"
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_DetailPrint"Création d'un raccourci de lancement rapide"
StrCpy$OPTION_SECTION_SC_APPLICATION_Desc"Essentiels de ${APPLICATION_NAME}."
StrCpy$OPTION_SECTION_SC_START_MENU_Desc"Raccourci de ${APPLICATION_NAME}"
StrCpy$OPTION_SECTION_SC_DESKTOP_Desc"Raccourci Bureau de ${APPLICATION_NAME}."
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_Desc"Raccourci de lancement rapide de ${APPLICATION_NAME}."
StrCpy$UNINSTALLER_APPDATA_SUBTITLE"Supprimer de cet ordinateur le dossier de données de ${APPLICATION_NAME}."
StrCpy$UNINSTALLER_APPDATA_LABEL_1"Voulez-vous supprimer le dossier de données de ${APPLICATION_NAME} ?"
StrCpy$UNINSTALLER_APPDATA_LABEL_2"Laisser non-coché pour garder le dossier de données pour un usage ultérieur. Cocher pour supprimer le dossier de données."
StrCpy$UNINSTALLER_APPDATA_CHECKBOX"Oui, supprimer ce dossier de données."
StrCpy$UNINSTALLER_FILE_Detail"Écriture du désinstallateur"
StrCpy$UNINSTALLER_REGISTRY_Detail"Écriture des clefs de registre du désinstallateur"
StrCpy$UNINSTALLER_FINISHED_Detail"Terminé"
StrCpy$UNINSTALL_MESSAGEBOX"Il semble que ${APPLICATION_NAME} ne soit pas installée dans le dossier '$INSTDIR'.$\n$\nVoulez-vous poursuivre (non recommandé) ?"
StrCpy$UNINSTALL_MESSAGEBOX"Il semble que ${APPLICATION_NAME} ne soit pas installé dans le dossier '$INSTDIR'.$\n$\nVoulez-vous poursuivre (non recommandé) ?"
StrCpy$UNINSTALL_ABORT"Désinstallation interrompue par l'utilisateur"
StrCpy$INIT_NO_QUICK_LAUNCH"Raccourci de lancement rapide (N/A)"
StrCpy$INIT_NO_QUICK_LAUNCH"Raccourci de lancement rapide (non disponible)"
StrCpy$INIT_NO_DESKTOP"Raccourci bureau (remplace l’existant)"
@@ -3,20 +3,21 @@ StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Amosar as notas de publicaci
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Atopáronse procesos ${APPLICATION_EXECUTABLE} que teñen que ser detidos.$\nQuere que sexa o instalador quen o(s) deteña?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"Matando os procesos ${APPLICATION_EXECUTABLE}."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Non se atopou o proceso para matalo!"
StrCpy$PageReinstall_NEW_Field_1"No seu sistema hai instalada unha versión anterior do ${APPLICATION_NAME}. Recomendámoslle que desinstale a versión actual antes de instalar. Seleccione a operación que quere realizar e prema en Seguinte para continuar."
StrCpy$PageReinstall_NEW_Field_1"No seu sistema hai instalada unha versión anterior de ${APPLICATION_NAME}. Recomendámoslle que desinstale a versión actual antes de instalar. Seleccione a operación que quere realizar e prema en Seguinte para continuar."
StrCpy$PageReinstall_NEW_Field_2"Desinstalar antes de instalar"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Escolla como quere instalar ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Ten instalada unha versión actualizada do ${APPLICATION_NAME}! recomendámoslle que non instale unha versión anterior. Se realmente quere instalar esta versión máis antiga, é preferíbel que desinstale a versión actual antes de instalar. Seleccione a operación que quere realizar e prema en Seguinte para continuar."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} xa está instalado.\nSeleccione a operación que que quere realizar e prema en Seguinte para continuar."
StrCpy$OPTION_SECTION_SC_START_MENU_Desc"Acceso directo ao ${APPLICATION_NAME}."
StrCpy$OPTION_SECTION_SC_DESKTOP_Desc"Acceso directo no escritorio para "
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_Desc"Acceso de inicio rápido para ${APPLICATION_NAME}."
StrCpy$UNINSTALLER_APPDATA_SUBTITLE"Retirar o cartafol de datos do ${APPLICATION_NAME} do seu computador."
StrCpy$UNINSTALLER_APPDATA_LABEL_1"Confirma que quere eliminar o cartafol de datos do ${APPLICATION_NAME}?"
StrCpy$UNINSTALLER_APPDATA_LABEL_2"Deixeo sen marcar para manter o cartafol de datos para o seu uso posterior ou marqueo para eliminar o cartafol de datos."
StrCpy$UNINSTALLER_APPDATA_CHECKBOX"Si, eliminar este cartafol de datos."
StrCpy$UNINSTALLER_FILE_Detail"Escribindo o desinstalador"
StrCpy$UNINSTALLER_REGISTRY_Detail"Escribindo o instalador nas chaves do rexistro"
StrCpy$UNINSTALLER_FINISHED_Detail"Rematado"
@@ -37,8 +34,10 @@ StrCpy $UNINSTALL_ABORT "A desinstalaci
StrCpy$INIT_NO_QUICK_LAUNCH"Acceso de inicio rápido (n/d)"
StrCpy$INIT_NO_DESKTOP"Atallo no escritorio (sobrescribe o existente)"
StrCpy$UAC_ERROR_ELEVATE"Non foi posíbel elevalo, erro:"
StrCpy$UAC_INSTALLER_REQUIRE_ADMIN"Este instalador require acceso de administrador, tenteo de novo"
StrCpy$UAC_INSTALLER_REQUIRE_ADMIN"Este instalador require acceso de administrador, ténteo de novo"
StrCpy$INIT_INSTALLER_RUNNING"O instalador xa está en execución."
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"Este desinstalador require acceso de administrador, tenteo de novo"
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"Este desinstalador require acceso de administrador, ténteo de novo"
StrCpy$UAC_ERROR_LOGON_SERVICE"O servizo de acceso non está en execución, cancelando!"
StrCpy$INIT_UNINSTALLER_RUNNING"O desinstalador xa está en execución."
StrCpy$SectionGroup_Shortcuts"Atallos"
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Wählen Sie die Methode, mit der sie ${APPLICATION_NAME} installieren wollen."
StrCpy$PageReinstall_OLD_Field_1"Eine neuere Version von ${APPLICATION_NAME} ist bereits installiert! Es wird nicht empfohlen, eine ältere Version zu installieren. Wollen Sie dies trotzdem tun, so sollten Sie die aktuelle Version zunächst entfernen. Wählen Sie eine Vorgehensweise und wählen dann $\"Weiter$\"."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} ist bereits installiert.\nWählen Sie eine Vorgehensweise und klicken Sie auf $\"Weiter$\"."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} ist bereits installiert. $\nWählen Sie eine Vorgehensweise und klicken Sie auf $\"Weiter$\"."
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Βρέθηκε η(οι) διεργασία(ες) ${APPLICATION_EXECUTABLE} η(οι) οποία(ες) θα πρέπει να τερματιστεί(ούν).$\nΘα θέλατε να την(τις) τερματίσει ο βοηθός εγκατάστασης για εσάς;"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Δεν βρέθηκε διεργασία για βίαιο τερματισμό!"
StrCpy$PageReinstall_NEW_Field_1"Μια παλαιότερη έκδοση της ${APPLICATION_NAME} είναι εγκατεστημένη στο σύστημά σας. Είναι προτεινόμενο να απεγκαταστήσετε την τρέχουσα έκδοση πριν την εγκατάσταση. Επιλέξτε τη διαδικασία που επιθυμείτε ναπραγματοποιείσετε και πατήστε Επόμενο γιανα συνεχίσετε."
StrCpy$PageReinstall_NEW_Field_1"Μια παλαιότερη έκδοση της ${APPLICATION_NAME} είναι εγκατεστημένη στο σύστημά σας. Είναι προτεινόμενο να απεγκαταστήσετε την τρέχουσα έκδοση πριν την εγκατάσταση. Επιλέξτε τη διαδικασία που επιθυμείτε ναεκτελέσετε και πατήστε Επόμενο γιανα συνεχίσετε."
StrCpy$PageReinstall_NEW_Field_2"Απεγκατάσταση πριν την εγκατάσταση"
StrCpy$PageReinstall_NEW_Field_3"Να μην απεγκατασταθεί"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Επιλέξτε πώς θέλετε να εγκαταστήσετε την ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Μια νεώτερη έκδοση της ${APPLICATION_NAME} είναι ήδη εγκατεστημένη! Δεν συνίσταται να εγκαταστείσετε μια παλαιότερη έκδοση. Εάν θέλετε πραγματικά να εγκαταστήσετε αυτή την παλαιότερη έκδοση, είναι καλύτερο να απεγκαταστήσετε την τρέχουσα έκδοση πρώτα. Επιλέξτε τη διαδικασία που επιθυμείτε ναπραγματοποιείσετε και επιλέξτε Επόμενο γιανα συνεχίσετε."
StrCpy$PageReinstall_SAME_Field_1"Η ${APPLICATION_NAME} ${VERSION} είναι ήδη εγκατεστημένη.\n\nΕπιλέξτε τη διαδικασία που επιθυμείτε ναπραγματοποιείσετε και επιλέξτε Επόμενο γιανα συνεχίσετε."
StrCpy$PageReinstall_OLD_Field_1"Μια νεώτερη έκδοση της ${APPLICATION_NAME} είναι ήδη εγκατεστημένη! Δεν συνίσταται να εγκαταστείσετε μια παλαιότερη έκδοση. Εάν θέλετε πραγματικά να εγκαταστήσετε αυτήν την παλαιότερη έκδοση, είναι καλύτερο να απεγκαταστήσετε την τρέχουσα έκδοση πρώτα. Επιλέξτε τη διαδικασία που επιθυμείτε ναεκτελέσετε και επιλέξτε Επόμενο γιανα συνεχίσετε."
StrCpy$PageReinstall_SAME_Field_1"Η ${APPLICATION_NAME} ${VERSION} είναι ήδη εγκατεστημένη.$\n$\nΕπιλέξτε τη λειτουργία που επιθυμείτε ναεκτελέσετε και επιλέξτε Επόμενο γιανα συνεχίσετε."
StrCpy$OPTION_SECTION_SC_DESKTOP_Desc"Συντόμευση στην επιφάνεια εργασίας της "
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_Desc"Συντόμευση Ταχείας Εκκίνησης της "
StrCpy$UNINSTALLER_APPDATA_SUBTITLE"Αφαίρεση του φακέλου δεδομένων της ${APPLICATION_NAME} από τον υπολογιστή σας"
StrCpy$UNINSTALLER_APPDATA_LABEL_1"Θέλετε να αφαιρέσετε τον φάκελο δεδομένων της ${APPLICATION_NAME};"
StrCpy$UNINSTALLER_APPDATA_LABEL_2"Αφήστε κενό γιανα διατηρήσετε τον φάκελο δεδομένων για μελλοντική χρήση ή επιλέξτε γιανα διγράψετε το φάκελο δεδομένων."
StrCpy$UNINSTALLER_APPDATA_CHECKBOX"Να διαγραφεί ο φάκελος δεδομένων."
StrCpy$OPTION_SECTION_SC_DESKTOP_Desc"Συντόμευση επιφάνειας εργασίας της ${APPLICATION_NAME}."
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_Desc"Συντόμευση Ταχείας Εκκίνησης της ${APPLICATION_NAME}."
StrCpy$UNINSTALLER_REGISTRY_Detail"Εγγραφή Κλειδιών μητρώου (Registry) της Εφαρμογής Εγκατάστασης"
StrCpy$UNINSTALLER_FINISHED_Detail"Ολοκλήρωση"
StrCpy$UNINSTALL_MESSAGEBOX"Φαίνεται πως η ${APPLICATION_NAME} είναι εγκατεστημένη στον κατάλογο '$INSTDIR'.$\n$\nΣυνέχιση παρ' όλα αυτά (δεν συνίσταται);"
StrCpy$UNINSTALLER_FINISHED_Detail"Ολοκληρώθηκε"
StrCpy$UNINSTALL_MESSAGEBOX"Δεν φαίνεται να είναι εγκατεστημένηη η ${APPLICATION_NAME} στον κατάλογο '$INSTDIR'.$\n$\nΣυνέχιση παρ' όλα αυτά (δεν συνίσταται);"
StrCpy$UNINSTALL_ABORT"Η απεγκατάσταση ματαιώθηκε από το χρήστη"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"A következő folyamatot(okat) meg kell állítani ${APPLICATION_EXECUTABLE}.$\nSzeretné ha a telepítő program megállítani ezeket a folyamatokat?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"${APPLICATION_EXECUTABLE} folyamat kilövése."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"A kilövésre szánt folyamat nem található!"
StrCpy$PageReinstall_NEW_Field_1"Az ${APPLICATION_NAME} alkalmazás egy régebbi verziója telepítve van a rendszeren. Ajánlott a régi alkalmazás eltávolítása mielőtt a legfrissebb verziót telepítené. Válassza ki milyen műveletet szeretne végrehajtani, és nyomja meg a $\"Következő$\" gombot a folytatáshoz."
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Válaszd ki, hogy szeretnéd telepíteni a következő alkalmazást ${APPLICATION_NAME}."
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Válassza ki, hogy szeretné telepíteni a következő alkalmazást: ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Az ${APPLICATION_NAME} alkalmazás egy újabb verziója már megtalálható a rendszeren. Nem ajánlott egy régebbi verzió telepítése. Ha valóban szeretné a régebbi verziót telepíteni, akkor ajánlott a jelenleg telepített verzió eltávolítása. Válassza ki milyen műveletet szeretne végrehajtani, és nyomja meg a $\"Következő$\" gombot a folytatáshoz."
StrCpy$PageReinstall_SAME_Field_1"Az ${APPLICATION_NAME} alkalmazás ${VERSION} verziója már telepítve van.$↩$\nKérjük válaszd ki milyen műveletet szeretnél végrehajtani, és nyomd meg a „Következő” gombot."
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Process to kill not found!"
StrCpy$PageReinstall_NEW_Field_1"An older version of ${APPLICATION_NAME} is installed on your system. It is recommended that you uninstall the current version before installing. Select the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_NEW_Field_2"Uninstall before installing"
StrCpy$PageReinstall_NEW_Field_3"Do not uninstall"
StrCpy$PageReinstall_OLD_Field_1"A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE"Choose the maintenance option to perform."
StrCpy$UNINSTALL_MESSAGEBOX"It does not appear that ${APPLICATION_NAME} is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?"
StrCpy$UNINSTALL_MESSAGEBOX"Nem sikerült az ${APPLICATION_NAME} alkalmazás telepítése a '$INSTDIR' könyvtárba.$\n$\nSzeretné mindenképpen folytatni (nem ajánlott)?"
StrCpy$UNINSTALL_ABORT"Az eltávolítást a felhasználó megszakította"
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Mostra le note di rilascio"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Trovati ${APPLICATION_EXECUTABLE} processi che dovrebbero essere fermati.$\nVuoi che il programma di installazione li fermi per te?"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Trovati ${APPLICATION_EXECUTABLE} processi che dovrebbero essere fermati.$\nVuoi che il programma di installazione li fermi al posto tuo?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Il processo da terminare non è stato trovato!"
StrCpy$PageReinstall_NEW_Field_1"Una versione più datata di ${APPLICATION_NAME} è installata sul tuo sistema. Si consiglia di disinstallare la versione attuale prima di installare. Seleziona l'operazione da eseguire e fai clic su Avanti per continuare."
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Scegli come desideri installare ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Una versione più recente di ${APPLICATION_NAME} è già installata! Non è consigliabile installare una versione più vecchia. Se vuoi davvero installare una versione più vecchia, ti consigliamo di rimuovere prima la versione attuale. Scegli l'operazione da eseguire e fai clic su Avanti per continuare."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} è già installato.\nSeleziona l'operazione che desideri eseguire e fai clic su Avanti per continuare."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} è già installato.$\n$\nSeleziona l'operazione che desideri eseguire e fai clic su Avanti per continuare.."
StrCpy$PageReinstall_SAME_Field_2"Aggiungi/Reinstalla i componenti"
StrCpy$PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE"Scegli l'opzione di manutenzione da eseguire."
StrCpy$SEC_APPLICATION_DETAILS"Installazione degli elementi fondamentali di ${APPLICATION_NAME}."
StrCpy$OPTION_SECTION_SC_SHELL_EXT_SECTION"Integrazione con Windows Explorer"
StrCpy$OPTION_SECTION_SC_SHELL_EXT_DetailPrint"Installazione dell'integrazione con Windows Explorer"
StrCpy$OPTION_SECTION_SC_START_MENU_SECTION"Scorciatoia di programma menu Start"
StrCpy$OPTION_SECTION_SC_START_MENU_DetailPrint"Aggiunta della scorciatoia per ${APPLICATION_NAME} al menu Start."
StrCpy$OPTION_SECTION_SC_DESKTOP_SECTION"Scorciatoia del desktop"
@@ -25,14 +27,10 @@ StrCpy $OPTION_SECTION_SC_APPLICATION_Desc "Oggetti fondamentali di ${APPLICATIO
StrCpy$OPTION_SECTION_SC_START_MENU_Desc"Scorciatoia di ${APPLICATION_NAME}"
StrCpy$OPTION_SECTION_SC_DESKTOP_Desc"Scorciatoia del desktop per ${APPLICATION_NAME}."
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_Desc"Scorciatoia per ${APPLICATION_NAME} dell'avvio veloce."
StrCpy$UNINSTALLER_APPDATA_SUBTITLE"Rimuovi la cartella dei dati di ${APPLICATION_NAME} dal tuo computer."
StrCpy$UNINSTALLER_APPDATA_LABEL_1"Vuoi eliminare la cartella dei dati di ${APPLICATION_NAME}?"
StrCpy$UNINSTALLER_APPDATA_LABEL_2"Lasciala smarcata per conservare la cartella dei dati per usi futuri o marcala per eliminarla."
StrCpy$UNINSTALLER_APPDATA_CHECKBOX"Sì, elimina questa cartella di dati."
StrCpy$UNINSTALLER_FILE_Detail"Creazione del programma di disinstallazione"
StrCpy$UNINSTALLER_REGISTRY_Detail"Scrittura delle chiavi di registro del programma di installazione"
StrCpy$UNINSTALLER_FINISHED_Detail"Completato"
StrCpy$UNINSTALL_MESSAGEBOX"Non sembra che ${APPLICATION_NAME} sia installato nella cartella '$INSTDIR'.$\nVuoi continuare comunque (non consigliato)?"
StrCpy$UNINSTALL_MESSAGEBOX"Non sembra che ${APPLICATION_NAME} sia installato nella cartella '$INSTDIR'.$$\nVuoi continuare comunque (non consigliato)?"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Fant ${APPLICATION_EXECUTABLE}-prosess(er) som må stoppes.$\nVil du at installasjonsprogrammet skal stoppe dem for deg?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Fant ikke prosess som skulle termineres!"
StrCpy$PageReinstall_NEW_Field_1"En eldre versjon av ${APPLICATION_NAME} er installert på systemet ditt. Det anbefales at du avnistallerer den versjonen før installering av ny versjon. Velg hva du vil gjøre og klikk Neste for å fortsette."
StrCpy$PageReinstall_NEW_Field_2"Avinstaller før installering"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Velg hvordan du vil installere ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"En nyere versjon av ${APPLICATION_NAME} er allerede installert! Det anbefales ikke at du installerer en eldre versjon. Hvis du virkelig ønsker å installere denne eldre versjonen, er det bedre å avinstallere gjeldende versjon først. Velg hva du vil gjøre og klikk Neste for å fortsette."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} er installert allerede.$\n$\nVelg hva du ønsker å gjøre og klikk Neste for å fortsette."
StrCpy$PageReinstall_SAME_Field_2"Legg til/installer komponenter på nytt"
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Pokaż informacje o wydaniu"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Proces ${APPLICATION_EXECUTABLE} musi zostać zatrzymany $\nCzy chcesz aby instalator zatrzymał je dla ciebie?"
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Poka¿ informacje o wydaniu"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Proces ${APPLICATION_EXECUTABLE} musi zostaæ zatrzymany $\nCzy chcesz aby instalator zatrzyma³ je dla ciebie?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"Zamykam proces ${APPLICATION_EXECUTABLE}."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Nie znaleziono procesu!"
StrCpy$PageReinstall_NEW_Field_1"W Twoim systemie jest zainstalowana starsza wersja ${APPLICATION_NAME}. Zalecane jest jej usunięcie przed dalszą instalacją. Wybierz operację którą chcesz wykonać i naciśnij przycisk Dalej."
StrCpy$PageReinstall_NEW_Field_1"W Twoim systemie jest zainstalowana starsza wersja ${APPLICATION_NAME}. Zalecane jest jej usuniêcie przed dalsz¹ instalacj¹. Wybierz operacjê któr¹ chcesz wykonaæ i naciœnij przycisk Dalej."
StrCpy$PageReinstall_NEW_Field_2"Odinstaluj przed instalacja"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Wybierz jak chcesz zainstalować ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Zainstalowana jest nowsza wersja ${APPLICATION_NAME}! Niezalecane jest instalowanie starszej wersji. Jeśli naprawdę chcesz zainstalować starszą wersję lepiej najpierw odinstalować obecną aplikację. Wybierz operację którą chcesz wykonać i naciśnij przycisk Dalej."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} jest już zainstalowany.\nWybierz operację którą chcesz wykonać i naciśnij przycisk Dalej."
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Wybierz jak chcesz zainstalowaæ ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Zainstalowana jest nowsza wersja ${APPLICATION_NAME}! Niezalecane jest instalowanie starszej wersji. Jeœli naprawdê chcesz zainstalowaæ starsz¹ wersjê lepiej najpierw odinstalowaæ obecn¹ aplikacjê. Wybierz operacjê któr¹ chcesz wykonaæ i naciœnij przycisk Dalej."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} jest ju¿ zainstalowany.$\nWybierz operacjê któr¹ chcesz wykonaæ i naciœnij przycisk Dalej."
StrCpy$UNINSTALLER_REGISTRY_Detail"Tworzę wpisy w rejestrze"
StrCpy$UNINSTALLER_FINISHED_Detail"Zakończony"
StrCpy$UNINSTALL_MESSAGEBOX"Nie wygląda na to że ${APPLICATION_NAME} jest zainstalowane w katalogu '$INSTDIR'.$$ Kontynuować mimo tego (nie zalecane)?"
StrCpy$UNINSTALL_ABORT"Dezinstalacja przerwana przez użytkownika"
StrCpy$INIT_NO_QUICK_LAUNCH"Skrót na Pasku Zadań (NIE DOTYCZY)"
StrCpy$INIT_NO_DESKTOP"Skróty na pulpicie (nadpisuje obecne)"
StrCpy$UNINSTALLER_REGISTRY_Detail"Tworzê wpisy w rejestrze"
StrCpy$UNINSTALLER_FINISHED_Detail"Zakoñczony"
StrCpy$UNINSTALL_MESSAGEBOX"Nie wygl¹da na to ¿e ${APPLICATION_NAME} jest zainstalowane w katalogu '$INSTDIR'.$$ Kontynuowaæ mimo tego (nie zalecane)?"
StrCpy$UNINSTALL_ABORT"Dezinstalacja przerwana przez u¿ytkownika"
StrCpy$INIT_NO_QUICK_LAUNCH"Skrót na Pasku Zadañ (NIE DOTYCZY)"
StrCpy$INIT_NO_DESKTOP"Skróty na pulpicie (nadpisuje obecne)"
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Mostrar notas de lançamento"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Encontrados processos ${APPLICATION_EXECUTABLE} que precisam de ser parados.$\nDeseja que o instalador os pare ?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Processo para terminar não foi encontrado!"
StrCpy$PageReinstall_NEW_Field_1"Está instalada uma versão anterior de ${APPLICATION_NAME} no seu sistema. Recomenda-se que desinstale primeiro a versão atual antes de instalar. Selecione a operação que pretende fazer, e clique Seguinte para continuar."
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Existem ${APPLICATION_EXECUTABLE} processo(s) em execução que precisa(m) de ser interrompido(s).$\nDeseja que o instalador o(s) termine automaticamente?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"A terminar os processos ${APPLICATION_EXECUTABLE}."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Não foi encontrado o processo a terminar!"
StrCpy$PageReinstall_NEW_Field_1"Uma versão antiga de ${APPLICATION_NAME} está instalada no sistema. É recomendado que você desinstale a versão atual antes de instalar a mais recente. Selecione a operação que deseja executar e clique em $\"Avançar$\" para continuar."
StrCpy$PageReinstall_NEW_Field_2"Desinstalar antes de instalar"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Escolha como pretende instalar ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Já esta instalada uma nova versão dfe ${APPLICATION_NAME}! Não se recomenda instalar uma versão anterior. Se quer mesmo instalar esta versão mais antiga, é melhor desinstalar primeiro a versão atual. Selecione a operação que pretende fazer e clique Seguinte para continuar."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} já está instalado.\nSelecione a operação que deseja fazer, e clique Seguinte para continuar."
StrCpy$PageReinstall_OLD_Field_1"Uma versão mais recente do ${APPLICATION_NAME} já está instalada! Não é recomendada a instalação de uma versão mais antiga. Se realmente deseja instalar esta versão, aconselha-se a desinstalação da versão atual primeiro. Selecione a operação que deseja executar e clique em Avançar para continuar."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} já está instalada.$\nSelecione a operação que deseja realizar e clique em 'Seguinte' para continuar."
@@ -6,17 +6,19 @@ StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Processo para eliminar n
StrCpy$PageReinstall_NEW_Field_1"Uma versão mais antiga de ${APPLICATION_NAME} está instalado em seu sistema. É recomendado que você desinstale a versão atual antes de instalar. Selecione a operação que deseja executar e clique em Avançar para continuar."
StrCpy$PageReinstall_NEW_Field_2"Desinstalar antes de instalar"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Escolha como você deseja instalar ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"A versão mais recente do ${APPLICATION_NAME} já está instalado! Não é recomendado que você instale uma versão mais antiga. Se você realmente deseja instalar esta versão mais antiga, é melhor desinstalar a versão atual primeiro. Selecione a operação que deseja executar e clique em Avançar para continuar."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${version} já está instalado.\nSelecione a operação que deseja executar e clique em Avançar para continuar."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} já está instalado.$\n$\nSelecione a operação que você quer realizar e clique Próximo para continuar."
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Показать примечания к выпуску"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Обнаружены процес(сы) ${APPLICATION_EXECUTABLE}, которые должны быть остановлены.$\nХотите программа установки сделает это самостоятельно?"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Обнаружен процесс ${APPLICATION_EXECUTABLE}, который требуется остановить.$\nВы хотите чтобы программа установки сделала это самостоятельно?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"Завершение процессов ${APPLICATION_EXECUTABLE}."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Не найдены процессы, которые нужно завершить!"
StrCpy$PageReinstall_NEW_Field_1"Обнаружена более старая версия ${APPLICATION_NAME}. Рекомендуется удалить её перед установкой. Выберите желаемое действие и нажмите $\"Далее$\"."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Процессы для завершения не найдены!"
StrCpy$PageReinstall_NEW_Field_1"Обнаружена более старая версия ${APPLICATION_NAME}. Рекомендуется удалить её перед установкой. Выберите желаемое действие и нажмите Далее для продолжения."
StrCpy$PageReinstall_NEW_Field_2"Удалить перед установкой"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Выберите, как вы хотите установить ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Новая версия ${APPLICATION_NAME} уже установлена! Не рекомендуется устанавливать старую версию. Если вы действительно хотите, чтобы устанавливать старую версию, лучше удалить текущую версию. Выберите операцию, которую необходимо выполнить, и нажмите Далее, чтобы продолжить."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} уже установлена.\nВыберите операцию, которую необходимо выполнить, и нажмите Далее, чтобы продолжить."
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Выберите, как вы хотите установить ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Новая версия ${APPLICATION_NAME} уже установлена! Не рекомендуется устанавливать старую версию. Если вы действительно хотите установить эту старую версию, то сначала лучше удалить текущую версию. Выберите желаемое действие и нажмите Далее для продолжения."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} уже установлен.$\n$\nУкажите действие и нажмите Далее для продолжения."
StrCpy$UNINSTALL_MESSAGEBOX"Скорее всего, приложение ${APPLICATION_NAME} уже установлено в директорию '$INSTDIR'.\nВсе равно продолжить (не рекомендуется)?"
StrCpy$UNINSTALL_MESSAGEBOX"Похоже, что приложение ${APPLICATION_NAME} не установлено в каталог '$INSTDIR'.$\nВсе равно продолжить (не рекомендуется)?"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
StrCpy$PageReinstall_OLD_Field_1"A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE"Choose the maintenance option to perform."
StrCpy$OPTION_SECTION_SC_START_MENU_DetailPrint"Adding shortcut for ${APPLICATION_NAME} to the Start Menu."
StrCpy$UNINSTALLER_APPDATA_SUBTITLE"Remove ${APPLICATION_NAME}'s data folder from your computer."
StrCpy$UNINSTALLER_APPDATA_LABEL_1"Do you want to delete ${APPLICATION_NAME}'s data folder?"
StrCpy$UNINSTALLER_APPDATA_LABEL_2"Leave unchecked to keep the data folder for later use or check to delete the data folder."
StrCpy$UNINSTALL_MESSAGEBOX"It does not appear that ${APPLICATION_NAME} is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?"
StrCpy$UNINSTALL_ABORT"Uninstall aborted by user"
StrCpy$UAC_ERROR_ELEVATE"Unable to elevate, error:"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Našli sa ${APPLICATION_EXECUTABLE} proces (y), ktoré je potrebné zastavi<76>.$\nChcete, aby ich inštalátor zastavil?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Proces ukonèenia nebol nájdený!"
StrCpy$PageReinstall_NEW_Field_1"Staršia verzia ${APPLICATION_NAME} je nainštalovaná vo vašom systéme. Odporúèam vám odinštalova<76> aktuálnu verziu pred inštaláciou. Vyberte operáciu, ktorú chcete vykona<6E>, a kliknite na tlaèidlo Ïalej pre pokraèovanie."
StrCpy$PageReinstall_NEW_Field_1"Staršia verzia ${APPLICATION_NAME} je nainštalovaná vo vašom poèítaèi. Odporúèam vám odinštalova<76> aktuálnu verziu pred inštaláciou. Vyberte operáciu, ktorú chcete vykona<6E>, a kliknite na tlaèidlo Ïalej pre pokraèovanie."
StrCpy$PageReinstall_NEW_Field_2"Odinštalova<EFBFBD> pred inštaláciou"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_TITLE"Už je nainštalovaný"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Vyberte si, ako chcete nainštalova<76> ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Novšia verzia ${APPLICATION_NAME} je už nainštalovaná! Neodporúèam vám nainštalova<76> staršiu verziu. Ak naozaj chcete nainštalova<76> túto staršiu verziu, je lepšie najprv odinštalova<76> aktuálnu verziu. Vyberte operáciu, ktorú chcete vykona<6E>, a kliknite na tlaèidlo Ïalej pre pokraèovanie."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} je už nainštalovaná.\nVyberte operáciu, ktorú chcete vykona<6E>, a kliknite na tlaèidlo Ïalej pre pokraèovanie."
StrCpy$OPTION_SECTION_SC_DESKTOP_Desc"Zástupca na ploche pre ${APPLICATION_NAME}."
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_Desc"Zástupca na paneli úloh pre ${APPLICATION_NAME}."
StrCpy$UNINSTALLER_APPDATA_SUBTITLE"Zmaza<EFBFBD> dátový prieèinok ${APPLICATION_NAME}'s z vášho poèítaèa."
StrCpy$UNINSTALLER_APPDATA_LABEL_1"Naozaj chcete zmaza<7A> prieèinok s dátami ${APPLICATION_NAME}'s ?"
StrCpy$UNINSTALLER_APPDATA_LABEL_2"Ponechajte nezaškrtnuté, ak chcete prieèinok s dátami ponecha<68> na neskoršie použitie, alebo zaškrtnite, ak chcete prieèinok zmaza<7A>."
StrCpy$UNINSTALLER_APPDATA_CHECKBOX"Áno, zmaza<7A> tento prieèinok."
StrCpy$UNINSTALLER_REGISTRY_Detail"Zapisujem inštalaèné k¾úèe do registra"
StrCpy$UNINSTALLER_FINISHED_Detail"Dokonèené"
@@ -42,3 +39,5 @@ StrCpy $INIT_INSTALLER_RUNNING "In
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"Tento odinštalátor vyžaduje admin prístup, skúste to znova"
StrCpy$INIT_UNINSTALLER_RUNNING"Odinštalátor je už spustený."
StrCpy$SectionGroup_Shortcuts"Zástupcovia"
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
StrCpy$UAC_ERROR_LOGON_SERVICE"Logon service is not running, aborting!"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_TITLE"Program je že nameščen"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Izberite način namestitve programa ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Novejša različica programa ${APPLICATION_NAME} je že nameščena! Ni priporočljivo namestiti starejše. V kolikor želite vseeno nadaljevati z namestitvijo, prej odstranite obstoječo različico. Izberite opravilo in pritisnite gumb za nadaljevanje."
StrCpy$PageReinstall_SAME_Field_1"Program ${APPLICATION_NAME} ${VERSION} je že nameščen.Izberite opravilo in pritisnite gumb za nadaljevanje."
StrCpy$PageReinstall_SAME_Field_1"Program ${APPLICATION_NAME} ${VERSION} je že nameščen.$\n$\nIzberite opravilo, ki ga želite izvesti in kliknite za nadaljevanje."
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Mostrar las notas de la versión"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"El/los proceso/s ${APPLICATION_EXECUTABLE} debe/n ser detenidos.$\n¿Quiere que el instalador lo haga por usted?"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"¡Proceso a detener no encontrado!"
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"¡Proceso para detener no encontrado!"
StrCpy$PageReinstall_NEW_Field_1"Una versión anterior de ${APPLICATION_NAME} se encuentra instalada en el sistema. Se recomienda de instalar la versión actual antes de instalar la nueva. Seleccione la operacion deseada y haga click en Siguiente para continuar."
StrCpy$PageReinstall_NEW_Field_2"Desinstalar antes de instalar"
StrCpy$PageReinstall_NEW_Field_3"No desinstalar"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_TITLE"Ya está instalado"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Elija como quiere instalar ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Una nueva versión de ${APPLICATION_NAME} ya está instalada. No es recomendable instalar una versión anterior. Si realmente quiere instalar esta versión anterior, es mejor que desinstale la versión actual primero. Seleccione la operación que desea realizar y pulse Next para continuar."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} ya está instalada.\nSeleccione la operación que desea realizar y pulse Next para continuar."
StrCpy$PageReinstall_OLD_Field_1"Una nueva versión de ${APPLICATION_NAME} ya está instalada. No es recomendable instalar una versión anterior. Si realmente quiere instalar esta versión anterior, es mejor que desinstale la versión actual primero. Seleccione la operación que desea realizar y pulse Siguiente para continuar."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} ya está instalado.$\n$\nSeleccione la operación que desea realizar y haga click en Siguiente para continuar."
StrCpy$OPTION_SECTION_SC_START_MENU_Desc"Acceso Directo de ${APPLICATION_NAME}"
StrCpy$OPTION_SECTION_SC_DESKTOP_Desc"Acceso Directo de Escritorio para ${APPLICATION_NAME}"
StrCpy$OPTION_SECTION_SC_QUICK_LAUNCH_Desc"Lanzador Rápido de Accesos Director para ${APPLICATION_NAME}."
StrCpy$UNINSTALLER_APPDATA_SUBTITLE"Remueva la carpeta de datos de ${APPLICATION_NAME} del computador."
StrCpy$UNINSTALLER_APPDATA_LABEL_1"¿Desea eliminar la carpeta de datos de ${APPLICATION_NAME}?"
StrCpy$UNINSTALLER_APPDATA_LABEL_2"Deja sin marcar para mantener la carpeta de datos para uso posterior, o del marque para eliminar la carpeta de datos."
StrCpy$UNINSTALLER_APPDATA_CHECKBOX"Si, Elimine esta carpeta de datos."
StrCpy$UNINSTALLER_REGISTRY_Detail"Escribiendo claves en el registro del instalador"
StrCpy$UNINSTALLER_FINISHED_Detail"Terminado"
StrCpy$UNINSTALL_MESSAGEBOX"Parece que ${APPLICATION_NAME} no está instalado en el directorio '$INSTDIR'.$$ ¿Continuar de todos modos? (No Recomendado)"
StrCpy$UNINSTALL_MESSAGEBOX"Parece que ${APPLICATION_NAME} no está instalado en el directorio '$INSTDIR'.$$ ¿Continuar de todos modos? (No recomendado)"
StrCpy$UNINSTALL_ABORT"Desinstalación cancelada por el usuario"
StrCpy$INIT_NO_QUICK_LAUNCH"Acceso Directo al Lanzador Rápido (N/A)"
StrCpy$INIT_NO_QUICK_LAUNCH"Atajo de inicio rápido (N/A)"
StrCpy$INIT_NO_DESKTOP"Atajo de escritorio (sobreescribe el existente)"
StrCpy$UAC_ERROR_ELEVATE"No se ha podido elevar, Error:"
StrCpy$UAC_INSTALLER_REQUIRE_ADMIN"El instalador requiere acceso administrativo, intente de nuevo"
StrCpy$UAC_ERROR_ELEVATE"No se ha podido elevar, error:"
StrCpy$UAC_INSTALLER_REQUIRE_ADMIN"El instalador requiere acceso administrativo, inténtelo de nuevo"
StrCpy$INIT_INSTALLER_RUNNING"El instalador ya se encuentra en ejecución"
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"El desinstalador requiere acceso administrativo, intente de nuevo"
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"El desinstalador requiere acceso administrativo, inténtelo de nuevo"
StrCpy$UAC_ERROR_LOGON_SERVICE"Servicio Inicio de sesión no se está ejecutando, abortando!"
StrCpy$INIT_UNINSTALLER_RUNNING"El desinstalador ya se encuentra en ejecución."
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Mostrar notas de la versión"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Se encontrarion ${APPLICATION_EXECUTABLE} proceso(s) que debe/n ser detenidos.$\"$\n$\"¿Quiere que el instalador lo haga por usted?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"Parando el proceso ${APPLICATION_EXECUTABLE}."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Proceso a detener no encontrado!"
StrCpy$PageReinstall_NEW_Field_1"Una versión anterior de ${APPLICATION_NAME} esta instalada en el sistema. Es recomendado que quite esta versión antes de instalar. Elija la operación a realizar y seleccione Siguiente para continuar."
StrCpy$PageReinstall_NEW_Field_2"Des-instale antes de Instalar."
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Elija como desea instalar ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Una versión mas reciente de ${APPLICATION_NAME} esta actualmente instalada! No es recomendado que instale una versión antigua. Si realmente desea instalar esta versión obsoleta, es mejor que des-instale la versión actual primero. Seleccione la operación que desea realizar y presione en Siguiente para continuar. "
StrCpy$PageReinstall_SAME_Field_1"La ${APPLICATION_NAME} ${VERSION} ya está instalado.$\n$\nSeleccione la operación que desea realizar y haga click en Siguiente para continuar."
StrCpy$UNINSTALLER_REGISTRY_Detail"Escribiendo claves de Registro del Instalador"
StrCpy$UNINSTALLER_FINISHED_Detail"Terminado"
StrCpy$UNINSTALL_MESSAGEBOX"Parece que ${APPLICATION_NAME} no esta instalado en el directorio '$INSTDIR'.$\n$\n¿Continuar de todos modos? (No recomendado)"
StrCpy$UNINSTALL_ABORT"Des-instalación abortada por el usuario"
StrCpy$INIT_NO_QUICK_LAUNCH"Atajo de Acceso Rápido (N/A)"
StrCpy$INIT_NO_DESKTOP"Acceso Directo en Escritorio (Sobrescribe existentes)"
StrCpy$UAC_ERROR_ELEVATE"No se ha podido elevar, error:"
StrCpy$UAC_INSTALLER_REQUIRE_ADMIN"Este instalador requiere acceso Administrador, intente de nuevo. "
StrCpy$INIT_INSTALLER_RUNNING"El instalador ya esta corriendo."
StrCpy$UAC_UNINSTALLER_REQUIRE_ADMIN"Este des-instalador requiere acceso administrador, intente de nuevo"
StrCpy$UAC_ERROR_LOGON_SERVICE"Servicio Inicio de sesión no se está ejecutando, abortando!"
StrCpy$INIT_UNINSTALLER_RUNNING"El des-instalador ya esta corriendo"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Välj hur du vill installera ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"En nyare version av ${APPLICATION_NAME} är redan installerad! Det rekommenderas inte att du installerar en äldre version. Om du verkligen vill installera denna äldre versionen, är det bättre att du avinstallerar den nuvarande versionen först. Välj den åtgärd du vill utföra och klicka Nästa för att fortsätta."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} är redan installerad.\nVälj den åtgärd du vill utföra och klicka Nästa för att fortsätta."
StrCpy$UAC_ERROR_ELEVATE"Unable to elevate, error:"
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
StrCpy$PageReinstall_OLD_Field_1"${APPLICATION_NAME} uygulamasýnýn daha yeni sürümü zaten yüklü! Daha eski bir sürümünü yüklemeniz önerilmez. Gerçekten bu eski sürümü yüklemek isterseniz, ilk olarak geçerli sürümü kaldýrmanýz tavsiye edilir. Yapmak istediðiniz iþlemi seçin ve devam etmek üzere Ýleri týklayýn."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} zaten yüklü.\nYapmak istediğiniz işlemi seçin ve devam etmek için İleri tıklayın."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} zaten yüklü.$\n$\nYapmak istediðiniz iþlemi seçin ve devam etmek için Ýleri týklayýn."
StrCpy$MUI_FINISHPAGE_SHOWREADME_TEXT_STRING"Показати примітки до випуску"
StrCpy$ConfirmEndProcess_MESSAGEBOX_TEXT"Знайдено процес(и) ${APPLICATION_EXECUTABLE}, які необхідно зупинити.$\nХочете щоб програма установки зробила це самостійно?"
StrCpy$ConfirmEndProcess_KILLING_PROCESSES_TEXT"Завершення процесів ${APPLICATION_EXECUTABLE}."
StrCpy$ConfirmEndProcess_KILL_NOT_FOUND_TEXT"Не знайдено процеси, які необхідно зупинити!"
StrCpy$PageReinstall_NEW_Field_1"Знайдено застарілу версію програми ${APPLICATION_NAME}. Рекомендуємо її спочатку видалити. Оберіть подальшу дію та натисніть $\"Далі$\"."
StrCpy$PageReinstall_NEW_Field_2"Видалити перед установкою"
StrCpy$PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE"Оберіть, як ви хочете установити ${APPLICATION_NAME}."
StrCpy$PageReinstall_OLD_Field_1"Знайдено новішу версію ${APPLICATION_NAME}! Ми не рекомендуємо встановлювати стару версію. Якщо ви все ж бажаєте встановити цю версію, спочатку видаліть поточну версію. Оберіть подальшу дію та натисніть $\"Далі$\"."
StrCpy$PageReinstall_SAME_Field_1"${APPLICATION_NAME} ${VERSION} вже встановлено.$\n$\nОберіть подальшу дію та натисніть $\"Далі$\" для продовження."
{\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f39\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;}
{\f172\froman\fcharset238\fprq2 Times New Roman CE;}{\f173\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f175\froman\fcharset161\fprq2 Times New Roman Greek;}{\f176\froman\fcharset162\fprq2 Times New Roman Tur;}
{\f177\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f178\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f179\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f180\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\rsidtbl \rsid6712196\rsid7485074\rsid11352300\rsid15940516}{\*\generator Microsoft Word 11.0.5604;}{\info{\title Processes v1}{\author Hardwired}{\operator Hardwired}{\creatim\yr2004\mo12\dy12\hr23\min42}
\par }\pard \qj \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15940516 {\f39\fs20\insrsid15940516 This software binaries and source-code are free for any kind of use, including commercial use. }{
\f39\fs20\insrsid7485074\charrsid7485074 There is no restriction and no guaranty for using}{\f39\fs20\insrsid7485074\charrsid7485074 t}{\f39\fs20\insrsid7485074\charrsid7485074 his software}{\f39\fs20\insrsid7485074\charrsid7485074 and/or it
s source-code. }{\f39\fs20\insrsid15940516
\par I}{\f39\fs20\insrsid7485074\charrsid7485074 f you use the plug}{\f39\fs20\insrsid7485074\charrsid7485074 -}{\f39\fs20\insrsid7485074\charrsid7485074 in }{\f39\fs20\insrsid7485074\charrsid7485074 and/}{\f39\fs20\insrsid7485074\charrsid7485074 or it}{
\f39\fs20\insrsid7485074\charrsid7485074 s}{\f39\fs20\insrsid7485074\charrsid7485074 source-code, I would }{\f39\fs20\insrsid7485074\charrsid7485074 appreciate }{\f39\fs20\insrsid7485074\charrsid7485074 if my name is mentioned.}{
-Removed UAC::RunElevatedAndProcessMessages (UAC::RunElevated now supports non NULL $HWNDParent)
-Removed several useless sample scripts
v0.0.7e - 20080229 (AndersK)
*Added ugly hack for hackwnd to find correct title and give us a proper taskbar so the elevation dialog does not get lost (2000,XP (This also fixed Alt-Tab icon on Vista))
*Should compile with MSVC2005 now (Thanks Case)
*More unicode fixes, this time even tested with NSIS Unicode (Only RunElevated and Exec tested)
v0.0.7d - 20080226 (AndersK)
*Fixed a couple of unicode version bugs (Unicode version still untested)
*Fixed weird XP string length bug (Thanks kfank)
v0.0.7c - 20080218 (AndersK)
*Fixed SyncVars string length bug
v0.0.7b - 20080205 (AndersK)
*Fixed DelayLoadDlls() problem on NT4
v0.0.7 - 20080120 (AndersK)
+Added UAC::StackPush (For use with ExecCodeSegment)
v0.0.6d - 20071108 (AndersK)
+Now syncs basic registers/variables before calling UAC::*Exec* and UAC::ExecCodeSegment (r0-r9,R0-R9,$CMDLINE,$INSTDIR,$OUTDIR,$EXEDIR,$LANGUAGE)
+Added UAC::RunElevatedAndProcessMessages, this can be called after .onInit (Very experimental, DO NOT USE)
+New include file with helper macros: UAC.nsh
*Replazed Clammerz hack with a better version
v0.0.6c - 20071014 (AndersK)
+Check for and split up "domain\user" style input in RunAs.cpp for CreateProcessWithLogonW
*Added a ugly hack to trick messagebox'es in .OnInit to appear correctly on Vista (Thanks Clammerz)
v0.0.6b - 20070523 (AndersK)
*Fixed showwindow flag (Thanks for the help kichik)
v0.0.6 - 20070512 (AndersK)
+Added basic language support for MyRunAs dialog.
v0.0.5e - 20070509 (AndersK)
*Fixed detection of UAC mode?
+IPC window is visible (but offscreen) during elevation to help with SetForegroundWindow/Focus problems
v0.0.5d - 20070324 (AndersK)
*Fixed stupid IsAdmin bug
v0.0.5c - 20070304 (AndersK)
*_IsAdmin now uses CheckTokenMembership if it exists ( MSKB:Q118626 / http://blogs.msdn.com/larryosterman/archive/2007/03/14/why-does-kb-118626-use-accesscheck-to-check-if-you-re-a-member-of-the-administrators-group.aspx )
v0.0.5b - 20070301 (AndersK)
*Fixed ExecCodeSegment (Thread now calls CoInitialize)
v0.0.5 - 20070228 (AndersK)
+Added ExecCodeSegment (You can now call ANY code in the context of the original user)
v0.0.4b - 20070226 (AndersK)
*Fixed (My)RunAs font (http://blogs.msdn.com/oldnewthing/archive/2005/02/04/366987.aspx)
v0.0.4 - 20070225 (AndersK)
+Added (My)RunAs dialog, used on Vista when running as LUA with UAC off
+Always uses /NCRC for elevated instance
*Now compiles as UNICODE (Untested, no UnicodeNSIS to test on)
v0.0.3 - 20070224 (AndersK)
+Added Exec/ExecWait
+Added Verb & ShowWindow support for ShellExec[Wait]
v0.0.2 - 20070219 (AndersK)
+Added ShellExecWait
*IPC srv wnd now has its own thread and msg loop
*Removed CRT dependency
*Hopefully loads on Win95 now
v0.0.1 - 20070215 (AndersK)
*Initial release
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.