michaelmure / arbore-qt Goto Github PK
View Code? Open in Web Editor NEWFriend-to-friend filesharing app to save the world from dystopia
License: MIT License
Friend-to-friend filesharing app to save the world from dystopia
License: MIT License
We need to find a way to tell IPFS to stop downloading something to be able to implement Share::pause()
when an Object is shared by multiple Share or even inside the same Share (for instance, the webui share have two times the same folder), we instanciate mutliple times an Object instance and do multiple time the API request to fetch details.
We can create a pool/cache of Object where we will look into to see if an Object already exist with the same hash and use it.
We need to persist at least Share details for now, probably contact information in the future.
We can use a SqLite database to do that.
I have this code laying around:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
QString path = QStandardPaths::writableLocation(QStandardPaths::DataLocation) +
QDir::separator() + "test.db3";
qDebug() << path;
db.setDatabaseName(path);
db.open();
db.close();
Original link: ipfs/kubo#961
I would really like to see happen a friend-to-friend filesharing app with the following caracteristics:
The underlying goal is to reduce the need to use solution like Facebook, Dropbox, Drive... for file/pictures exchange that should be kept private. Also this.
IPFS seems to be the perfect backend for this project. What I envision is a thin GUI layer that provide the low-friction caracteristics. Most of the actual feature would be in IPFS. Here is the issues that needs to be resolved for this project to happen:
Optional:
On a side note, a problem that arise with low-diffusion filesharing is that sender and receivers need to be online at the same time. The future Filecoin seems to be a good solution to mitigate this problem as the sender could incentive other nodes to replicate and hold the encrypted blob online while he is offline.
WIP -- The actual UI is to be defined
When launching Arbore, the only window available is the profile window (see #3). When a profile is choosen and unlocked, the main window appear.
Content:
Inspiration & user familiar concept:
When a user share something with another user, it appears on his share timeline, in a way similar to a social network collection of post. The actual download can then be triggered on demand.
The aspect and what can be done on a share notification change depending on its status.
The user can also manually add a public share by using the Magnet link.
Shares are presented in two timeline (incoming/downloaded and outgoing).
We should find a method to package Arbore+IPFS for the various target OS.
Windows:
Linux:
UI Mockup
Inspiration & user familiar concept
Profile management is a key problem to avoid the user to deal with cryptographic primitive and notions. The idea here is to map the public/private cryptographic key that define the user identity to the concept of "profile".
To avoid the user to deal with keypair, profile import/export can use more user-friendly concept:
Things left to be thinkered:
For the WebUI share, I get (progress 58 / 59) in the logs, even if everything is local.
23:32 <Bat`O> i don't have much hope for this one, but is there a way to have the bandwidth usage relative to a hash ?
23:34 nothing in the api
23:34 but!
23:34 i think you could still get that info
23:34 ipfs log tail returns a json stream of events
23:34 you could parse that stream for 'send block X'
23:35 and use that to estimate bandwidth for a given block
23:35 actually, that would be a really cool app to write
23:35 print out bandwidth for every outgoing block
We need to add a filter class on top of the ShareModel to filter the list based on a research string, a status ....
https://github.com/MichaelMure/Arbore-qt/blob/master/src/file.cpp#L33
The real size of the block is missing, we need to get that from IPFS
implement Share::trigger_download()
We should find a way to stop/kill the daemon when the main app crash or is killed.
Step to reproduce:
Currently there is a race condition when arbore start, as the Share try to build their graph of object when the daemon might not be reachable yet.
We have nothing to deal with that yet, nor to deal with the daemon crashing or else. This is a problem also because the daemon might not even be local, thus more unreachability problem.
I have been playing around with the ShareDetails.qml
The textual_arborescence is convenient for our current tests purposes. Yet it seems a TreeView would be a user friendly display since shares contains folders and files
We need to separate this two download to be able to show share file names and size, but without triggering the actual download.
Bat`O: you could just do 'ipfs object stat QmHash'
10:22 pm
also, 'ipfs file ls QmHash'
10:23 pm
the file ls one doesnt actually show it in the commands output, but it shows size through the API i think
We need to be able to:
It would be nice to have a graphical logo in addition to the textual logo we already have.
It needs to fit well inside a square/circle.
It might be the 'ae' stylized letters, but it could also be something more graphical, maybe something derived from a tree (arbore mean tree in latin).
To avoid data corruption, we should update the database record each time the Share change.
Each Ipfs command binds on a QNetworkReply::finished SIGNAL to get its results.
Each command then has to deal with the possible network failures.
It would be better if Ipfs would make sur the connection goes well (possibly re issuing the request) and would guaranty the command to get its result.
WIP -- The actual UI is to be defined.
The user should be able to:
To avoid the user from manually adding every contact he might know, contacts data could be propagated from known user, like a trust chain. To do that, users could share (with optout) on their IPNS space their collection of contact, encrypted for each of their contact. Arbore can then automatically retrieve those collection and suggest contact for addition.
That is, replace the use of ipfs refs local.
See also #33
23:26 <BatO> is there a way to trigger the download of a hash without hanging ? 23:27 <Bat
O> ipfs pin add hang and only add the pin when everything is local
23:27 <Bat`O> so it block a http request as well
23:27 actually, i was thinking of adding a command to do just that
23:28 right now, you can do 'ipfs block get ' and cancel the request
23:28 and it will continue to fetch it
Note that we still need to use ipfs pin add
to keep the Share in the datastore.
We use QNetworkAccessManager to access the daemon via the http API.
QNetworkAccessManager has a hardcoded limit at 6 concurrent access (https://github.com/qtproject/qtbase/blob/dev/src/network/access/qhttpnetworkconnection.cpp#L63)
It seems to slow down things (more test needed here to be sure).
A solution might be to use multiple instance of QNetworkAccessManager and load balance between them.
Some notes here: ipfs/notes#33
Inspiration & user familiar concept
Public sharing produce a Magnet link containing the root ipfs hash to share with people. This magnet could be available for private sharing as well. How this magnet will be made available to the user is still to be thinkered.
Private sharing produce a notification for all the recipient (more details on the future "Download" issue).
Optional:
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.