== Code (without DB struct change) ==
[POSTPONED]multi announce support ( like at http://thepiratebay.org/ ), i.e. "bt_override_announce_url" may contain array of tiers of announce urls
[POSTPONED]"min interval" option - "bt_announce_min_interval"

[DONE]Bug: Ability to override/append our announce url using "announce-list"
[DONE]Fature: Patch (override with our announce url) torrent-file at the moment of its download (but not at moment of its upload)
[DONE]Bug: when a new tracker added to active torrent in the client (uTorrent 1.8.2). Client doesn't send 'started' event...
[DONE]Bug: announce.php - Check if there are two peers (distinct IP) downloading with the same passkey: "SELECT DISTINCT COUNT(btau.ip) FROM ..." -> "SELECT COUNT(DISTINCT btau.ip) FROM ..."
[DONE]Bug: announce.php - Check if there are two peers (distinct IP) downloading with the same passkey: do not set passkey status (bt_message exits from script) - swap "db_query(...);" and "bt_message(..., BITTORRENT_MESSAGE_ERROR);"
[DONE]Bug: announce.php - Check if there are two peers (distinct IP) downloading with the same passkey: to many bugs - rewritten
[DONE]Bug: unknown user_load() in announce.php ( see http://drupal.org/node/413464 )
[DONE]Port: Validation of uploading torrent-file ( see "bt_torrent_widget_upload_validators" )

remove param "$passkey" from "torrentfield_get_torrent()" and use "bt_tracker_get_passkey" function: use "module_exists" to check if "bt_tracker", or define our own hook "hook_torrentfield_download" 
announce.php - add passkey existance validation

torrent upload - check for the same info_hash existence

/admin/content/node-type/torrent/fields/field_torrent_file (TorrentField field settings):
{
  Torrent settings: remove setting "Permitted upload file extensions" and set value to "torrent"
	Global settings: remove setting "Required" and set value to TRUE (?)
  ...
}

== database structure changes ==
[REJECTED]store "peer_id" and "info_hash" values as is, i.e. do not use bin2hex(), if it's possible

[POSTPONED]set "bt_tracker_active_users.ip" type to "varchar(32)" // store as byte-string in hex format ("FFFFFFFF"), not "XXX.XXX.XXX.XXX" // + IPV6 Support

[NEED_INFO]define "primary key" for "bt_tracker_active_users" [peer_id, peer_key, info_hash]
[NEED_INFO]remove field "announce_url" from "bt_torrents"
[NEED_INFO]add index "unique key" for "bt_torrents" ["info_hash"]

[DONE]set "bt_tracker_users.passkey" type to "char(40)"
[DONE]set "bt_torrents.info_hash", "bt_tracker_active_users.info_hash" type to "char(40)" (from "varchar(255)")
[DONE]set "bt_tracker_active_users.peer_id" type to "char(40)"
[DONE]set "bt_tracker_active_users.peer_key" type to "varchar(255)"
[DONE]rename "bt_tracker_active_users" to "bt_tracker_connections"
[DONE]add field "upload_speed" and "download_speed" to "bt_tracker_active_users"
[DONE]add field "total_size" to "bt_torrents" //TODO: maybe remove it in future...
[DONE]add field "last_seed" to "bt_torrents"
[DONE]rename field "nid" to "fid" in "bt_torrents" (actually not simple renamed in case of updating from previous version)
[DONE]rename field "nid" to "fid" in "bt_torrents_files" (actually not simple renamed in case of updating from previous version)
[DONE]add index "unique key" for "bt_tracker_users" [passkey]
[DONE]delete index "primary key" for "bt_torrents_files" [nid]
[DONE]add index "index" ("fid_index") in "bt_torrents_files" [fid]

== interface ==

Torrents: U 13 D 5

[Torrent]
[DONE] File List [path, filename, size]
[DONE] Seeding last time
Last seed only if no seeders
Statistics 1 (with ajax detailed list): snatches, downloaded
Statistics 2 (with ajax detailed list with total row): seeders (seeding speed), leechers (leeching speed)
/*
detailed list columns: user, NAT, Uploaded, Upload speed, Downloaded, Download speed, Ratio, Progress, Total Time, Inaction (?) Time, Client
total row colums: 
*/
Created + Updated // "Updated" is optional // if( "Created" != "Updated") { Show that torrent has been updated. }

"Send invitation to seed for downloaded" button (Work via "PrivateMsg" or e-mail)

[Profile View]
Last BitTorrent activity time
User's own(uploaded/created) torrent list / My torrent list - external view
User's now seeding torrent list
User's now leeching torrent list
User's downloaded torrent list
Passkey (only for owner or admin)
Bind IP to Passkey option

[Profile Edit]
Show "Last BitTorrent activity time"
Show "User's own(uploaded/created) torrent list / My torrent list"
Show "User's now seeding torrent list"
Show "User's now leeching torrent list"
Show "User's downloaded torrent list"
"Change Passkey" button

[Torrent Search]
Torrent State: all, active, dead, without seeds, distributed download

== Thoughts ==

"bt_torrents.timestamp" // timestamp of first torrent-file upload. for control updating of torrent-file. timestamp of new torrent-file can be retrived from "files" table (via "fid")
/*
maybe for quick process, store not only "timestamp" (of last torrent-file update in this table, but "create_timestamp" (duplicate to "files.timestamp") and "updated_timestamp")
*/

Total user seeding time => Bonus

============


Links:
http://wiki.theory.org/BitTorrentSpecification
http://bittorrent.org/beps/bep_0012.html - "announce-list" Metadata Extension
http://en.wikipedia.org/wiki/BitTorrent_(protocol)