Alo Sarv
lead developer

Donate via

Latest Builds

version 0.3
tar.gz tar.bz2
Boost 1.33.1 Headers
MLDonkey Downloads Import Module Development
Payment completed
Development in progress.
Developer's Diary

Friday, February 24, 2006

Library page backend

Well, the title pretty much says it all. I wrote the core-side backend for shared files listing handling. The implementation was rather similar to that of downloadlist handling, so relativly easy. Since we didn't have per-file upload-speed calculation (like we have for downloads), and we didn't even store total uploaded amounts for files (ed2k module stores credits, but those are per client, not per file), I introduced those API changes as well. Both ed2k and bt modules support the new features as well.

Needs some tuning still - I'm not happy with how the location is displayed - will probably drop that altogether - but at least the protocol-side backend is in place. Btw, something of interest - SharedFile object has member pointers to both PartData (in case of temp file) and MetaData (which contains extended file information). While we cannot transport pointers directly to the GUI, I realized that I can simply use the object ID's (unique for each object) for the same purpose - we'll transmit two ID's with SharedFile object, and the gui can request the objects behind those ID's separately (if they'r not already known by libcgcomm). libcgcomm, on the other hand, will detect such links, and replace the ID's with actual object pointers in the GUI-side API. Soon we'll see how well this idea works in practice.

One annoying bug that had been bothering me quite a while was that sometimes, GUI would just crash for no apparent reason, and JIT debugging didn't even kick in. After quite some tracking, I discovered libcgcomm sometimes got confused during parsing and broke - and all subsequent parsing attempts naturally failed as well. Further tracking revealed that there was an unhandled exception thrown from somewhere, and it was never caught until it reached Qt code (and Qt doesn't use exceptions internally, so it was never caught there either). But the exception wasn't due to protocol incompatibilities between libcgcomm and cmod_cgcomm - as it turned out, the actual issue was that the parsing buffer was reset only once, right before the parsing loop; so if during parsing, two or more packets were discovered, the parser broke, and that only happened when either core or gui were overloaded and were unable to process the data fast enough.

Learning from the above, I added quite a lot of exception handlers on both core and gui-side parsers, to avoid further crashes and provide human-readable errors (well, developer-readable, anyhow) when things go wrong.

I made a second attempt at the "Home" page (as we now seem to be calling it) layouting, but didn't come up with anything show-worthy sadly. That page is pretty much the most complex page of the GUI, since there isn't a well-established standard on how to do it (and frankly, we don't even know WHAT it should do specifically).

Madcat, ZzZz

In my Humble opinion u should get a litte idea from VS.

The Homepage should give istant access to normal and most common option.

I would suggest something like:

A little line with some stats about how good bad i was.

A button to auto connect all the plugin that support this (ed2k etc..)

A button to start to search.

A button to load a Tracker.

(if possible this 2 buttons numerated so one first connect and then start to search)

Some lines about some FAQ..

I understand is not completly generic.. but is what i whould love about it..
It seems interesting, but as I said in downloads: What about specifing what networks are being uploaded the files? Using icons per network or other manner you prefer ;)

About tagoh suggestions:
VS = Visual Studio?

About "A button to load a tracker": What about future supported networks?
yes VS = Visual Studio sorry :)
i think like the shareaza home.
The truth is, shareaza have the better Gui and to have a good gui, everyone sholud copy it !
I think that "System" suits more than "Home", doesn't it?
Shareaza has the "Home"-page and apart from the network display, I find it quite useless.

The main system page should show you the status of plugins (maybe with users/files on networks, like KCeasy/Apollon). And a tab for every plugin (eD2K serverlist, gnutella hub list, ftp server browser, dc hub browser/user browser/chat, etc.)
It's ok. Some manner of notification for stuff of other networks you are not seeing, like in IM apps.

I mean: You are using ftp and someone from a dc hub sends you a message, then some manner of notification for knowing that. This was said by Madcat quite a lot of time ;)
I seen some hn gui mockups about event notification, I don't know if he changed his thinking about that concept.

It could be nice if quite configurable, allowing even OSD stuff, sounds per each type of event and some button for noiseless manner because it's late or other causes.

What about a configuration asistant? The average user is clueless and clumsy with computer stuff, so I think Hydranode must be even a lot more easier to configure % use than eMule/Azureus and other P2P clients.
Configuration should be at a minimum. First basic settings suitable for most, then a wizard inside the gui to help setting the most important things (with a basic version for the really basic user, and a more advanced one, that shows the power users what this baby all can do so to speak).
Post a Comment

<< Home

This page is powered by Blogger. Isn't yours?