Hi everybody, (cross-posting this from kivy-dev as suggested)
In an effort to learn Py4A and Kivy I wrote this
(open source) Android-to-SMB file synchronization app called Optimal
File Sync(some screen shots here:
http://www.optimalbpm.se/wiki/index.php/Optimal_file_sync#Starting_the_app.2Fservice).
When
I wrote it, I felt that even if there were some examples, where were no
really fully-fledged show case applications where all the common
problems had been solved.
And the app is actually quite usable, it has been updating my photos without fault now for a while.
So
I was thinking that if I polished it a little, and got some feedback
from you people, I could make it into something that could be pretty
educational for others.
I would not mind completely make up reasons
to use all aspects of the framework. Shake the phone to try and sync
right away? Sure. Whatever. :-)
Any of you think that this would be a good idea? A way to present many of Kivy:s(and Py4a:s) features?
In the future I want to port it to IOS, and to Python 3 as soon as that is possible.
Even
though many have had questions in that direction it is mostly for my
own sake, though, as I am planning to make a completely unrelated and
commercial app later*.
Anyway, the features, some which I find quite usable in real life:
- Only syncs when Wi-Fi is available
- Only syncs when on the same network as the target server
- Only syncs when new files have been created
- SMBFilesystem implementation for FileChooser
- All actual *work* is done as a background service
- Status and progress can be monitored from app
- Disregards temporary video files
- Saves settings in a separate folder(survives reinstallations)
- Open source(separate from any financial interest except perhaps the wiki page being on påti)
- Low system load
- Written in pure Python/Py4A/Kivy, meant as a show case app for the Kivy framework
- Currently only Android, but an IOS package is in the works.
- Not a very beautiful GUI.
I would love to get feedback/ideas/help on/with the following:
*
Structure: The service, as it has to be in a service subfolder, cannot
use paths relative to the root, like /lib and so forth, forcing me to
put the lib folder in the service folder unless I manually add folders
to the path. I'd rather not do that as I have had some portability
problems with that earlier. Also it forces me to duplicate some code.
Can that be solved?
* The GUI: I am currently barely scraping by
using the carousel, I have not been successful in using the ScrollView,
which causes problems. How *should* these settings be presented, you
think?
* Code: Please point out any crappy stuff, I know it is
not strictly PEP8 yet, but I will make it that way pretty soon, and that is not the hard part, really. What I
am after is if you find any really bad and dangerous coding anywhere,
bad design decisions.
Because I know there are some, even though I am a pretty
seasoned developer, I am not sure of what is the most pythonic way
sometimes. Also the copy_file part in the synctools module seemed to hit
some of the ugly-tree branches on commit. And perhaps I didn't put in
*years* of polishing to perfection. :-)
* The SMBFilesystem: FileSystemAbstract acts in some very mysterious
ways sometimes, which confuses me and hence SMBFilesystem and my "ExpandSelector" class. I would like to have an absolute path
mode or something. Or I am doing something wrong.
Availability:
It should soon
(google: A couple of hours, been far more now) be possible to find on Google Play. I hope.
I can't say I am completely familiar with the developer tools/store
listing yet.
Documentation/some screenshots:
http://www.optimalbpm.se/wiki/index.php/Optimal_file_sync#Starting_the_app.2FserviceSource and a debug-apk is at source forge:
https://sourceforge.net/projects/optimalfilesync/Kind regards,
Nicklas B
*
I named this app Optimal File Sync just so that it would fit in with
the rest of my projects, not to capitalize on it, just saying. I don't
think there is any way to, anyway. If I made it un-free for some reason
it would be easy to fork.