Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge remote-tracking branch 'origin/svn/trunk'

  • Loading branch information...
commit d0c5795d3801b201356c57d0f17b4d44f45f3ab1 2 parents 98b3618 + be85c73
@wereHamster authored
Showing with 12,227 additions and 8,895 deletions.
  1. +64 −1 NEWS
  2. +62 −68 Transmission.xcodeproj/project.pbxproj
  3. +2 −2 cli/Makefile.am
  4. +25 −13 cli/cli.c
  5. +222 −100 configure.ac
  6. +2 −2 daemon/Makefile.am
  7. +13 −13 daemon/daemon.c
  8. +27 −18 daemon/remote.c
  9. +4 −4 daemon/transmission-remote.1
  10. +2 −2 gtk/Makefile.am
  11. +3 −3 gtk/actions.c
  12. +0 −2  gtk/conf.c
  13. +20 −19 gtk/details.c
  14. +4 −4 gtk/filter.c
  15. +4 −3 gtk/hig.c
  16. BIN  gtk/icons/hicolor_apps_16x16_transmission.png
  17. BIN  gtk/icons/hicolor_apps_22x22_transmission.png
  18. BIN  gtk/icons/hicolor_apps_24x24_transmission.png
  19. BIN  gtk/icons/hicolor_apps_256x256_transmission.png
  20. BIN  gtk/icons/hicolor_apps_32x32_transmission.png
  21. BIN  gtk/icons/hicolor_apps_48x48_transmission.png
  22. +36 −29 gtk/main.c
  23. +3 −3 gtk/makemeta-ui.c
  24. +16 −1 gtk/msgwin.c
  25. +222 −17 gtk/notify.c
  26. +2 −0  gtk/notify.h
  27. +4 −4 gtk/open-dialog.c
  28. +1 −1  gtk/relocate.c
  29. +8 −4 gtk/tr-core.c
  30. +12 −12 gtk/tr-prefs.c
  31. +0 −2  gtk/tr-prefs.h
  32. +10 −6 gtk/tr-window.c
  33. +54 −17 gtk/util.c
  34. +6 −0 gtk/util.h
  35. BIN  gtk/utilities.png
  36. +5 −5 libtransmission/Makefile.am
  37. +10 −2 libtransmission/announcer-http.c
  38. +8 −0 libtransmission/announcer-udp.c
  39. +34 −22 libtransmission/announcer.c
  40. +4 −8 libtransmission/bandwidth.c
  41. +1 −1  libtransmission/bencode-test.c
  42. +10 −0 libtransmission/bencode.c
  43. +23 −0 libtransmission/clients.c
  44. +4 −10 libtransmission/completion.c
  45. +18 −12 libtransmission/fdlimit.c
  46. +2 −2 libtransmission/natpmp.c
  47. +1 −1  libtransmission/{natpmp.h → natpmp_local.h}
  48. +0 −2  libtransmission/net.c
  49. +1 −2  libtransmission/peer-io.c
  50. +98 −12 libtransmission/peer-mgr.c
  51. +3 −3 libtransmission/peer-msgs.c
  52. +0 −12 libtransmission/platform.h
  53. +1 −1  libtransmission/port-forwarding.c
  54. +1 −1  libtransmission/rpc-server.c
  55. +1 −1  libtransmission/rpcimpl.c
  56. +1 −2  libtransmission/session.c
  57. +5 −7 libtransmission/torrent.c
  58. +0 −2  libtransmission/tr-utp.c
  59. +3 −0  libtransmission/tr-utp.h
  60. +1 −1  libtransmission/transmission.h
  61. +109 −51 libtransmission/upnp.c
  62. +49 −17 libtransmission/utils.c
  63. +17 −1 libtransmission/utils.h
  64. +4 −1 libtransmission/web.c
  65. +7 −6 libtransmission/webseed.c
  66. +1 −1  macosx/AboutWindowController.h
  67. +2 −2 macosx/AboutWindowController.m
  68. +1 −1  macosx/AddMagnetWindowController.h
  69. +10 −16 macosx/AddMagnetWindowController.m
  70. +1 −1  macosx/AddWindowController.h
  71. +14 −20 macosx/AddWindowController.m
  72. +1 −1  macosx/BadgeView.h
  73. +1 −1  macosx/BadgeView.m
  74. +1 −1  macosx/Badger.h
  75. +1 −1  macosx/Badger.m
  76. +2 −2 macosx/BlocklistDownloader.h
  77. +29 −30 macosx/BlocklistDownloader.m
  78. +1 −1  macosx/BlocklistDownloaderViewController.h
  79. +1 −1  macosx/BlocklistDownloaderViewController.m
  80. +1 −1  macosx/BlocklistScheduler.h
  81. +1 −1  macosx/BlocklistScheduler.m
  82. +1 −1  macosx/BonjourController.h
  83. +1 −1  macosx/BonjourController.m
  84. +1 −1  macosx/ButtonToolbarItem.h
  85. +1 −1  macosx/ButtonToolbarItem.m
  86. +1 −1  macosx/ColorTextField.h
  87. +1 −1  macosx/ColorTextField.m
  88. +9 −5 macosx/Controller.h
  89. +721 −324 macosx/Controller.m
  90. +1 −1  macosx/CreatorWindowController.h
  91. +15 −18 macosx/CreatorWindowController.m
  92. +2 −0  macosx/Defaults.plist
  93. +1 −1  macosx/DragOverlayView.h
  94. +1 −1  macosx/DragOverlayView.m
  95. +1 −1  macosx/DragOverlayWindow.h
  96. +1 −1  macosx/DragOverlayWindow.m
  97. +1 −1  macosx/ExpandedPathToIconTransformer.h
  98. +1 −1  macosx/ExpandedPathToIconTransformer.m
  99. +1 −1  macosx/ExpandedPathToPathTransformer.h
  100. +1 −1  macosx/ExpandedPathToPathTransformer.m
  101. +15 −14 macosx/FileListNode.h
  102. +9 −26 macosx/FileListNode.m
  103. +1 −1  macosx/FileNameCell.h
  104. +1 −1  macosx/FileNameCell.m
  105. +2 −4 macosx/FileOutlineController.h
  106. +43 −91 macosx/FileOutlineController.m
  107. +1 −1  macosx/FileOutlineView.h
  108. +1 −1  macosx/FileOutlineView.m
  109. +1 −1  macosx/FilePriorityCell.h
  110. +15 −9 macosx/FilePriorityCell.m
  111. +1 −1  macosx/FilterBarController.h
  112. +1 −3 macosx/FilterBarController.m
  113. +1 −1  macosx/FilterBarView.h
  114. +1 −1  macosx/FilterBarView.m
  115. +1 −1  macosx/FilterButton.h
  116. +1 −1  macosx/FilterButton.m
  117. +1 −1  macosx/GlobalOptionsPopoverViewController.h
  118. +2 −2 macosx/GlobalOptionsPopoverViewController.m
  119. +1 −1  macosx/GroupToolbarItem.h
  120. +1 −1  macosx/GroupToolbarItem.m
  121. +1 −1  macosx/GroupsController.h
  122. +3 −12 macosx/GroupsController.m
  123. +1 −1  macosx/GroupsPrefsController.h
  124. +71 −45 macosx/GroupsPrefsController.m
  125. BIN  macosx/Growl.framework/Versions/A/Growl
  126. +2 −3 macosx/Growl.framework/Versions/A/Headers/Growl.h
  127. +0 −780 macosx/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h
  128. +40 −64 macosx/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h
  129. +25 −32 macosx/Growl.framework/Versions/A/Headers/GrowlDefines.h
  130. +10 −10 macosx/Growl.framework/Versions/A/Resources/Info.plist
  131. +34 −0 macosx/Growl.framework/Versions/A/_CodeSignature/CodeResources
  132. BIN  macosx/Images/ActionOn.png
  133. BIN  macosx/Images/Bandwidth.png
  134. BIN  macosx/Images/DownArrowGroupTemplate.png
  135. BIN  macosx/Images/DownArrowTemplate.png
  136. BIN  macosx/Images/DownloadBadge.png
  137. BIN  macosx/Images/GreenDot.png
  138. BIN  macosx/Images/Groups.png
  139. BIN  macosx/Images/GroupsNoneTemplate.png
  140. BIN  macosx/Images/InfoPeers.png
  141. BIN  macosx/Images/InfoTracker.png
  142. BIN  macosx/Images/PinTemplate.png
  143. BIN  macosx/Images/PriorityControlHigh.png
  144. BIN  macosx/Images/PriorityControlLow.png
  145. BIN  macosx/Images/PriorityControlNormal.png
  146. BIN  macosx/Images/PriorityHigh.png
  147. BIN  macosx/Images/PriorityHighTemplate.png
  148. BIN  macosx/Images/PriorityLow.png
  149. BIN  macosx/Images/PriorityLowTemplate.png
  150. BIN  macosx/Images/PriorityNone.png
  151. BIN  macosx/Images/PriorityNormal.png
  152. BIN  macosx/Images/PriorityNormalTemplate.png
  153. BIN  macosx/Images/QuitBadge.png
  154. BIN  macosx/Images/ResumeHover.png
  155. BIN  macosx/Images/ResumeNoWaitHover.png
  156. BIN  macosx/Images/RevealOff.png
  157. BIN  macosx/Images/RevealOn.png
  158. BIN  macosx/Images/ToolbarCreateTemplate.png
  159. BIN  macosx/Images/ToolbarFilterTemplate.png
  160. BIN  macosx/Images/ToolbarOpenTemplate.png
  161. BIN  macosx/Images/ToolbarOpenWebTemplate.png
  162. BIN  macosx/Images/ToolbarResumeAllTemplate.png
  163. BIN  macosx/Images/ToolbarResumeSelectedTemplate.png
  164. BIN  macosx/Images/TurtleTemplate.png
  165. BIN  macosx/Images/UpArrowGroupTemplate.png
  166. BIN  macosx/Images/UpArrowTemplate.png
  167. BIN  macosx/Images/UploadBadge.png
  168. BIN  macosx/Images/YellowDot.png
  169. BIN  macosx/Images/YingYangGroupTemplate.png
  170. +1 −1  macosx/Info.plist
  171. +1 −1  macosx/InfoActivityViewController.h
  172. +1 −1  macosx/InfoActivityViewController.m
  173. +1 −1  macosx/InfoFileViewController.h
  174. +2 −2 macosx/InfoFileViewController.m
  175. +1 −1  macosx/InfoGeneralViewController.h
  176. +1 −1  macosx/InfoGeneralViewController.m
  177. +1 −1  macosx/InfoOptionsViewController.h
  178. +1 −1  macosx/InfoOptionsViewController.m
  179. +1 −1  macosx/InfoPeersViewController.h
  180. +1 −1  macosx/InfoPeersViewController.m
  181. +1 −1  macosx/InfoTabButtonBack.h
  182. +1 −1  macosx/InfoTabButtonBack.m
  183. +1 −1  macosx/InfoTabButtonCell.h
  184. +1 −1  macosx/InfoTabButtonCell.m
  185. +1 −1  macosx/InfoTextField.h
  186. +1 −1  macosx/InfoTextField.m
  187. +1 −1  macosx/InfoTrackersViewController.h
  188. +61 −11 macosx/InfoTrackersViewController.m
  189. +1 −1  macosx/InfoViewController.h
  190. +1 −1  macosx/InfoWindowController.h
  191. +17 −2 macosx/InfoWindowController.m
  192. +2 −0  macosx/Makefile.am
  193. +1 −1  macosx/MessageWindowController.h
  194. +34 −44 macosx/MessageWindowController.m
  195. +2 −1  macosx/NSApplicationAdditions.h
  196. +1 −1  macosx/NSApplicationAdditions.m
  197. +31 −0 macosx/NSImageAdditions.h
  198. +45 −0 macosx/NSImageAdditions.m
  199. +1 −1  macosx/NSMutableArrayAdditions.h
  200. +1 −1  macosx/NSMutableArrayAdditions.m
  201. +1 −1  macosx/NSStringAdditions.h
  202. +1 −1  macosx/NSStringAdditions.m
  203. +1 −1  macosx/PeerProgressIndicatorCell.h
  204. +1 −1  macosx/PeerProgressIndicatorCell.m
  205. +1 −1  macosx/PeerTableView.h
  206. +1 −1  macosx/PeerTableView.m
  207. +1 −1  macosx/PiecesView.h
  208. +1 −1  macosx/PiecesView.m
  209. +1 −1  macosx/PortChecker.h
  210. +1 −1  macosx/PortChecker.m
  211. +1 −1  macosx/PredicateEditorRowTemplateAny.h
  212. +1 −1  macosx/PredicateEditorRowTemplateAny.m
  213. +5 −1 macosx/PrefsController.h
  214. +78 −94 macosx/PrefsController.m
  215. +1 −1  macosx/PrefsWindow.h
  216. +1 −1  macosx/PrefsWindow.m
  217. +1 −1  macosx/ProgressGradients.h
  218. +1 −1  macosx/ProgressGradients.m
  219. +1 −1  macosx/StatsWindowController.h
  220. +2 −2 macosx/StatsWindowController.m
  221. +1 −1  macosx/StatusBarController.h
  222. +1 −1  macosx/StatusBarController.m
  223. +1 −1  macosx/StatusBarView.h
  224. +1 −1  macosx/StatusBarView.m
  225. +1 −1  macosx/ToolbarSegmentedCell.h
  226. +1 −1  macosx/ToolbarSegmentedCell.m
  227. +1 −1  macosx/Torrent.h
  228. +61 −35 macosx/Torrent.m
  229. +1 −1  macosx/TorrentCell.h
  230. +54 −11 macosx/TorrentCell.m
  231. +2 −1  macosx/TorrentGroup.h
  232. +12 −1 macosx/TorrentGroup.m
  233. +1 −1  macosx/TorrentTableView.h
  234. +48 −10 macosx/TorrentTableView.m
  235. +1 −1  macosx/TrackerCell.h
  236. +31 −32 macosx/TrackerCell.m
  237. +6 −4 macosx/TrackerNode.h
  238. +19 −7 macosx/TrackerNode.m
  239. +1 −1  macosx/TrackerTableView.h
  240. +1 −1  macosx/TrackerTableView.m
  241. BIN  macosx/TransmissionHelp/TransmissionHelp.helpindex
  242. BIN  macosx/TransmissionHelp/gfx/TransWindow.png
  243. BIN  macosx/TransmissionHelp/gfx/TransmissionIcon.png
  244. BIN  macosx/TransmissionHelp/gfx/creation.png
  245. BIN  macosx/TransmissionHelp/gfx/fileselection.png
  246. BIN  macosx/TransmissionHelp/gfx/group.png
  247. BIN  macosx/TransmissionHelp/gfx/inspector.png
  248. BIN  macosx/TransmissionHelp/gfx/open.png
  249. BIN  macosx/TransmissionHelp/gfx/queue.png
  250. BIN  macosx/TransmissionHelp/gfx/scheduler.png
  251. +1 −1  macosx/TransmissionHelp/html/gettingstarted.html
  252. +1 −1  macosx/URLSheetWindowController.h
  253. +1 −1  macosx/URLSheetWindowController.m
  254. +38 −36 macosx/de.lproj/AddMagnetWindow.xib
  255. +91 −64 macosx/de.lproj/AddWindow.xib
  256. +70 −138 macosx/de.lproj/Creator.xib
  257. +1,379 −251 macosx/de.lproj/GlobalOptionsPopover.xib
  258. +94 −91 macosx/de.lproj/GroupRules.xib
  259. +15 −23 macosx/de.lproj/InfoActivityView.xib
  260. +971 −1,054 macosx/de.lproj/InfoGeneralView.xib
  261. +73 −71 macosx/de.lproj/InfoOptionsView.xib
  262. +1 −1  macosx/de.lproj/InfoPlist.strings
  263. BIN  macosx/de.lproj/Localizable.strings
  264. +476 −445 macosx/de.lproj/MainMenu.xib
  265. +1,856 −1,669 macosx/de.lproj/PrefsWindow.xib
  266. +73 −50 macosx/en.lproj/AddMagnetWindow.xib
  267. +135 −79 macosx/en.lproj/AddWindow.xib
  268. +52 −46 macosx/en.lproj/InfoActivityView.xib
  269. +22 −105 macosx/en.lproj/InfoGeneralView.xib
  270. +201 −64 macosx/en.lproj/InfoOptionsView.xib
  271. +1 −1  macosx/en.lproj/InfoPlist.strings
  272. BIN  macosx/en.lproj/Localizable.strings
  273. +389 −373 macosx/en.lproj/MainMenu.xib
  274. +1,848 −1,652 macosx/en.lproj/PrefsWindow.xib
  275. +23 −4 macosx/es.lproj/AddMagnetWindow.xib
  276. +33 −6 macosx/es.lproj/AddWindow.xib
  277. +57 −10 macosx/es.lproj/Creator.xib
  278. +1,396 −261 macosx/es.lproj/GlobalOptionsPopover.xib
Sorry, we could not display the entire diff because too many files (557) changed.
View
65 NEWS
@@ -1,4 +1,67 @@
-=== Transmission 2.40 (2011/10/05) ===
+=== Transmission 2.50 (2012/02/14) ===
+[http://trac.transmissionbt.com/query?milestone=2.50&group=component&order=severity All tickets closed by this release]
+==== All Platforms ====
+ * Fix crash when adding some magnet links
+ * Improved support for downloading webseeds with large files
+ * Gracefully handle incorrectly-compressed data from webseed downloads
+ * Fairer bandwidth distribution across connected peers
+ * Use less CPU when calculating undownloaded portions of large torrents
+ * Use the Selection Algorithm, rather than sorting, to select peer candidates
+ * Use base-10 units when displaying bandwidth speed and disk space
+ * If the OS has its own copy of natpmp, prefer it over our bundled version
+ * Fix Fails-To-Build error on Solaris 10 from use of mkdtemp()
+ * Fix Fails-To-Build error on FreeBSD from use of alloca()
+ * Fix Fails-To-Build error when building without a C++ compiler for libuTP
+==== Mac ====
+ * Requires Mac OS X 10.6 Snow Leopard or newer
+ * Animated rows in the main window (Lion only)
+ * Quarantine downloaded files (to protect against malware)
+ * The inspector no longer floats above other windows (by popular demand)
+ * Mist notifications: basic notification support for users without Growl
+ * Support pasting a torrent file URL into the main window (Lion only)
+ * Minor interface tweaks and bug fixes
+==== GTK+ ====
+ * Fix regression that broke the "--minimized" command-line argument
+ * Instead of notify-send, use the org.freedesktop.Notifications DBus API
+ * Fix a handful of small memory leaks
+==== Qt ====
+ * Fix FTB when building without libuTP support on Debian
+==== Web Client ====
+ * Filtering by state and tracker
+ * Sorting by size
+ * Larger, easier-to-press toolbar buttons
+ * Fix the torrent size and time remaining in the inspector's details tab
+ * Bundle jQuery and the stylesheets to avoid third-party CDNs
+ * Upgrade to jQuery 1.7.1
+ * Fix runtime errors in IE 8, IE 9, and Opera
+ * Revise CSS stylesheets to use SASS
+ * Minor interface tweaks
+==== Daemon ====
+ * Fix corrupted status string in transmission-remote
+
+=== Transmission 2.42 (2011/10/19) ===
+[http://trac.transmissionbt.com/query?milestone=2.42&group=component&order=severity All tickets closed by this release]
+==== All Platforms ====
+ * Fix error connecting to UDP trackers from big-endian computers
+ * Fix RPC error when editing UDP trackers
+ * Fix build failure when a C++ compiler is not installed
+==== Mac ====
+ * Fix a potential crash on 10.5 Leopard
+ * Fix bugs with the tracker and file inspector tables
+==== GTK+ ====
+ * Support GTK+ 3.2
+ * Fix crasher on systems not running DBus
+==== Qt ====
+ * Updated Lithuanian translation
+==== Web Client ====
+ * Fix bug which broke Opera support
+
+=== Transmission 2.41 (2011/10/08) ===
+[http://trac.transmissionbt.com/query?milestone=2.41&group=component&order=severity All tickets closed by this release]
+==== Mac ====
+ * Fix crasher on 10.5 Leopard
+
+=== Transmission 2.40 (2011/10/08) ===
[http://trac.transmissionbt.com/query?milestone=2.40&group=component&order=severity All tickets closed by this release]
==== All Platforms ====
* Torrent queuing
View
130 Transmission.xcodeproj/project.pbxproj
@@ -105,10 +105,9 @@
A209ECA2114319C3002B02D1 /* InfoWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = A209ECA1114319C3002B02D1 /* InfoWindow.xib */; };
A209EE5C1144B51E002B02D1 /* history.c in Sources */ = {isa = PBXBuildFile; fileRef = A209EE5A1144B51E002B02D1 /* history.c */; };
A209EE5D1144B51E002B02D1 /* history.h in Headers */ = {isa = PBXBuildFile; fileRef = A209EE5B1144B51E002B02D1 /* history.h */; };
- A20B6F6B0C4D842B0034AB1D /* PriorityLow.png in Resources */ = {isa = PBXBuildFile; fileRef = A20B6F6A0C4D842B0034AB1D /* PriorityLow.png */; };
- A20B6F830C4D8A610034AB1D /* PriorityHigh.png in Resources */ = {isa = PBXBuildFile; fileRef = A20B6F820C4D8A610034AB1D /* PriorityHigh.png */; };
- A20B6FA50C4D97840034AB1D /* PriorityNone.png in Resources */ = {isa = PBXBuildFile; fileRef = A20B6FA40C4D97840034AB1D /* PriorityNone.png */; };
- A20B6FAE0C4D9B040034AB1D /* PriorityNormal.png in Resources */ = {isa = PBXBuildFile; fileRef = A20B6FAD0C4D9B040034AB1D /* PriorityNormal.png */; };
+ A20B6F6B0C4D842B0034AB1D /* PriorityLowTemplate.png in Resources */ = {isa = PBXBuildFile; fileRef = A20B6F6A0C4D842B0034AB1D /* PriorityLowTemplate.png */; };
+ A20B6F830C4D8A610034AB1D /* PriorityHighTemplate.png in Resources */ = {isa = PBXBuildFile; fileRef = A20B6F820C4D8A610034AB1D /* PriorityHighTemplate.png */; };
+ A20B6FAE0C4D9B040034AB1D /* PriorityNormalTemplate.png in Resources */ = {isa = PBXBuildFile; fileRef = A20B6FAD0C4D9B040034AB1D /* PriorityNormalTemplate.png */; };
A20BFFB70D091CC700CE5D2B /* ToolbarSegmentedCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A20BFFB60D091CC700CE5D2B /* ToolbarSegmentedCell.m */; };
A21282A80CA6C66800EAEE0F /* StatusBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = A21282A60CA6C66800EAEE0F /* StatusBarView.m */; };
A215BF5C0F02EBB800350CDB /* GroupRules.xib in Resources */ = {isa = PBXBuildFile; fileRef = A215BF5B0F02EBB800350CDB /* GroupRules.xib */; };
@@ -129,6 +128,14 @@
A222EA7B0E6C32C4009FB003 /* BlocklistScheduler.m in Sources */ = {isa = PBXBuildFile; fileRef = A222EA7A0E6C32C4009FB003 /* BlocklistScheduler.m */; };
A2265F420B5EF5F40093DDA5 /* FileNameCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A2265F400B5EF5F40093DDA5 /* FileNameCell.m */; };
A226FDAC0D0CDF20005A7F71 /* libnatpmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C7A118D0D0B2EB800B5701F /* libnatpmp.a */; };
+ A2290D1E14421CC100B95A09 /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A27653A714369C5C009D3CCF /* libcrypto.dylib */; };
+ A2290D2014421CD000B95A09 /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A27653A714369C5C009D3CCF /* libcrypto.dylib */; };
+ A2290D2214421CD800B95A09 /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A27653A714369C5C009D3CCF /* libcrypto.dylib */; };
+ A2290D2514421D1A00B95A09 /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A27653A714369C5C009D3CCF /* libcrypto.dylib */; };
+ A2290D2E1442B23200B95A09 /* libcurl.4.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A2290D2D1442B23200B95A09 /* libcurl.4.dylib */; };
+ A2290D2F1442B23200B95A09 /* libcurl.4.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A2290D2D1442B23200B95A09 /* libcurl.4.dylib */; };
+ A2290D301442B23200B95A09 /* libcurl.4.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A2290D2D1442B23200B95A09 /* libcurl.4.dylib */; };
+ A2290D311442B23200B95A09 /* libcurl.4.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A2290D2D1442B23200B95A09 /* libcurl.4.dylib */; };
A22A8D560AEEAFA5007E9CB9 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A22A8D540AEEAFA5007E9CB9 /* Localizable.strings */; };
A22B00B2116A9E9F003315FC /* connecthostport.h in Headers */ = {isa = PBXBuildFile; fileRef = A22B00AF116A9E90003315FC /* connecthostport.h */; };
A22B00B3116A9EA4003315FC /* connecthostport.c in Sources */ = {isa = PBXBuildFile; fileRef = A22B00AE116A9E90003315FC /* connecthostport.c */; };
@@ -147,6 +154,7 @@
A232F07E0EEA034A00041646 /* BonjourController.m in Sources */ = {isa = PBXBuildFile; fileRef = A232F07D0EEA034A00041646 /* BonjourController.m */; };
A233BD330D8C6585007EE7B4 /* MessageWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = A233BD320D8C6585007EE7B4 /* MessageWindow.xib */; };
A233BD690D8CF2C7007EE7B4 /* StatsWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = A233BD680D8CF2C7007EE7B4 /* StatsWindow.xib */; };
+ A234EA541453563B000F3E97 /* NSImageAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A234EA531453563B000F3E97 /* NSImageAdditions.m */; };
A23547E211CD0B090046EAE6 /* cache.c in Sources */ = {isa = PBXBuildFile; fileRef = A23547E011CD0B090046EAE6 /* cache.c */; };
A23547E311CD0B090046EAE6 /* cache.h in Headers */ = {isa = PBXBuildFile; fileRef = A23547E111CD0B090046EAE6 /* cache.h */; };
A2385DD40BFE06C800B24EF6 /* DragOverlayWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A2385DD20BFE06C800B24EF6 /* DragOverlayWindow.m */; };
@@ -209,7 +217,6 @@
A2710E770A86796000CE4F7D /* PrefsWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A2710E750A86796000CE4F7D /* PrefsWindow.m */; };
A2725B6E0DE5C4F5003445E7 /* FileListNode.m in Sources */ = {isa = PBXBuildFile; fileRef = A2725B6D0DE5C4F5003445E7 /* FileListNode.m */; };
A2725D5D0DE7507C003445E7 /* TrackerTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = A2725D5C0DE7507C003445E7 /* TrackerTableView.m */; };
- A27653A814369C5C009D3CCF /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A27653A714369C5C009D3CCF /* libcrypto.dylib */; };
A277DA0B0C693D9C00DA2CD4 /* ActionOn.png in Resources */ = {isa = PBXBuildFile; fileRef = A277DA090C693D9C00DA2CD4 /* ActionOn.png */; };
A27F0F330E19AD9800B2DB97 /* TorrentGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = A27F0F320E19AD9800B2DB97 /* TorrentGroup.m */; };
A284214412DA663E00FBDDBB /* tr-udp.c in Sources */ = {isa = PBXBuildFile; fileRef = A284214212DA663E00FBDDBB /* tr-udp.c */; };
@@ -253,7 +260,6 @@
A2AAB65F0DE0CF6200E04DDA /* rpcimpl.c in Sources */ = {isa = PBXBuildFile; fileRef = A2AAB65B0DE0CF6200E04DDA /* rpcimpl.c */; };
A2AAB6650DE0D08B00E04DDA /* blocklist.h in Headers */ = {isa = PBXBuildFile; fileRef = A2D307930D9EC4860051FD27 /* blocklist.h */; };
A2AF1C390A3D0F6200F1575D /* FileOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = A2AF1C370A3D0F6200F1575D /* FileOutlineView.m */; };
- A2B3D82D14375080000C3A83 /* libcurl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A2B3D82C1437507F000C3A83 /* libcurl.dylib */; };
A2B3FB460E5901E700FF78FB /* cli.c in Sources */ = {isa = PBXBuildFile; fileRef = A2B3FB450E5901E700FF78FB /* cli.c */; };
A2B3FB4C0E59023000FF78FB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
A2B3FB530E59027100FF78FB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
@@ -279,12 +285,6 @@
A2DF37070C220D03006523C1 /* CreatorWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = A2DF37050C220D03006523C1 /* CreatorWindowController.m */; };
A2DF58580DE4B2B0000795D5 /* JSON_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = A2DF576A0DE468C6000795D5 /* JSON_parser.c */; };
A2DF58590DE4B2B1000795D5 /* JSON_parser.h in Headers */ = {isa = PBXBuildFile; fileRef = A2DF576B0DE468C6000795D5 /* JSON_parser.h */; };
- A2E0E107143DD771002CCBFF /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A2E0E106143DD771002CCBFF /* libcrypto.dylib */; };
- A2E0E109143DD77F002CCBFF /* libcurl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A2E0E108143DD77F002CCBFF /* libcurl.dylib */; };
- A2E0E10F143DD7CC002CCBFF /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A2E0E10E143DD7CC002CCBFF /* libcrypto.dylib */; };
- A2E0E111143DD7D2002CCBFF /* libcurl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A2E0E110143DD7D2002CCBFF /* libcurl.dylib */; };
- A2E0E113143DD7EC002CCBFF /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A2E0E112143DD7EC002CCBFF /* libcrypto.dylib */; };
- A2E0E115143DD7F4002CCBFF /* libcurl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A2E0E114143DD7F4002CCBFF /* libcurl.dylib */; };
A2E23AC60CB5E1930002BB25 /* InfoTabButtonCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A2E23AC40CB5E1930002BB25 /* InfoTabButtonCell.m */; };
A2E2EA920EE321C200EB6308 /* Groups.png in Resources */ = {isa = PBXBuildFile; fileRef = A2E2EA910EE321C200EB6308 /* Groups.png */; };
A2E384DA130DFB3A001F501B /* templates.h in Headers */ = {isa = PBXBuildFile; fileRef = A2E384D2130DFB3A001F501B /* templates.h */; };
@@ -302,6 +302,7 @@
A2E669790F5B8E5A00B4251A /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A2E669780F5B8E5A00B4251A /* Security.framework */; };
A2E9AA760C249AF400085DCF /* ToolbarCreateTemplate.png in Resources */ = {isa = PBXBuildFile; fileRef = A2E9AA750C249AF400085DCF /* ToolbarCreateTemplate.png */; };
A2ED7D8F0CEF431B00970975 /* FilterButton.m in Sources */ = {isa = PBXBuildFile; fileRef = A2ED7D8E0CEF431B00970975 /* FilterButton.m */; };
+ A2EE726F14DCCC950093C99A /* natpmp_local.h in Headers */ = {isa = PBXBuildFile; fileRef = A2EE726E14DCCC950093C99A /* natpmp_local.h */; };
A2EF7DEC0C96297400FA9811 /* PurpleDot.png in Resources */ = {isa = PBXBuildFile; fileRef = A2EF7DEB0C96297400FA9811 /* PurpleDot.png */; };
A2F011990C27418800576FC0 /* CreateLarge.png in Resources */ = {isa = PBXBuildFile; fileRef = A2F011980C27418800576FC0 /* CreateLarge.png */; };
A2F151180CD438A4001F3B0E /* YellowDot.png in Resources */ = {isa = PBXBuildFile; fileRef = A2F151150CD438A4001F3B0E /* YellowDot.png */; };
@@ -353,7 +354,6 @@
BEFC1E3C0C07861A00B0BB3C /* platform.c in Sources */ = {isa = PBXBuildFile; fileRef = BEFC1E030C07861A00B0BB3C /* platform.c */; };
BEFC1E450C07861A00B0BB3C /* net.h in Headers */ = {isa = PBXBuildFile; fileRef = BEFC1E0C0C07861A00B0BB3C /* net.h */; };
BEFC1E460C07861A00B0BB3C /* net.c in Sources */ = {isa = PBXBuildFile; fileRef = BEFC1E0D0C07861A00B0BB3C /* net.c */; };
- BEFC1E470C07861A00B0BB3C /* natpmp.h in Headers */ = {isa = PBXBuildFile; fileRef = BEFC1E0E0C07861A00B0BB3C /* natpmp.h */; };
BEFC1E480C07861A00B0BB3C /* natpmp.c in Sources */ = {isa = PBXBuildFile; fileRef = BEFC1E0F0C07861A00B0BB3C /* natpmp.c */; };
BEFC1E490C07861A00B0BB3C /* metainfo.h in Headers */ = {isa = PBXBuildFile; fileRef = BEFC1E100C07861A00B0BB3C /* metainfo.h */; };
BEFC1E4A0C07861A00B0BB3C /* metainfo.c in Sources */ = {isa = PBXBuildFile; fileRef = BEFC1E110C07861A00B0BB3C /* metainfo.c */; };
@@ -580,10 +580,9 @@
A209ECA1114319C3002B02D1 /* InfoWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = InfoWindow.xib; path = macosx/InfoWindow.xib; sourceTree = "<group>"; };
A209EE5A1144B51E002B02D1 /* history.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = history.c; path = libtransmission/history.c; sourceTree = "<group>"; };
A209EE5B1144B51E002B02D1 /* history.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = history.h; path = libtransmission/history.h; sourceTree = "<group>"; };
- A20B6F6A0C4D842B0034AB1D /* PriorityLow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = PriorityLow.png; path = macosx/Images/PriorityLow.png; sourceTree = "<group>"; };
- A20B6F820C4D8A610034AB1D /* PriorityHigh.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = PriorityHigh.png; path = macosx/Images/PriorityHigh.png; sourceTree = "<group>"; };
- A20B6FA40C4D97840034AB1D /* PriorityNone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = PriorityNone.png; path = macosx/Images/PriorityNone.png; sourceTree = "<group>"; };
- A20B6FAD0C4D9B040034AB1D /* PriorityNormal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = PriorityNormal.png; path = macosx/Images/PriorityNormal.png; sourceTree = "<group>"; };
+ A20B6F6A0C4D842B0034AB1D /* PriorityLowTemplate.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = PriorityLowTemplate.png; path = macosx/Images/PriorityLowTemplate.png; sourceTree = "<group>"; };
+ A20B6F820C4D8A610034AB1D /* PriorityHighTemplate.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = PriorityHighTemplate.png; path = macosx/Images/PriorityHighTemplate.png; sourceTree = "<group>"; };
+ A20B6FAD0C4D9B040034AB1D /* PriorityNormalTemplate.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = PriorityNormalTemplate.png; path = macosx/Images/PriorityNormalTemplate.png; sourceTree = "<group>"; };
A20BFFB50D091CC700CE5D2B /* ToolbarSegmentedCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ToolbarSegmentedCell.h; path = macosx/ToolbarSegmentedCell.h; sourceTree = "<group>"; };
A20BFFB60D091CC700CE5D2B /* ToolbarSegmentedCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ToolbarSegmentedCell.m; path = macosx/ToolbarSegmentedCell.m; sourceTree = "<group>"; };
A21282A50CA6C66800EAEE0F /* StatusBarView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = StatusBarView.h; path = macosx/StatusBarView.h; sourceTree = "<group>"; };
@@ -635,6 +634,7 @@
A223AA830D220CEB00840069 /* nl */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = nl; path = macosx/nl.lproj/PrefsWindow.xib; sourceTree = "<group>"; };
A2265F3F0B5EF5F40093DDA5 /* FileNameCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = FileNameCell.h; path = macosx/FileNameCell.h; sourceTree = "<group>"; };
A2265F400B5EF5F40093DDA5 /* FileNameCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = FileNameCell.m; path = macosx/FileNameCell.m; sourceTree = "<group>"; };
+ A2290D2D1442B23200B95A09 /* libcurl.4.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcurl.4.dylib; path = "third-party/curl/lib/libcurl.4.dylib"; sourceTree = "<group>"; };
A22B00AE116A9E90003315FC /* connecthostport.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = connecthostport.c; path = "third-party/miniupnp/connecthostport.c"; sourceTree = "<group>"; };
A22B00AF116A9E90003315FC /* connecthostport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = connecthostport.h; path = "third-party/miniupnp/connecthostport.h"; sourceTree = "<group>"; };
A22BAE261388040500FB022F /* NSMutableArrayAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSMutableArrayAdditions.h; path = macosx/NSMutableArrayAdditions.h; sourceTree = "<group>"; };
@@ -658,6 +658,8 @@
A232F07D0EEA034A00041646 /* BonjourController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BonjourController.m; path = macosx/BonjourController.m; sourceTree = "<group>"; };
A233BD320D8C6585007EE7B4 /* MessageWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = MessageWindow.xib; path = macosx/MessageWindow.xib; sourceTree = "<group>"; };
A233BD680D8CF2C7007EE7B4 /* StatsWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = StatsWindow.xib; path = macosx/StatsWindow.xib; sourceTree = "<group>"; };
+ A234EA521453563B000F3E97 /* NSImageAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSImageAdditions.h; path = macosx/NSImageAdditions.h; sourceTree = "<group>"; };
+ A234EA531453563B000F3E97 /* NSImageAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSImageAdditions.m; path = macosx/NSImageAdditions.m; sourceTree = "<group>"; };
A23547E011CD0B090046EAE6 /* cache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cache.c; path = libtransmission/cache.c; sourceTree = "<group>"; };
A23547E111CD0B090046EAE6 /* cache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cache.h; path = libtransmission/cache.h; sourceTree = "<group>"; };
A2385DD20BFE06C800B24EF6 /* DragOverlayWindow.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = DragOverlayWindow.m; path = macosx/DragOverlayWindow.m; sourceTree = "<group>"; };
@@ -762,7 +764,6 @@
A2725D5C0DE7507C003445E7 /* TrackerTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TrackerTableView.m; path = macosx/TrackerTableView.m; sourceTree = "<group>"; };
A27476FF0CC38EE6003CC76D /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = macosx/es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
A27477010CC38EE6003CC76D /* es */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = es; path = macosx/es.lproj/Localizable.strings; sourceTree = "<group>"; };
- A27653A514369C12009D3CCF /* libcurl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcurl.dylib; path = usr/lib/libcurl.dylib; sourceTree = SDKROOT; };
A27653A714369C5C009D3CCF /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.dylib; path = usr/lib/libcrypto.dylib; sourceTree = SDKROOT; };
A2768AAE140DCB6A00F82413 /* pt */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = pt; path = macosx/pt.lproj/GlobalOptionsPopover.xib; sourceTree = "<group>"; };
A277DA090C693D9C00DA2CD4 /* ActionOn.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ActionOn.png; path = macosx/Images/ActionOn.png; sourceTree = "<group>"; };
@@ -847,7 +848,6 @@
A2AC81D60D987E2D00A2878C /* nl */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = nl; path = macosx/nl.lproj/AddWindow.xib; sourceTree = "<group>"; };
A2AF1C360A3D0F6200F1575D /* FileOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = FileOutlineView.h; path = macosx/FileOutlineView.h; sourceTree = "<group>"; };
A2AF1C370A3D0F6200F1575D /* FileOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = FileOutlineView.m; path = macosx/FileOutlineView.m; sourceTree = "<group>"; };
- A2B3D82C1437507F000C3A83 /* libcurl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcurl.dylib; path = usr/lib/libcurl.dylib; sourceTree = SDKROOT; };
A2B3FB450E5901E700FF78FB /* cli.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cli.c; path = cli/cli.c; sourceTree = "<group>"; };
A2B5BB7A0D9C7C2300FCB650 /* es */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = es; path = macosx/es.lproj/AddWindow.xib; sourceTree = "<group>"; };
A2B6141B1395ADE9000E0975 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
@@ -888,15 +888,6 @@
A2DF37050C220D03006523C1 /* CreatorWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CreatorWindowController.m; path = macosx/CreatorWindowController.m; sourceTree = "<group>"; };
A2DF576A0DE468C6000795D5 /* JSON_parser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = JSON_parser.c; path = libtransmission/JSON_parser.c; sourceTree = "<group>"; };
A2DF576B0DE468C6000795D5 /* JSON_parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JSON_parser.h; path = libtransmission/JSON_parser.h; sourceTree = "<group>"; };
- A2E0E104143DD70F002CCBFF /* libcurl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcurl.dylib; path = usr/lib/libcurl.dylib; sourceTree = SDKROOT; };
- A2E0E106143DD771002CCBFF /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.dylib; path = usr/lib/libcrypto.dylib; sourceTree = SDKROOT; };
- A2E0E108143DD77F002CCBFF /* libcurl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcurl.dylib; path = usr/lib/libcurl.dylib; sourceTree = SDKROOT; };
- A2E0E10A143DD7A4002CCBFF /* libcurl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcurl.dylib; path = usr/lib/libcurl.dylib; sourceTree = SDKROOT; };
- A2E0E10C143DD7AF002CCBFF /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.dylib; path = usr/lib/libcrypto.dylib; sourceTree = SDKROOT; };
- A2E0E10E143DD7CC002CCBFF /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.dylib; path = usr/lib/libcrypto.dylib; sourceTree = SDKROOT; };
- A2E0E110143DD7D2002CCBFF /* libcurl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcurl.dylib; path = usr/lib/libcurl.dylib; sourceTree = SDKROOT; };
- A2E0E112143DD7EC002CCBFF /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.dylib; path = usr/lib/libcrypto.dylib; sourceTree = SDKROOT; };
- A2E0E114143DD7F4002CCBFF /* libcurl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcurl.dylib; path = usr/lib/libcurl.dylib; sourceTree = SDKROOT; };
A2E23AC30CB5E1930002BB25 /* InfoTabButtonCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = InfoTabButtonCell.h; path = macosx/InfoTabButtonCell.h; sourceTree = "<group>"; };
A2E23AC40CB5E1930002BB25 /* InfoTabButtonCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = InfoTabButtonCell.m; path = macosx/InfoTabButtonCell.m; sourceTree = "<group>"; };
A2E2EA910EE321C200EB6308 /* Groups.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Groups.png; path = macosx/Images/Groups.png; sourceTree = "<group>"; };
@@ -922,6 +913,7 @@
A2EA8E3E0CC3C9830081201C /* fr */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = fr; path = macosx/fr.lproj/Localizable.strings; sourceTree = "<group>"; };
A2ED7D8D0CEF431B00970975 /* FilterButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FilterButton.h; path = macosx/FilterButton.h; sourceTree = "<group>"; };
A2ED7D8E0CEF431B00970975 /* FilterButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FilterButton.m; path = macosx/FilterButton.m; sourceTree = "<group>"; };
+ A2EE726E14DCCC950093C99A /* natpmp_local.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = natpmp_local.h; path = libtransmission/natpmp_local.h; sourceTree = "<group>"; };
A2EF7DEB0C96297400FA9811 /* PurpleDot.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = PurpleDot.png; path = macosx/Images/PurpleDot.png; sourceTree = "<group>"; };
A2F011980C27418800576FC0 /* CreateLarge.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = CreateLarge.png; path = macosx/Images/CreateLarge.png; sourceTree = "<group>"; };
A2F151150CD438A4001F3B0E /* YellowDot.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = YellowDot.png; path = macosx/Images/YellowDot.png; sourceTree = "<group>"; };
@@ -978,7 +970,6 @@
BEFC1E030C07861A00B0BB3C /* platform.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = platform.c; path = libtransmission/platform.c; sourceTree = "<group>"; };
BEFC1E0C0C07861A00B0BB3C /* net.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = net.h; path = libtransmission/net.h; sourceTree = "<group>"; };
BEFC1E0D0C07861A00B0BB3C /* net.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = net.c; path = libtransmission/net.c; sourceTree = "<group>"; };
- BEFC1E0E0C07861A00B0BB3C /* natpmp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = natpmp.h; path = libtransmission/natpmp.h; sourceTree = "<group>"; };
BEFC1E0F0C07861A00B0BB3C /* natpmp.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = natpmp.c; path = libtransmission/natpmp.c; sourceTree = "<group>"; };
BEFC1E100C07861A00B0BB3C /* metainfo.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = metainfo.h; path = libtransmission/metainfo.h; sourceTree = "<group>"; };
BEFC1E110C07861A00B0BB3C /* metainfo.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = metainfo.c; path = libtransmission/metainfo.c; sourceTree = "<group>"; };
@@ -1013,8 +1004,8 @@
files = (
4D9A2BF009E16D21002D0FF9 /* libtransmission.a in Frameworks */,
A296EF3C11E560BD004A2781 /* libiconv.dylib in Frameworks */,
- A2E0E107143DD771002CCBFF /* libcrypto.dylib in Frameworks */,
- A2E0E109143DD77F002CCBFF /* libcurl.dylib in Frameworks */,
+ A2290D1E14421CC100B95A09 /* libcrypto.dylib in Frameworks */,
+ A2290D2F1442B23200B95A09 /* libcurl.4.dylib in Frameworks */,
A2B6141E1395B0EC000E0975 /* libz.dylib in Frameworks */,
A2B3FB4C0E59023000FF78FB /* Cocoa.framework in Frameworks */,
);
@@ -1030,8 +1021,8 @@
A24F19080A3A790800C9C145 /* Sparkle.framework in Frameworks */,
A261F1DC0A69A1610002815A /* Growl.framework in Frameworks */,
A296EF3B11E560A7004A2781 /* libiconv.dylib in Frameworks */,
- A27653A814369C5C009D3CCF /* libcrypto.dylib in Frameworks */,
- A2B3D82D14375080000C3A83 /* libcurl.dylib in Frameworks */,
+ A2290D2514421D1A00B95A09 /* libcrypto.dylib in Frameworks */,
+ A2290D2E1442B23200B95A09 /* libcurl.4.dylib in Frameworks */,
A2B6141F1395B0F5000E0975 /* libz.dylib in Frameworks */,
A2E669790F5B8E5A00B4251A /* Security.framework in Frameworks */,
A22CFB820FB66EF30009BD3E /* Carbon.framework in Frameworks */,
@@ -1086,8 +1077,8 @@
files = (
BEFC1C050C07753500B0BB3C /* libtransmission.a in Frameworks */,
A296EF3D11E560C3004A2781 /* libiconv.dylib in Frameworks */,
- A2E0E10F143DD7CC002CCBFF /* libcrypto.dylib in Frameworks */,
- A2E0E111143DD7D2002CCBFF /* libcurl.dylib in Frameworks */,
+ A2290D2014421CD000B95A09 /* libcrypto.dylib in Frameworks */,
+ A2290D301442B23200B95A09 /* libcurl.4.dylib in Frameworks */,
A2B6141D1395B0E3000E0975 /* libz.dylib in Frameworks */,
A2B3FB530E59027100FF78FB /* Cocoa.framework in Frameworks */,
);
@@ -1099,8 +1090,8 @@
files = (
BEFC1D2D0C0783D900B0BB3C /* libtransmission.a in Frameworks */,
A296EF3E11E560D1004A2781 /* libiconv.dylib in Frameworks */,
- A2E0E113143DD7EC002CCBFF /* libcrypto.dylib in Frameworks */,
- A2E0E115143DD7F4002CCBFF /* libcurl.dylib in Frameworks */,
+ A2290D2214421CD800B95A09 /* libcrypto.dylib in Frameworks */,
+ A2290D311442B23200B95A09 /* libcurl.4.dylib in Frameworks */,
A2B6141C1395ADE9000E0975 /* libz.dylib in Frameworks */,
A25E03D90E4015100086C225 /* Cocoa.framework in Frameworks */,
);
@@ -1214,16 +1205,6 @@
29B97314FDCFA39411CA2CEA /* Transmission */ = {
isa = PBXGroup;
children = (
- A2E0E114143DD7F4002CCBFF /* libcurl.dylib */,
- A2E0E112143DD7EC002CCBFF /* libcrypto.dylib */,
- A2E0E110143DD7D2002CCBFF /* libcurl.dylib */,
- A2E0E10E143DD7CC002CCBFF /* libcrypto.dylib */,
- A2E0E10C143DD7AF002CCBFF /* libcrypto.dylib */,
- A2E0E10A143DD7A4002CCBFF /* libcurl.dylib */,
- A2E0E108143DD77F002CCBFF /* libcurl.dylib */,
- A2E0E106143DD771002CCBFF /* libcrypto.dylib */,
- A2E0E104143DD70F002CCBFF /* libcurl.dylib */,
- A2B3D82C1437507F000C3A83 /* libcurl.dylib */,
4DDBB70A09E16B3200284745 /* GUI */,
4D1838DC09DEC04A0047D688 /* libtransmission */,
4DDBB71F09E16BFE00284745 /* CLI */,
@@ -1272,10 +1253,9 @@
A209EBD81142F52B002B02D1 /* InfoFileView.xib */,
A209EC11114301C6002B02D1 /* InfoOptionsView.xib */,
A220AF7913D7CC460035C512 /* GlobalOptionsPopover.xib */,
- A20B6FA40C4D97840034AB1D /* PriorityNone.png */,
- A20B6FAD0C4D9B040034AB1D /* PriorityNormal.png */,
- A20B6F6A0C4D842B0034AB1D /* PriorityLow.png */,
- A20B6F820C4D8A610034AB1D /* PriorityHigh.png */,
+ A20B6FAD0C4D9B040034AB1D /* PriorityNormalTemplate.png */,
+ A20B6F6A0C4D842B0034AB1D /* PriorityLowTemplate.png */,
+ A20B6F820C4D8A610034AB1D /* PriorityHighTemplate.png */,
A2623B2C0D3DC2EF0045D19A /* PriorityControlNormal.png */,
A2623B2D0D3DC2EF0045D19A /* PriorityControlLow.png */,
A2623B2E0D3DC2EF0045D19A /* PriorityControlHigh.png */,
@@ -1442,7 +1422,7 @@
BEFC1E030C07861A00B0BB3C /* platform.c */,
BEFC1E0C0C07861A00B0BB3C /* net.h */,
BEFC1E0D0C07861A00B0BB3C /* net.c */,
- BEFC1E0E0C07861A00B0BB3C /* natpmp.h */,
+ A2EE726E14DCCC950093C99A /* natpmp_local.h */,
BEFC1E0F0C07861A00B0BB3C /* natpmp.c */,
BEFC1E100C07861A00B0BB3C /* metainfo.h */,
BEFC1E110C07861A00B0BB3C /* metainfo.c */,
@@ -1491,7 +1471,7 @@
isa = PBXGroup;
children = (
A27653A714369C5C009D3CCF /* libcrypto.dylib */,
- A27653A514369C12009D3CCF /* libcurl.dylib */,
+ A2290D2D1442B23200B95A09 /* libcurl.4.dylib */,
A296EF3411E5605E004A2781 /* libiconv.dylib */,
A2B6141B1395ADE9000E0975 /* libz.dylib */,
);
@@ -1524,6 +1504,8 @@
A29D84031049C25600D1987A /* NSApplicationAdditions.m */,
A22BAE261388040500FB022F /* NSMutableArrayAdditions.h */,
A22BAE271388040500FB022F /* NSMutableArrayAdditions.m */,
+ A234EA521453563B000F3E97 /* NSImageAdditions.h */,
+ A234EA531453563B000F3E97 /* NSImageAdditions.m */,
);
name = Additions;
sourceTree = "<group>";
@@ -1734,7 +1716,6 @@
BEFC1E350C07861A00B0BB3C /* port-forwarding.h in Headers */,
BEFC1E3B0C07861A00B0BB3C /* platform.h in Headers */,
BEFC1E450C07861A00B0BB3C /* net.h in Headers */,
- BEFC1E470C07861A00B0BB3C /* natpmp.h in Headers */,
BEFC1E490C07861A00B0BB3C /* metainfo.h in Headers */,
BEFC1E4D0C07861A00B0BB3C /* session.h in Headers */,
BEFC1E4E0C07861A00B0BB3C /* inout.h in Headers */,
@@ -1774,6 +1755,7 @@
A284214512DA663E00FBDDBB /* tr-udp.h in Headers */,
A2679295130E00A000CB7464 /* tr-utp.h in Headers */,
A23F29A1132A447400E9A83B /* announcer-common.h in Headers */,
+ A2EE726F14DCCC950093C99A /* natpmp_local.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2019,7 +2001,7 @@
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
- LastUpgradeCheck = 0410;
+ LastUpgradeCheck = 0420;
ORGANIZATIONNAME = "The Transmission Project";
};
buildConfigurationList = 4DF0C59A089918A300DD8943 /* Build configuration list for PBXProject "Transmission" */;
@@ -2104,10 +2086,9 @@
A241528B0C0261B8007DD3B4 /* Globe.png in Resources */,
A2E9AA760C249AF400085DCF /* ToolbarCreateTemplate.png in Resources */,
A2F011990C27418800576FC0 /* CreateLarge.png in Resources */,
- A20B6F6B0C4D842B0034AB1D /* PriorityLow.png in Resources */,
- A20B6F830C4D8A610034AB1D /* PriorityHigh.png in Resources */,
- A20B6FA50C4D97840034AB1D /* PriorityNone.png in Resources */,
- A20B6FAE0C4D9B040034AB1D /* PriorityNormal.png in Resources */,
+ A20B6F6B0C4D842B0034AB1D /* PriorityLowTemplate.png in Resources */,
+ A20B6F830C4D8A610034AB1D /* PriorityHighTemplate.png in Resources */,
+ A20B6FAE0C4D9B040034AB1D /* PriorityNormalTemplate.png in Resources */,
A277DA0B0C693D9C00DA2CD4 /* ActionOn.png in Resources */,
A2EF7DEC0C96297400FA9811 /* PurpleDot.png in Resources */,
A2BC19850CA9AF5A00DD302A /* CompleteCheck.png in Resources */,
@@ -2365,6 +2346,7 @@
A2E57BA713109E6B00A7DAB1 /* FilterBarController.m in Sources */,
A22BAE281388040500FB022F /* NSMutableArrayAdditions.m in Sources */,
A2966E8713DAF74C007B52DF /* GlobalOptionsPopoverViewController.m in Sources */,
+ A234EA541453563B000F3E97 /* NSImageAdditions.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2751,7 +2733,10 @@
FRAMEWORK_SEARCH_PATHS = macosx;
GCC_PREFIX_HEADER = macosx/Transmission_Prefix.pch;
INFOPLIST_FILE = macosx/Info.plist;
- LIBRARY_SEARCH_PATHS = "$(inherited)";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/third-party/curl/lib\"",
+ );
MACOSX_DEPLOYMENT_TARGET = 10.6;
OTHER_CFLAGS = (
"$(inherited)",
@@ -2766,7 +2751,7 @@
isa = XCBuildConfiguration;
buildSettings = {
HEADER_SEARCH_PATHS = (
- "$(inherited)",
+ "third-party/curl/include",
.,
);
PRODUCT_NAME = transmissioncli;
@@ -2808,7 +2793,6 @@
COPY_PHASE_STRIP = NO;
DEAD_CODE_STRIPPING = NO;
DEBUG_INFORMATION_FORMAT = stabs;
- GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = YES;
GCC_ENABLE_PASCAL_STRINGS = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
@@ -2820,6 +2804,7 @@
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = "third-party/curl/include";
IBC_FLATTEN_NIBS = YES;
IBC_NOTICES = NO;
IBC_WARNINGS = YES;
@@ -2827,6 +2812,7 @@
INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-CC";
INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/libtransmission/version.h";
INFOPLIST_PREPROCESS = YES;
+ LIBRARY_SEARCH_PATHS = "third-party/curl/lib";
MACOSX_DEPLOYMENT_TARGET = 10.6;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx10.7;
@@ -2892,7 +2878,7 @@
isa = XCBuildConfiguration;
buildSettings = {
HEADER_SEARCH_PATHS = (
- "$(inherited)",
+ "third-party/curl/include",
.,
);
PRODUCT_NAME = transmissioncli;
@@ -2905,7 +2891,10 @@
FRAMEWORK_SEARCH_PATHS = macosx;
GCC_PREFIX_HEADER = macosx/Transmission_Prefix.pch;
INFOPLIST_FILE = macosx/Info.plist;
- LIBRARY_SEARCH_PATHS = "$(inherited)";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/third-party/curl/lib\"",
+ );
MACOSX_DEPLOYMENT_TARGET = 10.6;
OTHER_CFLAGS = (
"$(inherited)",
@@ -2923,7 +2912,6 @@
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = stabs;
DEPLOYMENT_POSTPROCESSING = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = YES;
GCC_ENABLE_PASCAL_STRINGS = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
@@ -2937,6 +2925,7 @@
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = "third-party/curl/include";
IBC_FLATTEN_NIBS = YES;
IBC_NOTICES = NO;
IBC_WARNINGS = YES;
@@ -2944,6 +2933,7 @@
INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-CC";
INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/libtransmission/version.h";
INFOPLIST_PREPROCESS = YES;
+ LIBRARY_SEARCH_PATHS = "third-party/curl/lib";
MACOSX_DEPLOYMENT_TARGET = 10.6;
OTHER_CFLAGS = "-DNDEBUG";
SDKROOT = macosx10.7;
@@ -2979,7 +2969,6 @@
DEAD_CODE_STRIPPING = NO;
DEBUG_INFORMATION_FORMAT = stabs;
DEPLOYMENT_POSTPROCESSING = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = YES;
GCC_ENABLE_PASCAL_STRINGS = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
@@ -2990,6 +2979,7 @@
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = "third-party/curl/include";
IBC_FLATTEN_NIBS = YES;
IBC_NOTICES = NO;
IBC_WARNINGS = YES;
@@ -2997,6 +2987,7 @@
INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-CC";
INFOPLIST_PREFIX_HEADER = "$(SRCROOT)/libtransmission/version.h";
INFOPLIST_PREPROCESS = YES;
+ LIBRARY_SEARCH_PATHS = "third-party/curl/lib";
MACOSX_DEPLOYMENT_TARGET = 10.6;
SDKROOT = macosx10.7;
STRIP_INSTALLED_PRODUCT = NO;
@@ -3009,7 +3000,10 @@
FRAMEWORK_SEARCH_PATHS = macosx;
GCC_PREFIX_HEADER = macosx/Transmission_Prefix.pch;
INFOPLIST_FILE = macosx/Info.plist;
- LIBRARY_SEARCH_PATHS = "$(inherited)";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/third-party/curl/lib\"",
+ );
MACOSX_DEPLOYMENT_TARGET = 10.6;
OTHER_CFLAGS = (
"$(inherited)",
@@ -3024,7 +3018,7 @@
isa = XCBuildConfiguration;
buildSettings = {
HEADER_SEARCH_PATHS = (
- "$(inherited)",
+ "third-party/curl/include",
.,
);
PRODUCT_NAME = transmissioncli;
View
4 cli/Makefile.am
@@ -18,8 +18,8 @@ transmission_cli_SOURCES = cli.c
transmission_cli_LDADD = \
$(top_builddir)/libtransmission/libtransmission.a \
- $(top_builddir)/third-party/libnatpmp/libnatpmp.a \
- $(top_builddir)/third-party/miniupnp/libminiupnp.a \
+ @LIBNATPMP_LIBS@ \
+ @LIBUPNP_LIBS@ \
@DHT_LIBS@ \
@LIBUTP_LIBS@ \
@LIBEVENT_LIBS@ \
View
38 cli/cli.c
@@ -44,19 +44,19 @@
#define MEM_G_STR "GiB"
#define MEM_T_STR "TiB"
-#define DISK_K 1024
+#define DISK_K 1000
#define DISK_B_STR "B"
-#define DISK_K_STR "KiB"
-#define DISK_M_STR "MiB"
-#define DISK_G_STR "GiB"
-#define DISK_T_STR "TiB"
-
-#define SPEED_K 1024
-#define SPEED_B_STR "B/s"
-#define SPEED_K_STR "KiB/s"
-#define SPEED_M_STR "MiB/s"
-#define SPEED_G_STR "GiB/s"
-#define SPEED_T_STR "TiB/s"
+#define DISK_K_STR "kB"
+#define DISK_M_STR "MB"
+#define DISK_G_STR "GB"
+#define DISK_T_STR "TB"
+
+#define SPEED_K 1000
+#define SPEED_B_STR "B/s"
+#define SPEED_K_STR "kB/s"
+#define SPEED_M_STR "MB/s"
+#define SPEED_G_STR "GB/s"
+#define SPEED_T_STR "TB/s"
/***
****
@@ -226,6 +226,8 @@ main( int argc, char ** argv )
const char * configDir;
uint8_t * fileContents;
size_t fileLength;
+ const char * str;
+ char buf[TR_PATH_MAX];
tr_formatter_mem_init( MEM_K, MEM_K_STR, MEM_M_STR, MEM_G_STR, MEM_T_STR );
tr_formatter_size_init( DISK_K,DISK_K_STR, DISK_M_STR, DISK_G_STR, DISK_T_STR );
@@ -257,6 +259,16 @@ main( int argc, char ** argv )
return EXIT_FAILURE;
}
+ if( tr_bencDictFindStr( &settings, TR_PREFS_KEY_DOWNLOAD_DIR, &str ) ) {
+ str = tr_realpath( str, buf );
+ if( str != NULL ) {
+ tr_bencDictAddStr( &settings, TR_PREFS_KEY_DOWNLOAD_DIR, str );
+ } else {
+ fprintf( stderr, "Download directory does not exist!\n" );
+ return EXIT_FAILURE;
+ }
+ }
+
h = tr_sessionInit( "cli", configDir, false, &settings );
ctor = tr_ctorNew( h );
@@ -334,7 +346,7 @@ main( int argc, char ** argv )
}
st = tr_torrentStat( tor );
- if( st->activity & TR_STATUS_STOPPED )
+ if( st->activity == TR_STATUS_STOPPED )
break;
getStatusStr( st, line, sizeof( line ) );
View
322 configure.ac
@@ -3,8 +3,8 @@ dnl STATUS: "X" for prerelease beta builds,
dnl "Z" for unsupported trunk builds,
dnl "0" for stable, supported releases
dnl these should be the only two lines you need to change
-m4_define([user_agent_prefix],[2.40+])
-m4_define([peer_id_prefix],[-WH240Z-])
+m4_define([user_agent_prefix],[2.50+])
+m4_define([peer_id_prefix],[-WH250Z-])
AC_INIT([transmission],
[user_agent_prefix],
@@ -50,8 +50,11 @@ AC_SUBST(OPENSSL_MINIMUM)
## MANDATORY for the GTK+ client
##
##
-GTK_MINIMUM=2.22.0
-AC_SUBST(GTK_MINIMUM)
+
+GTK2_MINIMUM=2.22.0
+AC_SUBST(GTK2_MINIMUM)
+GTK3_MINIMUM=3.2.0
+AC_SUBST(GTK3_MINIMUM)
GLIB_MINIMUM=2.28.0
AC_SUBST(GLIB_MINIMUM)
GIO_MINIMUM=2.26.0
@@ -70,6 +73,7 @@ AC_SUBST(LIBAPPINDICATOR_MINIMUM)
AC_PROG_CC
AC_PROG_CXX
+AC_CHECK_PROG([HAVE_CXX],[$CXX],[yes],[no])
AC_C_INLINE
if test "x$GCC" = "xyes" ; then
@@ -97,7 +101,7 @@ AC_HEADER_STDC
AC_HEADER_TIME
AC_CHECK_HEADERS([stdbool.h])
-AC_CHECK_FUNCS([iconv_open pread pwrite lrintf strlcpy daemon dirname basename strcasecmp localtime_r fallocate64 posix_fallocate memmem strsep strtold syslog valloc getpagesize posix_memalign statvfs htonll ntohll])
+AC_CHECK_FUNCS([iconv_open pread pwrite lrintf strlcpy daemon dirname basename strcasecmp localtime_r fallocate64 posix_fallocate memmem strsep strtold syslog valloc getpagesize posix_memalign statvfs htonll ntohll mkdtemp])
AC_PROG_INSTALL
AC_PROG_MAKE_SET
ACX_PTHREAD
@@ -133,35 +137,35 @@ dnl ----------------------------------------------------------------------------
dnl
dnl file monitoring for the daemon
-AC_CHECK_HEADER([sys/inotify.h],
- [AC_CHECK_FUNC([inotify_init],[have_inotify="yes"],[have_inotify="no"])],
- [have_inotify="no"])
-AC_ARG_WITH([inotify],
- [AS_HELP_STRING([--with-inotify],[Enable inotify support (default=auto)])],
- [want_inotify=${withval}],
- [want_inotify=${have_inotify}])
-if test "x$want_inotify" = "xyes" ; then
- if test "x$have_inotify" = "xyes"; then
- AC_DEFINE([WITH_INOTIFY],[1])
- else
- AC_MSG_ERROR("inotify not found!")
- fi
-fi
-
-AC_CHECK_HEADER([sys/event.h],
- [AC_CHECK_FUNC([kqueue],[have_kqueue="yes"],[have_kqueue="no"])],
- [have_kqueue="no"])
-AC_ARG_WITH([kqueue],
- [AS_HELP_STRING([--with-kqueue],[Enable kqueue support (default=auto)])],
- [want_kqueue=${withval}],
- [want_kqueue=${have_kqueue}])
-if test "x$want_kqueue" = "xyes" ; then
- if test "x$have_kqueue" = "xyes"; then
- AC_DEFINE([WITH_KQUEUE],[1])
- else
- AC_MSG_ERROR("kqueue not found!")
- fi
-fi
+AC_CHECK_HEADER([sys/inotify.h],
+ [AC_CHECK_FUNC([inotify_init],[have_inotify="yes"],[have_inotify="no"])],
+ [have_inotify="no"])
+AC_ARG_WITH([inotify],
+ [AS_HELP_STRING([--with-inotify],[Enable inotify support (default=auto)])],
+ [want_inotify=${withval}],
+ [want_inotify=${have_inotify}])
+if test "x$want_inotify" = "xyes" ; then
+ if test "x$have_inotify" = "xyes"; then
+ AC_DEFINE([WITH_INOTIFY],[1])
+ else
+ AC_MSG_ERROR("inotify not found!")
+ fi
+fi
+
+AC_CHECK_HEADER([sys/event.h],
+ [AC_CHECK_FUNC([kqueue],[have_kqueue="yes"],[have_kqueue="no"])],
+ [have_kqueue="no"])
+AC_ARG_WITH([kqueue],
+ [AS_HELP_STRING([--with-kqueue],[Enable kqueue support (default=auto)])],
+ [want_kqueue=${withval}],
+ [want_kqueue=${have_kqueue}])
+if test "x$want_kqueue" = "xyes" ; then
+ if test "x$have_kqueue" = "xyes"; then
+ AC_DEFINE([WITH_KQUEUE],[1])
+ else
+ AC_MSG_ERROR("kqueue not found!")
+ fi
+fi
AC_CHECK_HEADERS([sys/statvfs.h \
xfs/xfs.h])
@@ -205,89 +209,202 @@ AC_CHECK_LIB([rt],
AC_MSG_CHECKING([µTP])
build_utp="no"
-if test "x$CXX" = "x" ; then
- have_utp="no"
-else
+if test "x$HAVE_CXX" = "xyes" ; then
have_utp="yes"
+else
+ have_utp="no"
fi
AC_ARG_ENABLE([utp],
AS_HELP_STRING([--enable-utp],[build µTP support]),
[want_utp=${enableval}],
[want_utp=${have_utp}])
if test "x$want_utp" = "xyes" ; then
- if test "x$have_utp" = "xyes"; then
+ if test "x$have_utp" = "xyes"; then
LIBUTP_CFLAGS="-I\$(top_srcdir)/third-party/"
LIBUTP_LIBS="\$(top_builddir)/third-party/libutp/libutp.a"
- if test "x$libutp_extra_libs" != "x" ; then
- LIBUTP_LIBS="$LIBUTP_LIBS $libutp_extra_libs"
- fi
+ LIBUTP_LIBS_QT="\$\${TRANSMISSION_TOP}/third-party/libutp/libutp.a"
+ if test "x$libutp_extra_libs" != "x" ; then
+ LIBUTP_LIBS="$LIBUTP_LIBS $libutp_extra_libs"
+ LIBUTP_LIBS_QT="$LIBUTP_LIBS_QT $libutp_extra_libs"
+ fi
AC_DEFINE([WITH_UTP],[1])
build_utp="yes"
- else
- AC_MSG_ERROR("Unable to build uTP support -- C++ compiler not found")
- fi
-fi
+ else
+ AC_MSG_ERROR("Unable to build uTP support -- C++ compiler not found")
+ fi
+fi
AC_SUBST(LIBUTP_CFLAGS)
AC_SUBST(LIBUTP_LIBS)
+AC_SUBST(LIBUTP_LIBS_QT)
AM_CONDITIONAL([BUILD_UTP],[test "x$build_utp" = "xyes"])
AC_MSG_RESULT([$build_utp])
+dnl
+dnl look for preinstalled miniupnpc...
+dnl
+
+AC_MSG_CHECKING([supported miniupnp library])
+upnp_version="none"
+ac_save_LIBS="$LIBS"
+LIBS="-lminiupnpc"
+# See if the OS has its miniupnp 1.5 installed
+AC_TRY_LINK([
+ #include <stdlib.h>
+ #include <miniupnpc/miniupnpc.h>
+ #include <miniupnpc/upnpcommands.h>
+],[
+ struct UPNPDev * devlist;
+ struct UPNPUrls urls;
+ struct IGDdatas data;
+ char lanaddr[16];
+ char portStr[8];
+ char intPort[8];
+ char intClient[16];
+ upnpDiscover( 2000, NULL, NULL, 0 );
+ UPNP_GetValidIGD( devlist, &urls, &data, lanaddr, sizeof( lanaddr ) );
+ UPNP_GetSpecificPortMappingEntry( urls.controlURL, data.first.servicetype,
+ portStr, "TCP", intClient, intPort );
+],[
+AC_DEFINE(HAVE_MINIUPNP_15, 1, [Define to 1 if you have miniupnpc version 1.5])
+upnp_version="1.5"])
+
+# See if the OS has its miniupnp 1.6 installed
+AC_TRY_LINK([
+ #include <stdlib.h>
+ #include <errno.h>
+ #include <miniupnpc/miniupnpc.h>
+ #include <miniupnpc/upnpcommands.h>
+],[
+ struct UPNPDev * devlist;
+ struct UPNPUrls urls;
+ struct IGDdatas data;
+ char lanaddr[16];
+ char portStr[8];
+ char intPort[8];
+ char intClient[16];
+ upnpDiscover( 2000, NULL, NULL, 0, 0, &errno );
+ UPNP_GetValidIGD( devlist, &urls, &data, lanaddr, sizeof( lanaddr ) );
+ UPNP_GetSpecificPortMappingEntry( urls.controlURL, data.first.servicetype,
+ portStr, "TCP", intClient, intPort, NULL, NULL, NULL );
+],[
+AC_DEFINE(HAVE_MINIUPNP_16, 1, [Define to 1 if you have miniupnpc version 1.6])
+upnp_version="1.6"])
+
+# ... and the results of our tests
+LIBS="$ac_save_LIBS"
+AC_MSG_RESULT([$upnp_version])
+AM_CONDITIONAL([BUILD_MINIUPNP],[test "x$upnp_version" = "xnone"])
+if test "x$upnp_version" = "xnone" ; then
+ LIBUPNP_CFLAGS="-I\$(top_srcdir)/third-party/"
+ LIBUPNP_LIBS="\$(top_builddir)/third-party/miniupnp/libminiupnp.a"
+ LIBUPNP_LIBS_QT="\$\${TRANSMISSION_TOP}/third-party/miniupnp/libminiupnp.a"
+ dnl because this is the version that we bundle...
+ AC_DEFINE(HAVE_MINIUPNP_16, 1, [Define to 1 if you have miniupnpc version 1.6])
+else
+ AC_DEFINE([SYSTEM_MINIUPNP])
+ LIBUPNP_CFLAGS=""
+ LIBUPNP_LIBS="-lminiupnpc"
+ LIBUPNP_LIBS_QT="-lminiupnpc"
+fi
+AC_SUBST(LIBUPNP_CFLAGS)
+AC_SUBST(LIBUPNP_LIBS)
+AC_SUBST(LIBUPNP_LIBS_QT)
+
+
+
+
+dnl ----------------------------------------------------------------------------
+dnl
+dnl Allow usage of system natpmp library
+
+LIBNATPMP_CFLAGS="-I\$(top_srcdir)/third-party/libnatpmp/"
+LIBNATPMP_LIBS="\$(top_builddir)/third-party/libnatpmp/libnatpmp.a"
+LIBNATPMP_LIBS_QT="\$\${TRANSMISSION_TOP}/third-party/libnatpmp/libnatpmp.a"
+build_bundled_natpmp="yes"
+AC_ARG_ENABLE([external-natpmp],
+ AS_HELP_STRING([--enable-external-natpmp],[Use system external-natpmp]),
+ [want_external_natpmp=${enableval}],
+ [want_external_natpmp=no])
+if test "x$want_external_natpmp" != "xno" ; then
+ dnl Would be lovely if it had pkgconfig
+ LIBNATPMP_CFLAGS=""
+ LIBNATPMP_LIBS="-lnatpmp"
+ LIBNATPMP_LIBS_QT="-lnatpmp"
+ build_bundled_natpmp="no"
+fi
+AM_CONDITIONAL([BUILD_NATPMP],[test "x$build_bundled_natpmp" = "xyes"])
+AC_SUBST(LIBNATPMP_CFLAGS)
+AC_SUBST(LIBNATPMP_LIBS)
+AC_SUBST(LIBNATPMP_LIBS_QT)
+
+
dnl ----------------------------------------------------------------------------
dnl
dnl detection for the GTK+ client
-PKG_CHECK_MODULES(GTK,
- [gtk+-2.0 >= $GTK_MINIMUM
- glib-2.0 >= $GLIB_MINIMUM
- gio-2.0 >= $GIO_MINIMUM,
- gmodule-2.0 >= $GLIB_MINIMUM
- gthread-2.0 >= $GLIB_MINIMUM],
- [have_gtk=yes],
- [have_gtk=no])
-AC_ARG_ENABLE([gtk],
- AS_HELP_STRING([--enable-gtk],[build gtk client]),
- [want_gtk=${enableval}],
- [want_gtk=${have_gtk}])
-build_gtk=no
+
+gtk_version="none"
+with_gtk_default="no"
+PKG_CHECK_EXISTS([gtk+-2.0 >= $GTK2_MINIMUM],[gtk_version="2" with_gtk_default="yes"])
+PKG_CHECK_EXISTS([gtk+-3.0 >= $GTK3_MINIMUM],[gtk_version="3" with_gtk_default="yes"])
+AC_ARG_WITH([gtk], AC_HELP_STRING([--with-gtk],[with Gtk]),
+ [with_gtk=$withval],
+ [with_gtk=$with_gtk_default])
+if test "x$with_gtk" = "x2" ; then
+ PKG_CHECK_EXISTS([gtk+-2.0 >= $GTK2_MINIMUM],[gtk_version="2" with_gtk="yes"],[gtk_version="none" with_gtk="no"])
+fi
+if test "x$with_gtk" = "x3" ; then
+ PKG_CHECK_EXISTS([gtk+-3.0 >= $GTK3_MINIMUM],[gtk_version="3" with_gtk="yes"],[gtk_version="none" with_gtk="no"])
+fi
+AC_ARG_ENABLE([nls],
+ [AS_HELP_STRING([--enable-nls],[enable native language support])],,
+ [enable_nls=yes])
+AM_CONDITIONAL([BUILD_GTK],[test "x$with_gtk" = "xyes"])
use_libappindicator=no
-if test "x$want_gtk" = "xyes" ; then
- if test "x$have_gtk" = "xyes"; then
- build_gtk=yes
- else
- AC_MSG_ERROR("GTK+ not found!")
+if test "x$with_gtk" = "xyes" ; then
+
+ if test "x$gtk_version" = "xnone" ; then
+ AC_MSG_ERROR("GTK+ not found!")
+ fi
+ if test "x$enable_nls" = "xno" ; then
+ AC_MSG_ERROR("The gtk client cannot be built without nls support. Try adding either --enable-nls or --without-gtk" )
fi
-fi
-AM_CONDITIONAL([BUILD_GTK],[test "x$build_gtk" = "xyes"])
-if test "x$build_gtk" = "xyes"; then
+ if test "x$gtk_version" = "x3"; then
+
+ PKG_CHECK_MODULES([GTK], [gtk+-3.0 >= $GTK3_MINIMUM
+ glib-2.0 >= $GLIB_MINIMUM
+ gio-2.0 >= $GIO_MINIMUM,
+ gmodule-2.0 >= $GLIB_MINIMUM
+ gthread-2.0 >= $GLIB_MINIMUM])
+ PKG_CHECK_MODULES([LIBAPPINDICATOR],
+ [appindicator3-0.1 >= $LIBAPPINDICATOR_MINIMUM],
+ [have_libappindicator=yes],
+ [have_libappindicator=no])
+ AC_MSG_NOTICE([using GTK+ 3])
+ else
- PKG_CHECK_MODULES([LIBAPPINDICATOR],
- [appindicator-0.1 >= $LIBAPPINDICATOR_MINIMUM],
- [have_libappindicator=yes],
- [have_libappindicator=no])
+ PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= $GTK2_MINIMUM
+ glib-2.0 >= $GLIB_MINIMUM
+ gio-2.0 >= $GIO_MINIMUM,
+ gmodule-2.0 >= $GLIB_MINIMUM
+ gthread-2.0 >= $GLIB_MINIMUM])
+ PKG_CHECK_MODULES([LIBAPPINDICATOR],
+ [appindicator-0.1 >= $LIBAPPINDICATOR_MINIMUM],
+ [have_libappindicator=yes],
+ [have_libappindicator=no])
+ AC_MSG_NOTICE([using GTK+ 2])
- AC_ARG_ENABLE([libappindicator],
- AS_HELP_STRING([--enable-libappindicator],[enable AppIndicator support]),,
- [enable_libappindicator=yes])
- use_libappindicator=no
- if test "x$have_libappindicator" = "xyes"; then
- if test "x$enable_libappindicator" = "xyes" ; then
- use_libappindicator=yes
- AC_DEFINE([HAVE_LIBAPPINDICATOR], 1)
- else
- LIBAPPINDICATOR_CFLAGS=
- LIBAPPINDICATOR_LIBS=
- fi
fi
-fi
-
-AC_ARG_ENABLE([nls],
- AS_HELP_STRING([--enable-nls],[enable native language support]),,
- [enable_nls=yes])
-if test "x$build_gtk" = "xyes" -a "x$enable_nls" = "xno" ; then
- AC_MSG_ERROR("The gtk client cannot be built without nls support. Try adding either --enable-nls or --disable-gtk" )
+ if test "x$have_libappindicator" = "xyes"; then
+ use_libappindicator=yes
+ AC_DEFINE([HAVE_LIBAPPINDICATOR], 1)
+ else
+ LIBAPPINDICATOR_CFLAGS=
+ LIBAPPINDICATOR_LIBS=
+ fi
fi
dnl This section is only used for internationalization.
@@ -303,7 +420,9 @@ dnl it should be safe to re-edit 0.40 back down to 0.23
use_nls=no
if test "x$enable_nls" = "xyes" ; then
use_nls=yes
- IT_PROG_INTLTOOL([0.35.0],[no-xml])
+ m4_ifdef([IT_PROG_INTLTOOL],
+ [IT_PROG_INTLTOOL([0.35.0],[no-xml])],
+ [AC_MSG_ERROR("--enable-nls requires intltool to be installed.")])
AC_CHECK_HEADERS([libintl.h])
GETTEXT_PACKAGE=transmission-gtk
AC_SUBST(GETTEXT_PACKAGE)
@@ -349,9 +468,9 @@ AC_ARG_ENABLE([lightweight],
AS_HELP_STRING([--enable-lightweight],[optimize libtransmission for low-resource systems: smaller cache size, prefer unencrypted peer connections, etc.]),
[enable_lightweight=${enableval}],
[enable_lightweight="no"])
-if test "x$enable_lightweight" = "xyes" ; then
+if test "x$enable_lightweight" = "xyes" ; then
AC_DEFINE([TR_LIGHTWEIGHT],[1],[optimize libtransmission for low-resource systems])
-fi
+fi
AC_ARG_ENABLE([cli],
[AS_HELP_STRING([--enable-cli],[build command-line client])],
@@ -407,21 +526,24 @@ AC_CONFIG_FILES([Makefile
libtransmission/Makefile
utils/Makefile
third-party/Makefile
- third-party/miniupnp/Makefile
- third-party/libnatpmp/Makefile
- third-party/libutp/Makefile
third-party/dht/Makefile
+ third-party/libutp/Makefile
+ third-party/libnatpmp/Makefile
+ third-party/miniupnp/Makefile
macosx/Makefile
gtk/Makefile
gtk/icons/Makefile
+ qt/config.pri
web/Makefile
web/images/Makefile
- web/images/buttons/Makefile
- web/images/graphics/Makefile
- web/images/progress/Makefile
+ web/style/Makefile
+ web/style/jqueryui/Makefile
+ web/style/jqueryui/images/Makefile
+ web/style/transmission/Makefile
+ web/style/transmission/images/Makefile
+ web/style/transmission/images/buttons/Makefile
web/javascript/Makefile
web/javascript/jquery/Makefile
- web/stylesheets/Makefile
po/Makefile.in])
AC_OUTPUT
@@ -439,7 +561,7 @@ Configuration:
Build Command-Line client: ${build_cli}
- Build GTK+ client: ${build_gtk}
+ Build GTK+ client: ${with_gtk} (GTK+ $gtk_version)
* libappindicator for an Ubuntu-style tray: ${use_libappindicator}
Build Daemon: ${build_daemon}
View
4 daemon/Makefile.am
@@ -20,8 +20,8 @@ bin_PROGRAMS = \
LDADD = \
$(top_builddir)/libtransmission/libtransmission.a \
- $(top_builddir)/third-party/miniupnp/libminiupnp.a \
- $(top_builddir)/third-party/libnatpmp/libnatpmp.a \
+ @LIBUPNP_LIBS@ \
+ @LIBNATPMP_LIBS@ \
@DHT_LIBS@ \
@LIBUTP_LIBS@ \
@LIBEVENT_LIBS@ \
View
26 daemon/daemon.c
@@ -43,19 +43,19 @@
#define MEM_G_STR "GiB"
#define MEM_T_STR "TiB"
-#define DISK_K 1024
-#define DISK_B_STR "B"
-#define DISK_K_STR "KiB"
-#define DISK_M_STR "MiB"
-#define DISK_G_STR "GiB"
-#define DISK_T_STR "TiB"
-
-#define SPEED_K 1024
-#define SPEED_B_STR "B/s"
-#define SPEED_K_STR "KiB/s"
-#define SPEED_M_STR "MiB/s"
-#define SPEED_G_STR "GiB/s"
-#define SPEED_T_STR "TiB/s"
+#define DISK_K 1000
+#define DISK_B_STR "B"
+#define DISK_K_STR "kB"
+#define DISK_M_STR "MB"
+#define DISK_G_STR "GB"
+#define DISK_T_STR "TB"
+
+#define SPEED_K 1000
+#define SPEED_B_STR "B/s"
+#define SPEED_K_STR "kB/s"
+#define SPEED_M_STR "MB/s"
+#define SPEED_G_STR "GB/s"
+#define SPEED_T_STR "TB/s"
static bool paused = false;
static bool closing = false;
View
45 daemon/remote.c
@@ -51,19 +51,19 @@
#define MEM_G_STR "GiB"
#define MEM_T_STR "TiB"
-#define DISK_K 1024
-#define DISK_B_STR "B"
-#define DISK_K_STR "KiB"
-#define DISK_M_STR "MiB"
-#define DISK_G_STR "GiB"
-#define DISK_T_STR "TiB"
-
-#define SPEED_K 1024
-#define SPEED_B_STR "B/s"
-#define SPEED_K_STR "KiB/s"
-#define SPEED_M_STR "MiB/s"
-#define SPEED_G_STR "GiB/s"
-#define SPEED_T_STR "TiB/s"
+#define DISK_K 1000
+#define DISK_B_STR "B"
+#define DISK_K_STR "kB"
+#define DISK_M_STR "MB"
+#define DISK_G_STR "GB"
+#define DISK_T_STR "TB"
+
+#define SPEED_K 1000
+#define SPEED_B_STR "B/s"
+#define SPEED_K_STR "kB/s"
+#define SPEED_M_STR "MB/s"
+#define SPEED_G_STR "GB/s"
+#define SPEED_T_STR "TB/s"
/***
****
@@ -211,7 +211,7 @@ getUsage( void )
" "
MY_NAME " [host:port] [options]\n"
" "
- MY_NAME " [http://host:port/transmission/] [options]\n"
+ MY_NAME " [http(s?)://host:port/transmission/] [options]\n"
"\n"
"See the man page for detailed explanations and many examples.";
}
@@ -817,6 +817,10 @@ getStatusString( tr_benc * t, char * buf, size_t buflen )
}
break;
}
+
+ default:
+ tr_strlcpy( buf, "Unknown", buflen );
+ break;
}
return buf;
@@ -1782,7 +1786,7 @@ flush( const char * rpcurl, tr_benc ** benc )
* build a new CURL* and try again */
curl_easy_cleanup( curl );
curl = NULL;
- flush( rpcurl, benc );
+ status |= flush( rpcurl, benc );
benc = NULL;
break;
default:
@@ -2330,7 +2334,7 @@ processArgs( const char * rpcurl, int argc, const char ** argv )
return status;
}
-/* [host:port] or [host] or [port] or [http://host:port/transmission/] */
+/* [host:port] or [host] or [port] or [http(s?)://host:port/transmission/] */
static void
getHostAndPortAndRpcUrl( int * argc, char ** argv,
char ** host, int * port, char ** rpcurl )
@@ -2340,9 +2344,14 @@ getHostAndPortAndRpcUrl( int * argc, char ** argv,
int i;
const char * s = argv[1];
const char * delim = strchr( s, ':' );
- if( !strncmp(s, "http://", 7 ) ) /* user passed in full rpc url */
+ if( !strncmp(s, "http://", 7 ) ) /* user passed in http rpc url */
+ {
+ *rpcurl = tr_strdup_printf( "%s/rpc/", s + 7 );
+ }
+ else if( !strncmp(s, "https://", 8) ) /* user passed in https rpc url */
{
- *rpcurl = tr_strdup_printf( "%s/rpc/", s );
+ UseSSL = true;
+ *rpcurl = tr_strdup_printf( "%s/rpc/", s + 8 );
}
else if( delim ) /* user passed in both host and port */
{
View
8 daemon/transmission-remote.1
@@ -123,7 +123,7 @@ Don't store incomplete torrents in a different directory.
.It Fl d Fl -downlimit Ar limit
Limit the maximum download speed to
.Ar limit
-KiB/s.
+kB/s.
If current torrent(s) are selected this operates on them. Otherwise, it changes the global setting.
.It Fl D Fl -no-downlimit
Disable download speed limits.
@@ -264,7 +264,7 @@ Make the current torrent(s) not honor the session limits.
.It Fl u Fl -uplimit Ar limit
Limit the maximum upload speed to
.Ar limit
-KiB/s.
+kB/s.
If current torrent(s) are selected this operates on them. Otherwise, it changes the global setting.
.It Fl U Fl -no-uplimit
Disable upload speed limits.
@@ -306,12 +306,12 @@ In the `status' section of the list, the following shorthand is used:
.D1 ?: We unchoked this peer, but they're not interested
.El
.Sh EXAMPLES
-Set download and upload limits to 400 KiB/sec and 60 KiB/sec:
+Set download and upload limits to 400 kB/sec and 60 kB/sec:
.Bd -literal -offset indent
$ transmission-remote \-d400 \-u60
$ transmission-remote \-\-downlimit=400 \-\-uplimit=60
.Ed
-Set alternate download and upload limits to 100 KiB/sec and 20 KiB/sec:
+Set alternate download and upload limits to 100 kB/sec and 20 kB/sec:
.Bd -literal -offset indent
$ transmission-remote \-asd100 \-asu20
$ transmission-remote \-\-alt-speed-downlimit=100 \-\-alt-speed-uplimit=20
View
4 gtk/Makefile.am
@@ -84,8 +84,8 @@ dist_man_MANS = transmission-gtk.1
transmission_gtk_LDADD = \
$(top_builddir)/libtransmission/libtransmission.a \
- $(top_builddir)/third-party/miniupnp/libminiupnp.a \
- $(top_builddir)/third-party/libnatpmp/libnatpmp.a \
+ @LIBUPNP_LIBS@ \
+ @LIBNATPMP_LIBS@ \
@DHT_LIBS@ \
@LIBUTP_LIBS@ \
@GTK_LIBS@ \
View
6 gtk/actions.c
@@ -101,7 +101,7 @@ static GtkActionEntry entries[] =
{ "edit-menu", NULL, N_( "_Edit" ), NULL, NULL, NULL },
{ "help-menu", NULL, N_( "_Help" ), NULL, NULL, NULL },
{ "copy-magnet-link-to-clipboard", GTK_STOCK_COPY, N_("Copy _Magnet Link to Clipboard" ), "", NULL, G_CALLBACK( action_cb ) },
- { "open-torrent-from-url", GTK_STOCK_OPEN, N_("Open _URL..." ), "<control>U", N_( "Open URL..." ), G_CALLBACK( action_cb ) },
+ { "open-torrent-from-url", GTK_STOCK_OPEN, N_("Open _URL" ), "<control>U", N_( "Open URL" ), G_CALLBACK( action_cb ) },
{ "open-torrent-toolbar", GTK_STOCK_OPEN, NULL, NULL, N_( "Open a torrent" ), G_CALLBACK( action_cb ) },
{ "open-torrent-menu", GTK_STOCK_OPEN, NULL, NULL, N_( "Open a torrent" ), G_CALLBACK( action_cb ) },
{ "torrent-start", GTK_STOCK_MEDIA_PLAY, N_( "_Start" ), "<control>S", N_( "Start torrent" ), G_CALLBACK( action_cb ) },
@@ -112,10 +112,10 @@ static GtkActionEntry entries[] =
{ "torrent-stop", GTK_STOCK_MEDIA_PAUSE, N_( "_Pause" ), "<control>P", N_( "Pause torrent" ), G_CALLBACK( action_cb ) },
{ "pause-all-torrents", GTK_STOCK_MEDIA_PAUSE, N_( "_Pause All" ), NULL, N_( "Pause all torrents" ), G_CALLBACK( action_cb ) },
{ "start-all-torrents", GTK_STOCK_MEDIA_PLAY, N_( "_Start All" ), NULL, N_( "Start all torrents" ), G_CALLBACK( action_cb ) },
- { "relocate-torrent", NULL, N_("Set _Location..." ), NULL, NULL, G_CALLBACK( action_cb ) },
+ { "relocate-torrent", NULL, N_("Set _Location" ), NULL, NULL, G_CALLBACK( action_cb ) },
{ "remove-torrent", GTK_STOCK_REMOVE, NULL, "Delete", N_( "Remove torrent" ), G_CALLBACK( action_cb ) },
{ "delete-torrent", GTK_STOCK_DELETE, N_( "_Delete Files and Remove" ), "<shift>Delete", NULL, G_CALLBACK( action_cb ) },
- { "new-torrent", GTK_STOCK_NEW, N_( "_New..." ), NULL, N_( "Create a torrent" ), G_CALLBACK( action_cb ) },
+ { "new-torrent", GTK_STOCK_NEW, N_( "_New" ), NULL, N_( "Create a torrent" ), G_CALLBACK( action_cb ) },
{ "quit", GTK_STOCK_QUIT, N_( "_Quit" ), NULL, NULL, G_CALLBACK( action_cb ) },
{ "select-all", GTK_STOCK_SELECT_ALL, N_( "Select _All" ), "<control>A", NULL, G_CALLBACK( action_cb ) },
{ "deselect-all", NULL, N_( "Dese_lect All" ), "<shift><control>A", NULL, G_CALLBACK( action_cb ) },
View
2  gtk/conf.c
@@ -93,9 +93,7 @@ tr_prefs_init_defaults( tr_benc * d )
tr_bencDictAddBool( d, PREF_KEY_SHOW_BACKUP_TRACKERS, FALSE );
tr_bencDictAddStr ( d, PREF_KEY_STATUSBAR_STATS, "total-ratio" );
- tr_bencDictAddStr ( d, PREF_KEY_TORRENT_ADDED_NOTIFICATION_COMMAND, "notify-send -c transfer -i transmission '%s' '%s'" );
tr_bencDictAddBool( d, PREF_KEY_TORRENT_ADDED_NOTIFICATION_ENABLED, true );
- tr_bencDictAddStr ( d, PREF_KEY_TORRENT_COMPLETE_NOTIFICATION_COMMAND, "notify-send -c transfer.complete -i transmission '%s' '%s'" );
tr_bencDictAddBool( d, PREF_KEY_TORRENT_COMPLETE_NOTIFICATION_ENABLED, true );
tr_bencDictAddStr ( d, PREF_KEY_TORRENT_COMPLETE_SOUND_COMMAND, "canberra-gtk-play -i complete-download -d 'transmission torrent downloaded'" );
tr_bencDictAddBool( d, PREF_KEY_TORRENT_COMPLETE_SOUND_ENABLED, true );
View
39 gtk/details.c
@@ -514,7 +514,7 @@ options_page_new( struct DetailsImpl * d )
hig_workarea_add_section_divider( t, &row );
hig_workarea_add_section_title( t, &row, _( "Seeding Limits" ) );
- h = gtk_hbox_new( FALSE, GUI_PAD );
+ h = gtr_hbox_new( FALSE, GUI_PAD );
w = d->ratio_combo = ratio_combo_new( );
d->ratio_combo_tag = g_signal_connect( w, "changed", G_CALLBACK( onComboEnumChanged ), d );
gtk_box_pack_start( GTK_BOX( h ), w, TRUE, TRUE, 0 );
@@ -524,7 +524,7 @@ options_page_new( struct DetailsImpl * d )
gtk_box_pack_start( GTK_BOX( h ), w, FALSE, FALSE, 0 );
hig_workarea_add_row( t, &row, _( "_Ratio:" ), h, NULL );
- h = gtk_hbox_new( FALSE, GUI_PAD );
+ h = gtr_hbox_new( FALSE, GUI_PAD );
w = d->idle_combo = idle_combo_new( );
d->idle_combo_tag = g_signal_connect( w, "changed", G_CALLBACK( onComboEnumChanged ), d );
gtk_box_pack_start( GTK_BOX( h ), w, TRUE, TRUE, 0 );
@@ -557,13 +557,13 @@ activityString( int activity, bool finished )
{
switch( activity )
{
- case TR_STATUS_CHECK_WAIT: return _( "Queued for verification" );
- case TR_STATUS_CHECK: return _( "Verifying local data" );
- case TR_STATUS_DOWNLOAD_WAIT: return _( "Queued for download" );
- case TR_STATUS_DOWNLOAD: return _( "Downloading" );
- case TR_STATUS_SEED_WAIT: return _( "Queued for seeding" );
- case TR_STATUS_SEED: return _( "Seeding" );
- case TR_STATUS_STOPPED: return finished ? _( "Finished" ) : _( "Paused" );
+ case TR_STATUS_CHECK_WAIT: return _( "Queued for verification" );
+ case TR_STATUS_CHECK: return _( "Verifying local data" );
+ case TR_STATUS_DOWNLOAD_WAIT: return _( "Queued for download" );
+ case TR_STATUS_DOWNLOAD: return C_( "Verb", "Downloading" );
+ case TR_STATUS_SEED_WAIT: return _( "Queued for seeding" );
+ case TR_STATUS_SEED: return C_( "Verb", "Seeding" );
+ case TR_STATUS_STOPPED: return finished ? _( "Finished" ) : _( "Paused" );
}
return "";
@@ -796,14 +796,11 @@ refreshInfo( struct DetailsImpl * di, tr_torrent ** torrents, int n )
uint64_t leftUntilDone = 0;
uint64_t haveUnchecked = 0;
uint64_t haveValid = 0;
- uint32_t verifiedPieces = 0;
uint64_t available = 0;
for( i=0; i<n; ++i ) {
const tr_stat * st = stats[i];
- const tr_info * inf = infos[i];
haveUnchecked += st->haveUnchecked;
haveValid += st->haveValid;
- verifiedPieces += inf->pieceSize ? st->haveValid / inf->pieceSize : 0;
sizeWhenDone += st->sizeWhenDone;
leftUntilDone += st->leftUntilDone;
available += st->sizeWhenDone - st->leftUntilDone + st->desiredAvailable;
@@ -1731,10 +1728,14 @@ peer_page_new( struct DetailsImpl * di )
GTK_SHADOW_IN );
gtk_container_add( GTK_CONTAINER( w ), v );
- vbox = gtk_vbox_new( FALSE, GUI_PAD );
+ vbox = gtr_vbox_new( FALSE, GUI_PAD );
gtk_container_set_border_width( GTK_CONTAINER( vbox ), GUI_PAD_BIG );
+#if GTK_CHECK_VERSION(3,2,0)
+ v = gtk_paned_new( GTK_ORIENTATION_VERTICAL );
+#else
v = gtk_vpaned_new( );
+#endif
gtk_paned_pack1( GTK_PANED( v ), webtree, FALSE, TRUE );
gtk_paned_pack2( GTK_PANED( v ), sw, TRUE, TRUE );
gtk_box_pack_start( GTK_BOX( vbox ), v, TRUE, TRUE, 0 );
@@ -1839,7 +1840,7 @@ buildTrackerSummary( GString * gstr, const char * key, const tr_tracker_stat * s
case TR_TRACKER_ACTIVE:
tr_strltime_rounded( timebuf, now - st->lastAnnounceStartTime, sizeof( timebuf ) );
g_string_append_c( gstr, '\n' );
- g_string_append_printf( gstr, _( "Asking for more peers now... <small>%s</small>" ), timebuf );
+ g_string_append_printf( gstr, _( "Asking for more peers now <small>%s</small>" ), timebuf );
break;
}
@@ -1872,7 +1873,7 @@ buildTrackerSummary( GString * gstr, const char * key, const tr_tracker_stat * s
case TR_TRACKER_ACTIVE:
g_string_append_c( gstr, '\n' );
tr_strltime_rounded( timebuf, now - st->lastScrapeStartTime, sizeof( timebuf ) );
- g_string_append_printf( gstr, _( "Asking for peer counts now... <small>%s</small>" ), timebuf );
+ g_string_append_printf( gstr, _( "Asking for peer counts now <small>%s</small>" ), timebuf );
break;
}
}
@@ -2372,7 +2373,7 @@ tracker_page_new( struct DetailsImpl * di )
GtkWidget *vbox, *sw, *w, *v, *hbox;
const int pad = ( GUI_PAD + GUI_PAD_BIG ) / 2;
- vbox = gtk_vbox_new( FALSE, GUI_PAD );
+ vbox = gtr_vbox_new( FALSE, GUI_PAD );
gtk_container_set_border_width( GTK_CONTAINER( vbox ), GUI_PAD_BIG );
di->tracker_store = gtk_list_store_new( TRACKER_N_COLS, G_TYPE_INT,
@@ -2390,7 +2391,7 @@ tracker_page_new( struct DetailsImpl * di )
gtk_tree_model_filter_set_visible_func( GTK_TREE_MODEL_FILTER( di->trackers_filtered ),
trackerVisibleFunc, di, NULL );
- hbox = gtk_hbox_new( FALSE, GUI_PAD_BIG );
+ hbox = gtr_hbox_new( FALSE, GUI_PAD_BIG );
v = di->tracker_view = gtk_tree_view_new_with_model( GTK_TREE_MODEL( di->trackers_filtered ) );
g_object_unref( di->trackers_filtered );
@@ -2425,7 +2426,7 @@ tracker_page_new( struct DetailsImpl * di )
gtk_box_pack_start( GTK_BOX( hbox ), w, TRUE, TRUE, 0 );
- v = gtk_vbox_new( FALSE, GUI_PAD );
+ v = gtr_vbox_new( FALSE, GUI_PAD );
w = gtk_button_new_with_mnemonic( _( "_Add" ) );
di->add_tracker_button = w;
@@ -2550,7 +2551,7 @@ gtr_torrent_details_dialog_new( GtkWindow * parent, TrCore * core )
l = gtk_label_new( _( "Trackers" ) );
gtk_notebook_append_page( GTK_NOTEBOOK( n ), w, l );
- v = gtk_vbox_new( FALSE, 0 );
+ v = gtr_vbox_new( FALSE, 0 );
di->file_list = gtr_file_list_new( core, 0 );
di->file_label = gtk_label_new( _( "File listing not available for combined torrent properties" ) );
gtk_box_pack_start( GTK_BOX( v ), di->file_list, TRUE, TRUE, 0 );
View
8 gtk/filter.c
@@ -695,11 +695,11 @@ activity_filter_model_new( GtkTreeModel * tmodel )
{ ACTIVITY_FILTER_ALL, N_( "All" ), NULL },
{ ACTIVITY_FILTER_SEPARATOR, NULL, NULL },
{ ACTIVITY_FILTER_ACTIVE, N_( "Active" ), GTK_STOCK_EXECUTE },
- { ACTIVITY_FILTER_DOWNLOADING, N_( "Downloading" ), GTK_STOCK_GO_DOWN },
- { ACTIVITY_FILTER_SEEDING, N_( "Seeding" ), GTK_STOCK_GO_UP },
+ { ACTIVITY_FILTER_DOWNLOADING, NC_( "Verb", "Downloading" ), GTK_STOCK_GO_DOWN },
+ { ACTIVITY_FILTER_SEEDING, NC_( "Verb", "Seeding" ), GTK_STOCK_GO_UP },
{ ACTIVITY_FILTER_PAUSED, N_( "Paused" ), GTK_STOCK_MEDIA_PAUSE },
{ ACTIVITY_FILTER_FINISHED, N_( "Finished" ), NULL },
- { ACTIVITY_FILTER_VERIFYING, N_( "Verifying" ), GTK_STOCK_REFRESH },
+ { ACTIVITY_FILTER_VERIFYING, NC_( "Verb", "Verifying" ), GTK_STOCK_REFRESH },
{ ACTIVITY_FILTER_ERROR, N_( "Error" ), GTK_STOCK_DIALOG_ERROR }
};
GtkListStore * store = gtk_list_store_new( ACTIVITY_FILTER_N_COLS,
@@ -984,7 +984,7 @@ gtr_filter_bar_new( tr_session * session, GtkTreeModel * tmodel, GtkTreeModel **
g_signal_connect( data->activity, "changed", G_CALLBACK( selection_changed_cb ), data );
- h = gtk_hbox_new( FALSE, GUI_PAD_SMALL );
+ h = gtr_hbox_new( FALSE, GUI_PAD_SMALL );
/* add the activity combobox */
str = _( "_Show:" );
View
7 gtk/hig.c
@@ -12,6 +12,7 @@
#include <gtk/gtk.h>
#include "hig.h"
+#include "util.h" /* gtr_hbox_new */
GtkWidget*
hig_workarea_create( void )
@@ -58,7 +59,7 @@ static GtkWidget*
rowNew( GtkWidget * w )
{
GtkWidget * a;
- GtkWidget * h = gtk_hbox_new( FALSE, 0 );
+ GtkWidget * h = gtr_hbox_new( FALSE, 0 );
/* spacer */
a = gtk_alignment_new( 0.0f, 0.0f, 0.0f, 0.0f );
@@ -187,8 +188,8 @@ hig_workarea_add_tall_row( GtkWidget * table,
GtkWidget * mnemonic )
{
GtkWidget * l = gtk_label_new_with_mnemonic( mnemonic_string );
- GtkWidget * h = gtk_hbox_new( FALSE, 0 );
- GtkWidget * v = gtk_vbox_new( FALSE, 0 );
+ GtkWidget * h = gtr_hbox_new( FALSE, 0 );
+ GtkWidget * v = gtr_vbox_new( FALSE, 0 );
gtk_box_pack_start( GTK_BOX( h ), l, FALSE, FALSE, 0 );
gtk_box_pack_start( GTK_BOX( v ), h, FALSE, FALSE, GUI_PAD_SMALL );
View
BIN  gtk/icons/hicolor_apps_16x16_transmission.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  gtk/icons/hicolor_apps_22x22_transmission.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  gtk/icons/hicolor_apps_24x24_transmission.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  gtk/icons/hicolor_apps_256x256_transmission.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  gtk/icons/hicolor_apps_32x32_transmission.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  gtk/icons/hicolor_apps_48x48_transmission.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
65 gtk/main.c
@@ -46,6 +46,7 @@
#include "hig.h"
#include "makemeta-ui.h"
#include "msgwin.h"
+#include "notify.h"
#include "open-dialog.h"
#include "relocate.h"
#include "stats.h"
@@ -72,6 +73,7 @@ struct cbdata
gboolean start_paused;
gboolean is_iconified;
+ guint activation_count;
guint timer;
guint update_model_soon_tag;
guint refresh_actions_tag;
@@ -532,8 +534,16 @@ on_startup( GApplication * application, gpointer user_data )
}
static void
-on_activate( GApplication * app UNUSED, gpointer unused UNUSED )
+on_activate( GApplication * app UNUSED, struct cbdata * cbdata )
{
+ cbdata->activation_count++;
+
+ /* GApplication emits an 'activate' signal when bootstrapping the primary.
+ * Ordinarily we handle that by presenting the main window, but if the user
+ * user started Transmission minimized, ignore that initial signal... */
+ if( cbdata->is_iconified && ( cbdata->activation_count == 1 ) )
+ return;
+
gtr_action_activate( "present-main-window" );
}
@@ -634,6 +644,9 @@ main( int argc, char ** argv )
gtr_pref_init( cbdata.config_dir );
g_mkdir_with_parents( cbdata.config_dir, 0755 );
+ /* init notifications */
+ gtr_notify_init( );
+
/* init the application for the specified config dir */
stat( cbdata.config_dir, &sb );
application_id = g_strdup_printf( "com.transmissionbt.transmission_%lu_%lu", (unsigned long)sb.st_dev, (unsigned long)sb.st_ino );
@@ -921,7 +934,7 @@ on_app_exit( gpointer vdata )
gtk_misc_set_alignment( GTK_MISC( w ), 0.0, 0.5 );
gtk_table_attach_defaults( GTK_TABLE( p ), w, 1, 2, 0, 1 );
- w = gtk_label_new( _( "Sending upload/download totals to tracker..." ) );
+ w = gtk_label_new( _( "Sending upload/download totals to tracker" ) );
gtk_misc_set_alignment( GTK_MISC( w ), 0.0, 0.5 );
gtk_table_attach_defaults( GTK_TABLE( p ), w, 1, 2, 1, 2 );
@@ -1285,35 +1298,29 @@ update_model_loop( gpointer gdata )
static void
show_about_dialog( GtkWindow * parent )
{
- GtkWidget * d;
- const char * website_uri = "http://www.transmissionbt.com/";
- const char * authors[] = {
- "Jordan Lee (Backend; GTK+)",
- "Mitchell Livingston (Backend; OS X)",
- NULL
- };
-
- d = g_object_new( GTK_TYPE_ABOUT_DIALOG,
- "authors", authors,
- "comments", _( "A fast and easy BitTorrent client" ),
- "copyright", _( "Copyright (c) The Transmission Project" ),
- "logo-icon-name", MY_CONFIG_NAME,
- "name", g_get_application_name( ),
- /* Translators: translate "translator-credits" as your name
- to have it appear in the credits in the "About"
- dialog */
- "translator-credits", _( "translator-credits" ),
- "version", LONG_VERSION_STRING,
- "website", website_uri,
- "website-label", website_uri,
+ const char * uri = "http://www.transmissionbt.com/";
+ const char * authors[] = { "Jordan Lee (Backend; GTK+)",
+ "Mitchell Livingston (Backend; OS X)",
+ NULL };
+
+ gtk_show_about_dialog( parent,
+ "authors", authors,
+ "comments", _( "A fast and easy BitTorrent client" ),
+ "copyright", _( "Copyright (c) The Transmission Project" ),
+ "logo-icon-name", MY_CONFIG_NAME,
+ "name", g_get_application_name( ),
+ /* Translators: translate "translator-credits" as your name
+ to have it appear in the credits in the "About"
+ dialog */
+ "translator-credits", _( "translator-credits" ),
+ "version", LONG_VERSION_STRING,
+ "website", uri,
+ "website-label", uri,
#ifdef SHOW_LICENSE
- "license", LICENSE,
- "wrap-license", TRUE,
+ "license", LICENSE,
+ "wrap-license", TRUE,
#endif
- NULL );
- gtk_window_set_transient_for( GTK_WINDOW( d ), parent );
- g_signal_connect_swapped( d, "response", G_CALLBACK (gtk_widget_destroy), d );
- gtk_widget_show( d );
+ NULL );
}
static void
View
6 gtk/makemeta-ui.c
@@ -177,10 +177,10 @@ makeProgressDialog( GtkWidget * parent, MakeMetaUI * ui )
fr = gtk_frame_new( NULL );
gtk_container_set_border_width( GTK_CONTAINER( fr ), GUI_PAD_BIG );
gtk_frame_set_shadow_type( GTK_FRAME( fr ), GTK_SHADOW_NONE );
- v = gtk_vbox_new( TRUE, GUI_PAD );
+ v = gtr_vbox_new( TRUE, GUI_PAD );
gtk_container_add( GTK_CONTAINER( fr ), v );
- l = gtk_label_new( _( "Creating torrent..." ) );
+ l = gtk_label_new( _( "Creating torrent" ) );
gtk_misc_set_alignment( GTK_MISC( l ), 0.0, 0.5 );
gtk_label_set_justify( GTK_LABEL( l ), GTK_JUSTIFY_LEFT );
ui->progress_label = l;
@@ -473,7 +473,7 @@ gtr_torrent_creation_dialog_new( GtkWindow * parent, TrCore * core )
hig_workarea_add_section_title ( t, &row, _( "Properties" ) );
str = _( "_Trackers:" );
- v = gtk_vbox_new( FALSE, GUI_PAD_SMALL );
+ v = gtr_vbox_new( FALSE, GUI_PAD_SMALL );
ui->announce_text_buffer = gtk_text_buffer_new( NULL );
w = gtk_text_view_new_with_buffer( ui->announce_text_buffer );
gtk_widget_set_size_request( w, -1, 80 );
View
17 gtk/msgwin.c
@@ -378,6 +378,17 @@ addMessages( GtkListStore * store, struct tr_msg_list * head )
COL_MESSAGE, i->message,
COL_SEQUENCE, ++sequence,
-1 );
+
+ /* if it's an error message, dump it to the terminal too */
+ if( i->level == TR_MSG_ERR )
+ {
+ GString * gstr = g_string_sized_new( 512 );
+ g_string_append_printf( gstr, "%s:%d %s", i->file, i->line, i->message );
+ if( i->name != NULL )
+ g_string_append_printf( gstr, " (%s)", i->name );
+ g_warning( "%s", gstr->str );
+ g_string_free( gstr, TRUE );
+ }
}
return i; /* tail */
@@ -445,7 +456,7 @@ gtr_message_log_window_new( GtkWindow * parent, TrCore * core )
gtk_window_set_title( GTK_WINDOW( win ), _( "Message Log" ) );
gtk_window_set_default_size( GTK_WINDOW( win ), 560, 350 );
gtk_window_set_role( GTK_WINDOW( win ), "message-log" );
- vbox = gtk_vbox_new( FALSE, 0 );
+ vbox = gtr_vbox_new( FALSE, 0 );
/**
*** toolbar
@@ -453,6 +464,10 @@ gtr_message_log_window_new( GtkWindow * parent, TrCore * core )
toolbar = gtk_toolbar_new( );
gtk_toolbar_set_style( GTK_TOOLBAR( toolbar ), GTK_TOOLBAR_BOTH_HORIZ );
+#if GTK_CHECK_VERSION( 3,0,0 )
+ gtk_style_context_add_class( gtk_widget_get_style_context( toolbar ),
+ GTK_STYLE_CLASS_PRIMARY_TOOLBAR );
+#endif
item = gtk_tool_button_new_from_stock( GTK_STOCK_SAVE_AS );
g_object_set( G_OBJECT( item ), "is-important", TRUE, NULL );
View
239 gtk/notify.c
@@ -10,38 +10,243 @@
* $Id$
*/
+#include <string.h> /* strcmp() */
+
+#include <gio/gio.h>
+
#include <glib/gi18n.h>
#include "conf.h"
#include "notify.h"
#include "tr-prefs.h"
+#include "util.h"
-void
-gtr_notify_torrent_completed( TrCore * core, int torrent_id )
+#define NOTIFICATIONS_DBUS_NAME "org.freedesktop.Notifications"
+#define NOTIFICATIONS_DBUS_CORE_OBJECT "/org/freedesktop/Notifications"
+#define NOTIFICATIONS_DBUS_CORE_INTERFACE "org.freedesktop.Notifications"
+
+static GDBusProxy *proxy = NULL;
+static GHashTable *active_notifications = NULL;
+static gboolean server_supports_actions = FALSE;
+
+typedef struct _TrNotification
+{
+ guint id;
+ TrCore * core;
+ int torrent_id;