aegif / cmissync Goto Github PK
View Code? Open in Web Editor NEWSynchronize content between a CMIS repository and your desktop. Like Dropbox for Enterprise Content Management!
Home Page: http://CmisSync.com
Synchronize content between a CMIS repository and your desktop. Like Dropbox for Enterprise Content Management!
Home Page: http://CmisSync.com
At the end of the "Add CMIS folder" wizard, a button proposes to open the local path, but the path is wrong
Otherwise one can not have both SparkleShare and CmisSync installed.
If a sub-folder is chosen, the database name becomes something like "Sites/cmissync.s3db"
which fails to be created.
Possible solution: transform slashes to underscores
Steps:
Since 98eb792
It might be needed for Git-centric environment, but not for CMIS, username should be sufficient.
RIght now the clone is done for instnce in C:\localRoot\cmis (6)
The user should be able to choose this local folder.
Investigate how to change "Unknown publisher" to something less dodgy.
Probably need to sign with a digital signature.
when a user creates two checkouts from the same server, pre-fill the username and password fields with saved values.
SparkleWatcher implements FileSystemWatcher.
We should use it to efficiently detect local changes.
It does not replace local crawling, which we must be once at startup, to check which files have changed while CmisSync was not running.
SparkleShare has templates for Github/etc.
They are helpful to:
Similarly, we should have templates for various CMIS servers.
However, the left part should not become un-editable, as each user needs to change the server name.
Trying to compil on Linux using Mono fails with the following error:
Making all in build
Making all in m4
Making all in SparkleLib
MCS ../bin/SparkleLib.dll
warning CS2002: Source file ./Defines.cs' specified multiple times Compilation succeeded - 1 warning(s) Making all in SparkleLib/Cmis MCS ../../bin/SparkleLib.Cmis.dll ./SparkleRepoCmis.cs(43,17): error CS0118:
SparkleLib.Cmis' is a namespace' but a
type' was expected
./SparkleRepoCmis.cs(35,14): error CS0234: The type or namespace name Data' does not exist in the namespace
System'. Are you missing an assembly reference?
./SparkleRepoCmis.cs(36,14): error CS0234: The type or namespace name Data' does not exist in the namespace
System'. Are you missing an assembly reference?
Compilation failed: 3 error(s), 0 warnings
make[1]: *** [../../bin/SparkleLib.Cmis.dll] Erreur 1
make: *** [all-recursive] Erreur 1
FIrst-time wizard should be modified to explain things about CmisSync, many included facts do not apply to CmisSync
If no info is given, users might select their whole company's folder, could be several terabytes.
So, when the user selects a folder for checkout, we should display something like:
"Size of the local copy will be 3.5TB. On an average Internet connection it will take 900 hours. Are you sure?"
I have tried to compil the latest git tree on my Debian wheezy.
It's shipped with mono 2.10.8.1 GNU make 3.8.1and autotools 2.69.
To compil I used the usual steps:
autogen runs properly, but make throws:
Making all in build
Making all in m4
Making all in SparkleLib
MCS ../bin/SparkleLib.dll
warning CS2002: Source file ./Defines.cs' specified multiple times Compilation succeeded - 1 warning(s) Making all in SparkleLib/Cmis MCS ../../bin/SparkleLib.Cmis.dll ./SparkleRepoCmis.cs(122,17): warning CS0162: Unreachable code detected ./SparkleRepoCmis.cs(141,20): warning CS0219: The variable
id' is assigned but its value is never used
./SparkleFetcherCmis.cs(31,24): warning CS0414: The private field SparkleLib.Cmis.SparkleFetcher.crypto_salt' is assigned but its value is never used Compilation succeeded - 3 warning(s) Making all in SparkleShare Making all in Linux Making all in Nautilus Making all in Pixmaps Making all in icons Making all in ubuntu-mono-dark Making all in ubuntu-mono-light MCS ../../bin/SparkleShare.exe ./../SparkleControllerBase.cs(27,18): error CS0234: The type or namespace name
Cmis' does not exist in the namespace `SparkleLib'. Are you missing an assembly reference?
Compilation failed: 1 error(s), 0 warnings
make[3]: *** [../../bin/SparkleShare.exe] Erreur 1
make[2]: *** [all-recursive] Erreur 1
make[1]: *** [all-recursive] Erreur 1
make: *** [all-recursive] Erreur 1
Use remoteFolder.GetFolderTree instead of recursion, if it is more efficient in terms of bandwidth/latency.
It is probably also safer, for instance in cases where a remote directory is deleted while crawling.
When validating data filled in the wizard I get the error below ("Add" project button at the end of the wizard):
FullPath:/home/alxgomz/.config/cmissync/config.xml
21:42:23 | Config | Wrote to '/home/alxgomz/.config/cmissync/config.xml'
21:42:23 | Config | Updated option notifications:True
21:42:31 | Config | Wrote to '/home/alxgomz/.config/cmissync/config.xml'
Cmis SparkleFetcher constructor
21:43:40 | Fetcher | /home/alxgomz/SparkleShare/.tmp/cmissync | Fetching folder: http://172.16.0.2:8080/alfresco/cmisatom
21:43:40 | Auth | Skipping fingerprint check
21:43:40 | Auth | Accepted host key for 172.16.0.2
21:43:40 | Fetcher | Failed creating fingerprint: Array index is out of range. at SparkleLib.SparkleFetcherBase.GetFingerprint (System.String public_key) [0x00000] in :0
Cmis SparkleFetcher Fetch
21:43:41 | Fetcher | Finished
Cmis SparkleFetcher IsFetchedRepoEmpty
Cmis SparkleFetcher Complete
Cmis SparkleFetcher IsFetchedRepoEmpty
21:43:41 | Config | Wrote to '/home/alxgomz/.config/cmissync/config.xml'
Unhandled Exception: System.TypeLoadException: A type load exception has occurred.
at SparkleShare.SparkleControllerBase.FinishFetcher () [0x00000] in :0
at SparkleShare.SparkleControllerBase.m__1D (Boolean repo_is_encrypted, Boolean repo_is_empty, System.String[] warnings) [0x00000] in :0
at (wrapper delegate-invoke) :invoke_void__this___bool_bool_string
at SparkleLib.SparkleFetcherBase.m__4 () [0x00000] in :0
at System.Threading.Thread.StartInternal () [0x00000] in :0
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: A type load exception has occurred.
at SparkleShare.SparkleControllerBase.FinishFetcher () [0x00000] in :0
at SparkleShare.SparkleControllerBase.m__1D (Boolean repo_is_encrypted, Boolean repo_is_empty, System.String[] warnings) [0x00000] in :0
at (wrapper delegate-invoke) :invoke_void__this___bool_bool_string
at SparkleLib.SparkleFetcherBase.m__4 () [0x00000] in :0
at System.Threading.Thread.StartInternal () [0x00000] in :0
The Alfresco server (Community 4.0e) doesn't receives any request from the client. However the config file seems to be written properly as shown below:
<?xml version="1.0" encoding="UTF-8"?>
<sparkleshare>
<user>
<name>Alexandre Chapellon</name>
<email>[email protected]</email>
</user>
<notifications>True</notifications>
<folder>
<name>cmisatom</name>
<identifier>bd0b841a7aa23429c1571d349a50c886984abaf8</identifier>
<url>http://172.16.0.2:8080/alfresco/cmisatom</url>
<backend>Cmis</backend>
<repository>7080820c-bdea-4398-8693-b05aea8aadb0</repository>
<remoteFolder>/cmissync</remoteFolder>
<user>admin</user>
<password>admin</password>
</folder>
</sparkleshare>
Check whether there is a new CmisSync release
FIle status icon overlay does not show up in my Nautilus.
(it does not display with SparkleShare either)
Is there any trick to make it work?
Right now C:\localRoot is hardcoded.
Having many company files on your laptop can be risky.
Rather than using the laptop's file system directly, CmisSync should store files in an encrypted folder that the user would have to "mount" using a dedicated password.
Software like TrueCrypt could be used.
CryptSync seems simpler (but written in C++): http://code.google.com/p/cryptsync/source/browse/#svn%2Ftrunk%2Fsrc
When compiling on Linux:
/usr/bin/dmcs -codepage:utf8 -nowarn:0278 -nowarn:0078 -define:HAVE_GTK_2_10 -define:NET_2_0 -debug -target:exe -out:../../bin/SparkleShare.exe -define:HAVE_APP_INDICATOR -define:ENABLE_ATK -r:../../bin/SparkleLib.dll -r:Mono.Posix -r:System -r:/usr/lib/cli/appindicator-sharp-0.1/appindicator-sharp.dll -r:/usr/lib/cli/notify-sharp-0.4/notify-sharp.dll -r:/usr/lib/cli/webkit-sharp-1.1/webkit-sharp.dll -r:/usr/lib/pkgconfig/../../lib/cli/atk-sharp-2.0/atk-sharp.dll -r:/usr/lib/pkgconfig/../../lib/cli/gdk-sharp-2.0/gdk-sharp.dll -r:/usr/lib/pkgconfig/../../lib/cli/glib-sharp-2.0/glib-sharp.dll -r:/usr/lib/pkgconfig/../../lib/cli/gtk-sharp-2.0/gtk-sharp.dll -r:/usr/lib/pkgconfig/../../lib/cli/pango-sharp-2.0/pango-sharp.dll ./../Program.cs ./../SparkleAboutController.cs ./../SparkleBubblesController.cs ./../SparkleControllerBase.cs ./../SparkleEventLogController.cs ./../SparkleExtensions.cs ./../SparkleInvite.cs ./../SparkleKeys.cs ./../SparklePlugin.cs ./../SparkleSetupController.cs ./../SparkleStatusIconController.cs ./SparkleAbout.cs ./SparkleBubbles.cs ./SparkleController.cs ./SparkleEventLog.cs ./SparkleSetup.cs ./SparkleSetupWindow.cs ./SparkleSpinner.cs ./SparkleStatusIcon.cs ./SparkleUI.cs ./SparkleUIHelpers.cs -r:../../bin/SparkleLib.Cmis.dll
./SparkleController.cs(35,40): error CS0433: The imported type `SparkleLib.Defines' is defined multiple times
/home/nico/src/CmisSync/bin/SparkleLib.dll (Location of the symbol related to previous error)
/home/nico/src/CmisSync/bin/SparkleLib.Cmis.dll (Location of the symbol related to previous error)
Sometimes I get this exception in Program.Main
I have no idea why there even is a WebBrowser in the first place.
Value cannot be null. Parameter name: text
at System.Windows.Controls.WebBrowser.NavigateToString(String text)
at SparkleShare.SparkleEventLog.<>c__DisplayClass26.b__25() in C:\Users\nico\src\CmisSync\SparkleShare\Windows\SparkleEventLog.cs:line 286
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.DispatcherOperation.InvokeImpl()
at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
at System.Threading.ExecutionContext.runTryCode(Object userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Windows.Threading.DispatcherOperation.Invoke()
at System.Windows.Threading.Dispatcher.ProcessQueue()
at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run()
at SparkleShare.SparkleUI.Run() in C:\Users\nico\src\CmisSync\SparkleShare\Windows\SparkleUI.cs:line 49 // Code: Application.Run();
at SparkleShare.Program.Main(String[] args) in C:\Users\nico\src\CmisSync\SparkleShare\Program.cs:line 73 // Code: UI.Run();
Right now the whole repository is synced
System.Net.WebException was unhandled
Message=The operation has timed out.
Source=System
StackTrace:
at System.Net.ConnectStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.IO.BufferedStream.Read(Byte[] array, Int32 offset, Int32 count)
at SparkleLib.Cmis.SparkleRepo.RecursiveFolderCopy(IFolder remoteFolder, String localFolder) in C:\Users\nico\src\CmisSync\SparkleLib\Cmis\SparkleRepoCmis.cs:line 115
at SparkleLib.Cmis.SparkleRepo.RecursiveFolderCopy(IFolder remoteFolder, String localFolder) in C:\Users\nico\src\CmisSync\SparkleLib\Cmis\SparkleRepoCmis.cs:line 94
at SparkleLib.Cmis.SparkleRepo.Sync() in C:\Users\nico\src\CmisSync\SparkleLib\Cmis\SparkleRepoCmis.cs:line 73
at SparkleLib.Cmis.SparkleRepo..ctor(String path, SparkleConfig config) in C:\Users\nico\src\CmisSync\SparkleLib\Cmis\SparkleRepoCmis.cs:line 63
at SparkleShare.SparkleControllerBase.AddRepository(String folder_path) in C:\Users\nico\src\CmisSync\SparkleShare\SparkleControllerBase.cs:line 264
at SparkleShare.SparkleControllerBase.CheckRepositories() in C:\Users\nico\src\CmisSync\SparkleShare\SparkleControllerBase.cs:line 368
at SparkleShare.SparkleControllerBase.b__1c() in C:\Users\nico\src\CmisSync\SparkleShare\SparkleControllerBase.cs:line 244
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
changelogs are very useful for syncing, but unfortunately they are not available on all CMIS servers.
getCapabilities can be used to find out.
Discussion at http://stackoverflow.com/questions/12190247/most-efficient-way-to-detect-changes-of-a-remote-cmis-repository
Steps:
When a document has been modified on both local and server, a dialog should ask which version to keep.
Create a directory called "507" on CMIS server.
Sync.
Delete directory "507" and immediately create a file called "507".
Sync again.
Crash.
Reported by Jay:
After it ran and synced against my FileNet (successfully by the way) it kept disappearing from the task panel after it went idle. I would restart it and it would go away a minute or two later.
It was an old bloated XP VM image that I installed it on though so I would not rule out the image being a bit unstable.
Right now, CmisSync complains in the log file, but most users probably do not read it.
Should show a UI notification or something instead. See how SparkleShare does this when a Git server is down.
The Windows installer says "Welcome to the SparkleShare Setup Wizard" and similar.
Make package name a variable, that could be easily set to "SparkleShare", "CmisSync" or other.
Hylke has expressed interest in merging this feature if implemented.
The build process should be modified so that DotCMIS.dll is automatically copied to /usr/lib/sparkleshare/ (or equivalents on Mac/Windows) when running make install
or when installing a distributable.
The workaround right now is to manually run:
sudo cp SparkleLib/Cmis/lib/* /usr/lib/sparkleshare/
Reported by Alex:
SparkleShare crashes just after launch, before even showing any wizard.
The tray icon appears briefly but disappears as soon as the mouse is hovered above.
Right now user has to type:
We could just ask for the CMIS URL, then:
In the distributable, check that files installed by CmisSync do not overwrite files installed by SparkleShare.
Steps:
Port CmisSync to Android.
Once again SparkleShare might be helpful: https://github.com/NewProggie/SparkleShare-Android
CMIS timeout can arise anywhere at any time.
Should try/catch and log message.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.