Page 1 of 1

AirDC++ 2.30

PostPosted: 26 May 2012, 17:33
by maksis
The main new thing in 2.30 is called bundles, but it also focuses on improving performance especially on the following areas:

- matching a filelist is up to 10 times faster than before
- filelists will load up to 4 times faster when using ADL search
- the client has been tested with nearly 1 million files in the download queue without experiencing freezes or performance problems


What is a bundle?

Bundle is an upper level grouping for the files that are being download, which can consist of multiple files. In 2.30, all downloaded files, except file list and text files viewed in the client, will be part of a bundle. The grouping isn’t fixed, and the bundle content can be modified in several ways. There are two types of bundles: directory bundles and file bundles.

Directory Bundle

If you have chosen to download a folder (or many of them) from a file list/search/auto search, each of the selected parent folders will become a bundle that will contain all files that are inside the particular folder(s). A common example of a directory bundle is a “release” folder that is being downloaded from a file list/search/auto search.

Directory bundles can be moved to a different location, possible sub folders can be moved separately when they will split into new bundles. If you are trying to move or download a bundle to a location with an existing directory bundle, the bundle being moved/created will always be merged into the existing one.

The bundle files will be grouped together in transfer view, with the parent item showing the progress and other information of the whole bundle.

When moving/removing bundles, the user will be asked whether he also wants to move/rename possible finished files that are part of the bundle (or the particular sub folder). Individual files can also be added and removed from the bundle.

File Bundle

File bundles will be created when you try to download individual files from the search or from a file list, as in those cases there is no folder that can be used to unite the files. Basically file bundle only are single files, but the client threats them equal to directory bundles (for example when searching for alternates or when determining the download order).

There can also be several file bundles within the same directory. However, there can't be file bundles inside a directory bundle. If you try to download a directory into a folder containing file bundles, the file bundles will be always merged into the directory bundle. Furthermore, file bundles are only created if there is no directory bundle in the target destination folder, in which case the file would be added into the existing directory bundle.

You can also split individual files from directory bundles by moving them to a different location, and then the split items will become file bundles (or being merged into another directory bundle if there is one).

New priority system

Each bundle will have an own download priority and each file that is part of a bundle will have a different one (except with file bundles when there is only one file). The download order will be principally determined from the bundle priorities. The file priorities are only being used when determining the download order of files inside the bundle.

The exception for the bundle priority order is the highest priority. Files with highest priority will always be downloaded first and it will always be used with file lists and files viewed in the client. It can also be used for individual bundle files to override the priority of the main bundle.

There are four settings for the download order: Balanced, progress, the date added and random. The client will update the priorities in the first two cases based on the current state, while in the last two cases the order will only change when new bundles has been added.

The option "Balanced" is the most advanced of the available options. It will calculate a total speed for each source and then calculate a theoretical maximum speed for each bundle based on their sources. The priorities will be set on basis that the bundles with the slowest/smallest number of sources will get the highest priority.

New search for alternates

The searching interval is now dynamic and alternatives will be searched for by bundles. The interval to search a bundle is 60 minutes. If there is only one bundle in queue, the client will perform a search every 60 minutes, with 2 bundles every 30 minutes, with 3 bundles every 20 minutes etc. as long as the interval is 5 minutes (which requires 12 queued bundles), after which the searching interval won’t be reduced anymore.

The client will use weighted random to choose the priority from where a searched bundle will be chosen. This means that bundles with higher priority will be searched for more often than the lower priority ones. Bundles with the priority paused and lowest won’t be searched for alternates at all.

There is also an alternative searching interval for recent bundle. User has an option to specify the maximum age in hours when the bundle is being considered as recent. The default value is 24 hours and the bundle age is being determined from the last modify date from the filelist of other users. During the time of recent hours, the bundle will be searched for with a minimum interval of every 10 minutes. After the specified recent time has passed, the bundle will be removed from the recent searches and searched like all other normal bundles.

In ADC hubs, the sources will be added by using recursive partial filelist just like before. In NMDC hubs the alternates will be added by assigning the source for all items in the bundle, which is faster than downloading the full file list, but may cause manual readding later if the source doesn’t have all bundle files in share. Previously the adding in NMDC hubs was done based on the file name; the sources were only added for a single folder and only if it consisted of split RAR archives. The type of the bundle or naming of the files doesn’t matter anymore.

The primary method to get the matching path is to cut folders like CD1, DVD1, Sample etc. from the path and in ADC hubs download a partial recursive filelist from the upper level folder (regardless of the folder name). In NMDC the matching is similar, but it’s required that the name of the bundle is being found from the path of the remote file. If the bundle has more complicated folder structure and the bundle name can’t be found from the full path of the result, the match path will picked in both protocols by subtracting common folder names from the end.

Improved favorite download locations

Users will now be able to add favorite download with the same virtual name, just like with shared directories. Items with the same virtual name will be merged when displaying the "download to" menu. Shared directories are also being displayed in the "Download to" menu by default (by virtual name). The client will also save all manually selected locations (by using the “Browse…” option) so they are listed after restarting the client. You can also add date variables in the download directories, and there’s an option to use the modify date of the remote directory to replace them.

When choosing a merged folder as download location, the client will compare the free disk space for each real path under the virtual name and chooses the one with most free space available. The size is also counted for mounted directories and network paths even if they haven't been mounted locally. Additionally, the client also checks the queue and how much space each bundle will need on its partition when finished, and add that to the used space. If there are no locations with sufficient disk space, the user will be asked for confirmation if he really wants to queue the files. You can also specify the download location in auto search by virtual name; the client will pick the real path with most disk space when matches are found.

Adding bundles in share

As part of the goal to spread the downloads faster, there are new features making it possible to add downloads directly into shared folders without fear of sharing incomplete bundles or bundles with corrupted or invalid content.

The client won't add anything from queued bundles into share when performing refresh. After a bundle finishes downloading, it will first be scanned for missing/extra files (unfinished bundles will be ignored when scanning the whole share to avoid misleading reports). If no problems are being found, all of its files will be scheduled for hashing. If any of the files fail the SFV check that is being performed during the hashing, the bundle folder won't be shared.

Note that those checks are only being performed for folders that are being downloaded directly into share. Folders that are moved into share later and added via normal refreshed will be shared even if the content is invalid.

Partial bundle sharing (ADC hubs only)

The previous versions of AirDC++ have also matched finished and queued files when it receives TTH searches. It has been possible to add users with finished files as sources only for the file that was being searched for, meaning that for example all files had to be searched for one by one to get the finished source(s) for all of them. The version 2.30 extends this feature, meaning that it's able to send information about the whole bundle and its finished items. The client also supports sharing segments of single partially downloaded files just like before.

When receiving a TTH search and the client finds a matching file from the queue, it will check the bundle of which the file is part of. If there are finished files in that particular bundle, it will tell the searching user to download a TTH list of them (which is similar to partial filelists). The responding user will also check if there still are queued files in that particular bundle, and if that's the case, it will request the other user to perform a similar check for his bundle and report the results.

If both users have queued files for the same bundle, they will agree on sending updates to each other’s when any of the files in that bundle finishes downloading (meaning that the other user isn’t source for it already). After the notification has been sent, the receiving user adds the sender as source for that file instantly.

Upload bundles (ADC hubs only)

The uploader will see the following information about the total progress of the downloaders bundle: download speed, download progress and time remaining.



- New downloading/queuing system (read viewtopic.php?t=1344 for more information)
- New favorite download directories
- New auto search including a new tab in GUI
- Instant sending of files in chat
- Mark queued and finished files/folders in search, chat and filelists
- Recursive SFV check in own filelist + allow choosing multiple directories to scan
- Auto update of GeoIP country databases, add IPv6 country database (DC++)
- Connection type detection improvements (DC++)
- Customizable site search menu items
- Group same directories in search results (ADC only)
- Support Time params in download paths
- Listing of ADC searches in Search Spy
- UDP command detection in the CDM Debug frame
- Use error color in system log for error messages
- Add menu items to add auto searches from paths in system log
- Add a menu item to delete files existing on the disk in system log
- Use system icons also for folders (if enabled)


- More flexible link detection in chat
- Share scanner improvements (reporting mainly)
- Improved ADL Search matching speed
- DC++ socket merge (IPv4+IPv6, the client works on Wine again)
- Save the previous custom download locations into the setting file
- Reorganized settings
- Also compare the file name when checking for dupes
- Limit the number of new connections for downloads
- Theme support changes, includes more colors and icons. See Themes/readme.txt for details
- Copy IP addresses without the country part
- Don't scroll to the end when viewing text files
- Use system icons also for directories (if enabled)
- Improved scroll handling in system log
- Also list real paths in the toolbar refresh menu
- Change the refresh button to always show the dropdown menu
- Change the language selection system, use dropdown in the settings
- Add some context-awareness for the search result right click menu'
- Allow links to end with the char "!"


- Not all search replies were sent in ADC hubs
- More reliable path opening in system log
- Improve the accuracy for estimated time for queued searches
- Updated libraries (Boost, ZLIB, OpenSSL, PCRE, WTL, Richedit)
- Numerous fixes for freezes and other bugs
- Always connect the ADC search results to a correct hub
- Detect Windows 8 in stats
- Fix a problem on redirected HTTP addresses
- Fix scrolling problem with long message as 1 word
- Fix a popup crash on download failed
- Fixes memory leaks
- Fixes handling of some rare characters in SFV files


NOTE: The version 2.30 uses a different queue format which means that files queued with 2.30 aren't compatible with older versions. Also the format of favorite download locations is different. Your old queue and favorite download locations will be converted into new format when starting 2.30 for the first time. However, the old queued files aren't grouped in directory bundles (it only works for newly added files).