├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── README.md ├── bundle_osx.sh ├── docs └── screencast.gif ├── icon ├── gen_iconset.sh ├── hn1024.png └── toucHNews.icns ├── release_osx.sh └── src └── main.rs /.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | **/*.rs.bk 3 | *~ 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | language: rust 3 | rust: 4 | - stable 5 | - beta 6 | - nightly 7 | os: 8 | - osx 9 | matrix: 10 | allow_failures: 11 | - rust: nightly 12 | # Only build direct changes to master branch. PRs still built. 13 | branches: 14 | only: 15 | - "master" 16 | osx_image: xcode8.3 17 | install: 18 | - curl https://static.rust-lang.org/rustup.sh | 19 | sh -s -- --prefix=$HOME/rust 20 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | 0.4.0 2 | ----- 3 | * Update dependencies. Fixes building with Rust Nightly. 4 | 5 | 0.3.3 6 | ----- 7 | * Fix bug that caused 100% CPU usage and crashing 8 | 9 | 0.3.2 10 | ----- 11 | * Fix bug that prevented quitting from the touchbar 12 | 13 | 0.3.1 14 | ----- 15 | * Update touchbar library 16 | 17 | 0.3.0 18 | ----- 19 | * Use fruitbasket library for Mac app bundle management 20 | 21 | 0.2.1 22 | ----- 23 | * Fixed colors getting stuck when putting down a second finger during a swipe 24 | 25 | 0.2.0 26 | ----- 27 | * First release 28 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | [[package]] 2 | name = "antidote" 3 | version = "1.0.0" 4 | source = "registry+https://github.com/rust-lang/crates.io-index" 5 | 6 | [[package]] 7 | name = "arrayvec" 8 | version = "0.4.7" 9 | source = "registry+https://github.com/rust-lang/crates.io-index" 10 | dependencies = [ 11 | "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", 12 | ] 13 | 14 | [[package]] 15 | name = "base64" 16 | version = "0.9.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | dependencies = [ 19 | "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 20 | "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 21 | ] 22 | 23 | [[package]] 24 | name = "bitflags" 25 | version = "0.9.1" 26 | source = "registry+https://github.com/rust-lang/crates.io-index" 27 | 28 | [[package]] 29 | name = "bitflags" 30 | version = "1.0.1" 31 | source = "registry+https://github.com/rust-lang/crates.io-index" 32 | 33 | [[package]] 34 | name = "block" 35 | version = "0.1.6" 36 | source = "registry+https://github.com/rust-lang/crates.io-index" 37 | 38 | [[package]] 39 | name = "byteorder" 40 | version = "1.2.2" 41 | source = "registry+https://github.com/rust-lang/crates.io-index" 42 | 43 | [[package]] 44 | name = "bytes" 45 | version = "0.4.6" 46 | source = "registry+https://github.com/rust-lang/crates.io-index" 47 | dependencies = [ 48 | "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 49 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 50 | ] 51 | 52 | [[package]] 53 | name = "cc" 54 | version = "1.0.9" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | 57 | [[package]] 58 | name = "cfg-if" 59 | version = "0.1.2" 60 | source = "registry+https://github.com/rust-lang/crates.io-index" 61 | 62 | [[package]] 63 | name = "chrono" 64 | version = "0.4.1" 65 | source = "registry+https://github.com/rust-lang/crates.io-index" 66 | dependencies = [ 67 | "num-integer 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", 68 | "num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 69 | "time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", 70 | ] 71 | 72 | [[package]] 73 | name = "cocoa" 74 | version = "0.14.0" 75 | source = "registry+https://github.com/rust-lang/crates.io-index" 76 | dependencies = [ 77 | "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 78 | "block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 79 | "core-graphics 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", 80 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 81 | "objc 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 82 | ] 83 | 84 | [[package]] 85 | name = "core-foundation" 86 | version = "0.2.3" 87 | source = "registry+https://github.com/rust-lang/crates.io-index" 88 | dependencies = [ 89 | "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 90 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 91 | ] 92 | 93 | [[package]] 94 | name = "core-foundation" 95 | version = "0.5.1" 96 | source = "registry+https://github.com/rust-lang/crates.io-index" 97 | dependencies = [ 98 | "core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 99 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 100 | ] 101 | 102 | [[package]] 103 | name = "core-foundation-sys" 104 | version = "0.2.3" 105 | source = "registry+https://github.com/rust-lang/crates.io-index" 106 | dependencies = [ 107 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 108 | ] 109 | 110 | [[package]] 111 | name = "core-foundation-sys" 112 | version = "0.5.1" 113 | source = "registry+https://github.com/rust-lang/crates.io-index" 114 | dependencies = [ 115 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 116 | ] 117 | 118 | [[package]] 119 | name = "core-graphics" 120 | version = "0.13.0" 121 | source = "registry+https://github.com/rust-lang/crates.io-index" 122 | dependencies = [ 123 | "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 124 | "core-foundation 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 125 | "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 126 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 127 | ] 128 | 129 | [[package]] 130 | name = "crossbeam" 131 | version = "0.3.2" 132 | source = "registry+https://github.com/rust-lang/crates.io-index" 133 | 134 | [[package]] 135 | name = "crossbeam-deque" 136 | version = "0.3.0" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | dependencies = [ 139 | "crossbeam-epoch 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 140 | "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 141 | ] 142 | 143 | [[package]] 144 | name = "crossbeam-epoch" 145 | version = "0.4.1" 146 | source = "registry+https://github.com/rust-lang/crates.io-index" 147 | dependencies = [ 148 | "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", 149 | "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 150 | "crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 151 | "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 152 | "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 153 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 154 | ] 155 | 156 | [[package]] 157 | name = "crossbeam-utils" 158 | version = "0.2.2" 159 | source = "registry+https://github.com/rust-lang/crates.io-index" 160 | dependencies = [ 161 | "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 162 | ] 163 | 164 | [[package]] 165 | name = "crossbeam-utils" 166 | version = "0.3.2" 167 | source = "registry+https://github.com/rust-lang/crates.io-index" 168 | dependencies = [ 169 | "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 170 | ] 171 | 172 | [[package]] 173 | name = "dtoa" 174 | version = "0.4.2" 175 | source = "registry+https://github.com/rust-lang/crates.io-index" 176 | 177 | [[package]] 178 | name = "flate2" 179 | version = "1.0.1" 180 | source = "registry+https://github.com/rust-lang/crates.io-index" 181 | dependencies = [ 182 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 183 | "miniz-sys 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 184 | ] 185 | 186 | [[package]] 187 | name = "fnv" 188 | version = "1.0.6" 189 | source = "registry+https://github.com/rust-lang/crates.io-index" 190 | 191 | [[package]] 192 | name = "foreign-types" 193 | version = "0.3.2" 194 | source = "registry+https://github.com/rust-lang/crates.io-index" 195 | dependencies = [ 196 | "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 197 | ] 198 | 199 | [[package]] 200 | name = "foreign-types-shared" 201 | version = "0.1.1" 202 | source = "registry+https://github.com/rust-lang/crates.io-index" 203 | 204 | [[package]] 205 | name = "fruitbasket" 206 | version = "0.6.0" 207 | source = "registry+https://github.com/rust-lang/crates.io-index" 208 | dependencies = [ 209 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 210 | "log4rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 211 | "objc 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 212 | "objc-foundation 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 213 | "objc_id 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 214 | "time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", 215 | ] 216 | 217 | [[package]] 218 | name = "fuchsia-zircon" 219 | version = "0.3.3" 220 | source = "registry+https://github.com/rust-lang/crates.io-index" 221 | dependencies = [ 222 | "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 223 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 224 | ] 225 | 226 | [[package]] 227 | name = "fuchsia-zircon-sys" 228 | version = "0.3.3" 229 | source = "registry+https://github.com/rust-lang/crates.io-index" 230 | 231 | [[package]] 232 | name = "futures" 233 | version = "0.1.20" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | 236 | [[package]] 237 | name = "futures-cpupool" 238 | version = "0.1.8" 239 | source = "registry+https://github.com/rust-lang/crates.io-index" 240 | dependencies = [ 241 | "futures 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", 242 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 243 | ] 244 | 245 | [[package]] 246 | name = "gcc" 247 | version = "0.3.54" 248 | source = "registry+https://github.com/rust-lang/crates.io-index" 249 | 250 | [[package]] 251 | name = "hn" 252 | version = "0.4.0" 253 | source = "registry+https://github.com/rust-lang/crates.io-index" 254 | dependencies = [ 255 | "futures 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", 256 | "hyper 0.11.24 (registry+https://github.com/rust-lang/crates.io-index)", 257 | "hyper-tls 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 258 | "serde 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", 259 | "serde_derive 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", 260 | "serde_json 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)", 261 | "time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", 262 | "tokio-core 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", 263 | ] 264 | 265 | [[package]] 266 | name = "httparse" 267 | version = "1.2.4" 268 | source = "registry+https://github.com/rust-lang/crates.io-index" 269 | 270 | [[package]] 271 | name = "humantime" 272 | version = "1.1.1" 273 | source = "registry+https://github.com/rust-lang/crates.io-index" 274 | dependencies = [ 275 | "quick-error 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 276 | ] 277 | 278 | [[package]] 279 | name = "hyper" 280 | version = "0.11.24" 281 | source = "registry+https://github.com/rust-lang/crates.io-index" 282 | dependencies = [ 283 | "base64 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 284 | "bytes 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 285 | "futures 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", 286 | "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 287 | "httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 288 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 289 | "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 290 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 291 | "mime 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 292 | "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 293 | "relay 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 294 | "time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", 295 | "tokio-core 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", 296 | "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 297 | "tokio-proto 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 298 | "tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 299 | "unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 300 | ] 301 | 302 | [[package]] 303 | name = "hyper-tls" 304 | version = "0.1.3" 305 | source = "registry+https://github.com/rust-lang/crates.io-index" 306 | dependencies = [ 307 | "futures 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", 308 | "hyper 0.11.24 (registry+https://github.com/rust-lang/crates.io-index)", 309 | "native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 310 | "tokio-core 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", 311 | "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 312 | "tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 313 | "tokio-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 314 | ] 315 | 316 | [[package]] 317 | name = "iovec" 318 | version = "0.1.2" 319 | source = "registry+https://github.com/rust-lang/crates.io-index" 320 | dependencies = [ 321 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 322 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 323 | ] 324 | 325 | [[package]] 326 | name = "itoa" 327 | version = "0.4.1" 328 | source = "registry+https://github.com/rust-lang/crates.io-index" 329 | 330 | [[package]] 331 | name = "kernel32-sys" 332 | version = "0.2.2" 333 | source = "registry+https://github.com/rust-lang/crates.io-index" 334 | dependencies = [ 335 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 336 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 337 | ] 338 | 339 | [[package]] 340 | name = "language-tags" 341 | version = "0.2.2" 342 | source = "registry+https://github.com/rust-lang/crates.io-index" 343 | 344 | [[package]] 345 | name = "lazy_static" 346 | version = "0.2.11" 347 | source = "registry+https://github.com/rust-lang/crates.io-index" 348 | 349 | [[package]] 350 | name = "lazy_static" 351 | version = "1.0.0" 352 | source = "registry+https://github.com/rust-lang/crates.io-index" 353 | 354 | [[package]] 355 | name = "lazycell" 356 | version = "0.6.0" 357 | source = "registry+https://github.com/rust-lang/crates.io-index" 358 | 359 | [[package]] 360 | name = "libc" 361 | version = "0.2.40" 362 | source = "registry+https://github.com/rust-lang/crates.io-index" 363 | 364 | [[package]] 365 | name = "linked-hash-map" 366 | version = "0.5.1" 367 | source = "registry+https://github.com/rust-lang/crates.io-index" 368 | 369 | [[package]] 370 | name = "log" 371 | version = "0.3.9" 372 | source = "registry+https://github.com/rust-lang/crates.io-index" 373 | dependencies = [ 374 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 375 | ] 376 | 377 | [[package]] 378 | name = "log" 379 | version = "0.4.1" 380 | source = "registry+https://github.com/rust-lang/crates.io-index" 381 | dependencies = [ 382 | "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 383 | "serde 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", 384 | ] 385 | 386 | [[package]] 387 | name = "log-mdc" 388 | version = "0.1.0" 389 | source = "registry+https://github.com/rust-lang/crates.io-index" 390 | 391 | [[package]] 392 | name = "log4rs" 393 | version = "0.8.0" 394 | source = "registry+https://github.com/rust-lang/crates.io-index" 395 | dependencies = [ 396 | "antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 397 | "chrono 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 398 | "crossbeam 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 399 | "flate2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 400 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 401 | "humantime 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 402 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 403 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 404 | "log-mdc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 405 | "serde 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", 406 | "serde-value 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 407 | "serde_derive 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", 408 | "serde_json 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)", 409 | "serde_yaml 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", 410 | "typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 411 | "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 412 | ] 413 | 414 | [[package]] 415 | name = "malloc_buf" 416 | version = "0.0.6" 417 | source = "registry+https://github.com/rust-lang/crates.io-index" 418 | dependencies = [ 419 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 420 | ] 421 | 422 | [[package]] 423 | name = "memoffset" 424 | version = "0.2.1" 425 | source = "registry+https://github.com/rust-lang/crates.io-index" 426 | 427 | [[package]] 428 | name = "mime" 429 | version = "0.3.5" 430 | source = "registry+https://github.com/rust-lang/crates.io-index" 431 | dependencies = [ 432 | "unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 433 | ] 434 | 435 | [[package]] 436 | name = "miniz-sys" 437 | version = "0.1.10" 438 | source = "registry+https://github.com/rust-lang/crates.io-index" 439 | dependencies = [ 440 | "cc 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", 441 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 442 | ] 443 | 444 | [[package]] 445 | name = "mio" 446 | version = "0.6.14" 447 | source = "registry+https://github.com/rust-lang/crates.io-index" 448 | dependencies = [ 449 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 450 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 451 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 452 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 453 | "lazycell 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 454 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 455 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 456 | "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 457 | "net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", 458 | "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 459 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 460 | ] 461 | 462 | [[package]] 463 | name = "miow" 464 | version = "0.2.1" 465 | source = "registry+https://github.com/rust-lang/crates.io-index" 466 | dependencies = [ 467 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 468 | "net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", 469 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 470 | "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 471 | ] 472 | 473 | [[package]] 474 | name = "native-tls" 475 | version = "0.1.5" 476 | source = "registry+https://github.com/rust-lang/crates.io-index" 477 | dependencies = [ 478 | "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 479 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 480 | "openssl 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)", 481 | "schannel 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", 482 | "security-framework 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", 483 | "security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", 484 | "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 485 | ] 486 | 487 | [[package]] 488 | name = "net2" 489 | version = "0.2.32" 490 | source = "registry+https://github.com/rust-lang/crates.io-index" 491 | dependencies = [ 492 | "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 493 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 494 | "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 495 | ] 496 | 497 | [[package]] 498 | name = "nodrop" 499 | version = "0.1.12" 500 | source = "registry+https://github.com/rust-lang/crates.io-index" 501 | 502 | [[package]] 503 | name = "num-integer" 504 | version = "0.1.36" 505 | source = "registry+https://github.com/rust-lang/crates.io-index" 506 | dependencies = [ 507 | "num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 508 | ] 509 | 510 | [[package]] 511 | name = "num-traits" 512 | version = "0.1.43" 513 | source = "registry+https://github.com/rust-lang/crates.io-index" 514 | dependencies = [ 515 | "num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 516 | ] 517 | 518 | [[package]] 519 | name = "num-traits" 520 | version = "0.2.2" 521 | source = "registry+https://github.com/rust-lang/crates.io-index" 522 | 523 | [[package]] 524 | name = "num_cpus" 525 | version = "1.8.0" 526 | source = "registry+https://github.com/rust-lang/crates.io-index" 527 | dependencies = [ 528 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 529 | ] 530 | 531 | [[package]] 532 | name = "objc" 533 | version = "0.2.2" 534 | source = "registry+https://github.com/rust-lang/crates.io-index" 535 | dependencies = [ 536 | "malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 537 | "objc_exception 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 538 | ] 539 | 540 | [[package]] 541 | name = "objc-foundation" 542 | version = "0.1.1" 543 | source = "registry+https://github.com/rust-lang/crates.io-index" 544 | dependencies = [ 545 | "block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 546 | "objc 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 547 | "objc_id 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 548 | ] 549 | 550 | [[package]] 551 | name = "objc_exception" 552 | version = "0.1.1" 553 | source = "registry+https://github.com/rust-lang/crates.io-index" 554 | dependencies = [ 555 | "gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)", 556 | ] 557 | 558 | [[package]] 559 | name = "objc_id" 560 | version = "0.1.0" 561 | source = "registry+https://github.com/rust-lang/crates.io-index" 562 | dependencies = [ 563 | "objc 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 564 | ] 565 | 566 | [[package]] 567 | name = "open" 568 | version = "1.2.1" 569 | source = "registry+https://github.com/rust-lang/crates.io-index" 570 | 571 | [[package]] 572 | name = "openssl" 573 | version = "0.9.24" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | dependencies = [ 576 | "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", 577 | "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 578 | "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 579 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 580 | "openssl-sys 0.9.27 (registry+https://github.com/rust-lang/crates.io-index)", 581 | ] 582 | 583 | [[package]] 584 | name = "openssl-sys" 585 | version = "0.9.27" 586 | source = "registry+https://github.com/rust-lang/crates.io-index" 587 | dependencies = [ 588 | "cc 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", 589 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 590 | "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", 591 | "vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 592 | ] 593 | 594 | [[package]] 595 | name = "ordered-float" 596 | version = "0.5.0" 597 | source = "registry+https://github.com/rust-lang/crates.io-index" 598 | dependencies = [ 599 | "num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", 600 | "unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 601 | ] 602 | 603 | [[package]] 604 | name = "percent-encoding" 605 | version = "1.0.1" 606 | source = "registry+https://github.com/rust-lang/crates.io-index" 607 | 608 | [[package]] 609 | name = "pkg-config" 610 | version = "0.3.9" 611 | source = "registry+https://github.com/rust-lang/crates.io-index" 612 | 613 | [[package]] 614 | name = "proc-macro2" 615 | version = "0.3.1" 616 | source = "registry+https://github.com/rust-lang/crates.io-index" 617 | dependencies = [ 618 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 619 | ] 620 | 621 | [[package]] 622 | name = "quick-error" 623 | version = "1.2.1" 624 | source = "registry+https://github.com/rust-lang/crates.io-index" 625 | 626 | [[package]] 627 | name = "quote" 628 | version = "0.5.1" 629 | source = "registry+https://github.com/rust-lang/crates.io-index" 630 | dependencies = [ 631 | "proc-macro2 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 632 | ] 633 | 634 | [[package]] 635 | name = "rand" 636 | version = "0.3.22" 637 | source = "registry+https://github.com/rust-lang/crates.io-index" 638 | dependencies = [ 639 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 640 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 641 | "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 642 | ] 643 | 644 | [[package]] 645 | name = "rand" 646 | version = "0.4.2" 647 | source = "registry+https://github.com/rust-lang/crates.io-index" 648 | dependencies = [ 649 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 650 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 651 | "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 652 | ] 653 | 654 | [[package]] 655 | name = "redox_syscall" 656 | version = "0.1.37" 657 | source = "registry+https://github.com/rust-lang/crates.io-index" 658 | 659 | [[package]] 660 | name = "relay" 661 | version = "0.1.1" 662 | source = "registry+https://github.com/rust-lang/crates.io-index" 663 | dependencies = [ 664 | "futures 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", 665 | ] 666 | 667 | [[package]] 668 | name = "remove_dir_all" 669 | version = "0.5.0" 670 | source = "registry+https://github.com/rust-lang/crates.io-index" 671 | dependencies = [ 672 | "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 673 | ] 674 | 675 | [[package]] 676 | name = "rubrail" 677 | version = "0.7.0" 678 | source = "registry+https://github.com/rust-lang/crates.io-index" 679 | dependencies = [ 680 | "cocoa 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", 681 | "fruitbasket 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 682 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 683 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 684 | "log4rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 685 | "objc 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 686 | "objc-foundation 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 687 | "objc_id 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 688 | ] 689 | 690 | [[package]] 691 | name = "safemem" 692 | version = "0.2.0" 693 | source = "registry+https://github.com/rust-lang/crates.io-index" 694 | 695 | [[package]] 696 | name = "schannel" 697 | version = "0.1.11" 698 | source = "registry+https://github.com/rust-lang/crates.io-index" 699 | dependencies = [ 700 | "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 701 | "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 702 | ] 703 | 704 | [[package]] 705 | name = "scoped-tls" 706 | version = "0.1.1" 707 | source = "registry+https://github.com/rust-lang/crates.io-index" 708 | 709 | [[package]] 710 | name = "scopeguard" 711 | version = "0.3.3" 712 | source = "registry+https://github.com/rust-lang/crates.io-index" 713 | 714 | [[package]] 715 | name = "security-framework" 716 | version = "0.1.16" 717 | source = "registry+https://github.com/rust-lang/crates.io-index" 718 | dependencies = [ 719 | "core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 720 | "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 721 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 722 | "security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", 723 | ] 724 | 725 | [[package]] 726 | name = "security-framework-sys" 727 | version = "0.1.16" 728 | source = "registry+https://github.com/rust-lang/crates.io-index" 729 | dependencies = [ 730 | "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 731 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 732 | ] 733 | 734 | [[package]] 735 | name = "serde" 736 | version = "1.0.37" 737 | source = "registry+https://github.com/rust-lang/crates.io-index" 738 | 739 | [[package]] 740 | name = "serde-value" 741 | version = "0.5.2" 742 | source = "registry+https://github.com/rust-lang/crates.io-index" 743 | dependencies = [ 744 | "ordered-float 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 745 | "serde 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", 746 | ] 747 | 748 | [[package]] 749 | name = "serde_derive" 750 | version = "1.0.37" 751 | source = "registry+https://github.com/rust-lang/crates.io-index" 752 | dependencies = [ 753 | "proc-macro2 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 754 | "quote 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 755 | "serde_derive_internals 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)", 756 | "syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", 757 | ] 758 | 759 | [[package]] 760 | name = "serde_derive_internals" 761 | version = "0.23.0" 762 | source = "registry+https://github.com/rust-lang/crates.io-index" 763 | dependencies = [ 764 | "proc-macro2 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 765 | "syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", 766 | ] 767 | 768 | [[package]] 769 | name = "serde_json" 770 | version = "1.0.13" 771 | source = "registry+https://github.com/rust-lang/crates.io-index" 772 | dependencies = [ 773 | "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 774 | "itoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 775 | "num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 776 | "serde 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", 777 | ] 778 | 779 | [[package]] 780 | name = "serde_yaml" 781 | version = "0.7.3" 782 | source = "registry+https://github.com/rust-lang/crates.io-index" 783 | dependencies = [ 784 | "linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 785 | "num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", 786 | "serde 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", 787 | "yaml-rust 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 788 | ] 789 | 790 | [[package]] 791 | name = "slab" 792 | version = "0.3.0" 793 | source = "registry+https://github.com/rust-lang/crates.io-index" 794 | 795 | [[package]] 796 | name = "slab" 797 | version = "0.4.0" 798 | source = "registry+https://github.com/rust-lang/crates.io-index" 799 | 800 | [[package]] 801 | name = "smallvec" 802 | version = "0.2.1" 803 | source = "registry+https://github.com/rust-lang/crates.io-index" 804 | 805 | [[package]] 806 | name = "syn" 807 | version = "0.13.1" 808 | source = "registry+https://github.com/rust-lang/crates.io-index" 809 | dependencies = [ 810 | "proc-macro2 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 811 | "quote 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 812 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 813 | ] 814 | 815 | [[package]] 816 | name = "take" 817 | version = "0.1.0" 818 | source = "registry+https://github.com/rust-lang/crates.io-index" 819 | 820 | [[package]] 821 | name = "tempdir" 822 | version = "0.3.7" 823 | source = "registry+https://github.com/rust-lang/crates.io-index" 824 | dependencies = [ 825 | "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 826 | "remove_dir_all 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 827 | ] 828 | 829 | [[package]] 830 | name = "time" 831 | version = "0.1.39" 832 | source = "registry+https://github.com/rust-lang/crates.io-index" 833 | dependencies = [ 834 | "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", 835 | "redox_syscall 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", 836 | "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 837 | ] 838 | 839 | [[package]] 840 | name = "tokio" 841 | version = "0.1.5" 842 | source = "registry+https://github.com/rust-lang/crates.io-index" 843 | dependencies = [ 844 | "futures 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", 845 | "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", 846 | "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 847 | "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 848 | "tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 849 | "tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 850 | "tokio-threadpool 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 851 | "tokio-timer 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 852 | "tokio-udp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 853 | ] 854 | 855 | [[package]] 856 | name = "tokio-core" 857 | version = "0.1.16" 858 | source = "registry+https://github.com/rust-lang/crates.io-index" 859 | dependencies = [ 860 | "bytes 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 861 | "futures 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", 862 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 863 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 864 | "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", 865 | "scoped-tls 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 866 | "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 867 | "tokio 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 868 | "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 869 | "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 870 | "tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 871 | ] 872 | 873 | [[package]] 874 | name = "tokio-executor" 875 | version = "0.1.2" 876 | source = "registry+https://github.com/rust-lang/crates.io-index" 877 | dependencies = [ 878 | "futures 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", 879 | ] 880 | 881 | [[package]] 882 | name = "tokio-io" 883 | version = "0.1.6" 884 | source = "registry+https://github.com/rust-lang/crates.io-index" 885 | dependencies = [ 886 | "bytes 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 887 | "futures 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", 888 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 889 | ] 890 | 891 | [[package]] 892 | name = "tokio-proto" 893 | version = "0.1.1" 894 | source = "registry+https://github.com/rust-lang/crates.io-index" 895 | dependencies = [ 896 | "futures 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", 897 | "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", 898 | "net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", 899 | "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", 900 | "slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 901 | "smallvec 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 902 | "take 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 903 | "tokio-core 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", 904 | "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 905 | "tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 906 | ] 907 | 908 | [[package]] 909 | name = "tokio-reactor" 910 | version = "0.1.1" 911 | source = "registry+https://github.com/rust-lang/crates.io-index" 912 | dependencies = [ 913 | "futures 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", 914 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 915 | "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", 916 | "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 917 | "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 918 | "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 919 | ] 920 | 921 | [[package]] 922 | name = "tokio-service" 923 | version = "0.1.0" 924 | source = "registry+https://github.com/rust-lang/crates.io-index" 925 | dependencies = [ 926 | "futures 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", 927 | ] 928 | 929 | [[package]] 930 | name = "tokio-tcp" 931 | version = "0.1.0" 932 | source = "registry+https://github.com/rust-lang/crates.io-index" 933 | dependencies = [ 934 | "bytes 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 935 | "futures 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", 936 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 937 | "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", 938 | "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 939 | "tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 940 | ] 941 | 942 | [[package]] 943 | name = "tokio-threadpool" 944 | version = "0.1.2" 945 | source = "registry+https://github.com/rust-lang/crates.io-index" 946 | dependencies = [ 947 | "crossbeam-deque 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 948 | "futures 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", 949 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 950 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 951 | "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 952 | "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 953 | ] 954 | 955 | [[package]] 956 | name = "tokio-timer" 957 | version = "0.2.0" 958 | source = "registry+https://github.com/rust-lang/crates.io-index" 959 | dependencies = [ 960 | "futures 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", 961 | "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 962 | ] 963 | 964 | [[package]] 965 | name = "tokio-tls" 966 | version = "0.1.4" 967 | source = "registry+https://github.com/rust-lang/crates.io-index" 968 | dependencies = [ 969 | "futures 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", 970 | "native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 971 | "tokio-core 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", 972 | "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 973 | ] 974 | 975 | [[package]] 976 | name = "tokio-udp" 977 | version = "0.1.0" 978 | source = "registry+https://github.com/rust-lang/crates.io-index" 979 | dependencies = [ 980 | "bytes 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 981 | "futures 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)", 982 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 983 | "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", 984 | "tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 985 | "tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 986 | ] 987 | 988 | [[package]] 989 | name = "toucHNews" 990 | version = "0.4.1-rc" 991 | dependencies = [ 992 | "fruitbasket 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 993 | "hn 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 994 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 995 | "open 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 996 | "rubrail 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 997 | ] 998 | 999 | [[package]] 1000 | name = "traitobject" 1001 | version = "0.1.0" 1002 | source = "registry+https://github.com/rust-lang/crates.io-index" 1003 | 1004 | [[package]] 1005 | name = "typemap" 1006 | version = "0.3.3" 1007 | source = "registry+https://github.com/rust-lang/crates.io-index" 1008 | dependencies = [ 1009 | "unsafe-any 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1010 | ] 1011 | 1012 | [[package]] 1013 | name = "unicase" 1014 | version = "2.1.0" 1015 | source = "registry+https://github.com/rust-lang/crates.io-index" 1016 | dependencies = [ 1017 | "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1018 | ] 1019 | 1020 | [[package]] 1021 | name = "unicode-xid" 1022 | version = "0.1.0" 1023 | source = "registry+https://github.com/rust-lang/crates.io-index" 1024 | 1025 | [[package]] 1026 | name = "unreachable" 1027 | version = "0.1.1" 1028 | source = "registry+https://github.com/rust-lang/crates.io-index" 1029 | dependencies = [ 1030 | "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1031 | ] 1032 | 1033 | [[package]] 1034 | name = "unsafe-any" 1035 | version = "0.4.2" 1036 | source = "registry+https://github.com/rust-lang/crates.io-index" 1037 | dependencies = [ 1038 | "traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1039 | ] 1040 | 1041 | [[package]] 1042 | name = "vcpkg" 1043 | version = "0.2.2" 1044 | source = "registry+https://github.com/rust-lang/crates.io-index" 1045 | 1046 | [[package]] 1047 | name = "version_check" 1048 | version = "0.1.3" 1049 | source = "registry+https://github.com/rust-lang/crates.io-index" 1050 | 1051 | [[package]] 1052 | name = "void" 1053 | version = "1.0.2" 1054 | source = "registry+https://github.com/rust-lang/crates.io-index" 1055 | 1056 | [[package]] 1057 | name = "winapi" 1058 | version = "0.2.8" 1059 | source = "registry+https://github.com/rust-lang/crates.io-index" 1060 | 1061 | [[package]] 1062 | name = "winapi" 1063 | version = "0.3.4" 1064 | source = "registry+https://github.com/rust-lang/crates.io-index" 1065 | dependencies = [ 1066 | "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1067 | "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1068 | ] 1069 | 1070 | [[package]] 1071 | name = "winapi-build" 1072 | version = "0.1.1" 1073 | source = "registry+https://github.com/rust-lang/crates.io-index" 1074 | 1075 | [[package]] 1076 | name = "winapi-i686-pc-windows-gnu" 1077 | version = "0.4.0" 1078 | source = "registry+https://github.com/rust-lang/crates.io-index" 1079 | 1080 | [[package]] 1081 | name = "winapi-x86_64-pc-windows-gnu" 1082 | version = "0.4.0" 1083 | source = "registry+https://github.com/rust-lang/crates.io-index" 1084 | 1085 | [[package]] 1086 | name = "ws2_32-sys" 1087 | version = "0.2.1" 1088 | source = "registry+https://github.com/rust-lang/crates.io-index" 1089 | dependencies = [ 1090 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1091 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1092 | ] 1093 | 1094 | [[package]] 1095 | name = "yaml-rust" 1096 | version = "0.4.0" 1097 | source = "registry+https://github.com/rust-lang/crates.io-index" 1098 | dependencies = [ 1099 | "linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1100 | ] 1101 | 1102 | [metadata] 1103 | "checksum antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34fde25430d87a9388dadbe6e34d7f72a462c8b43ac8d309b42b0a8505d7e2a5" 1104 | "checksum arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e964f9e24d588183fcb43503abda40d288c8657dfc27311516ce2f05675aef" 1105 | "checksum base64 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "229d032f1a99302697f10b27167ae6d03d49d032e6a8e2550e8d3fc13356d2b4" 1106 | "checksum bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5" 1107 | "checksum bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c30d3802dfb7281680d6285f2ccdaa8c2d8fee41f93805dba5c4cf50dc23cf" 1108 | "checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 1109 | "checksum byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "73b5bdfe7ee3ad0b99c9801d58807a9dbc9e09196365b0203853b99889ab3c87" 1110 | "checksum bytes 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1b7db437d718977f6dc9b2e3fd6fc343c02ac6b899b73fdd2179163447bd9ce9" 1111 | "checksum cc 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)" = "2b4911e4bdcb4100c7680e7e854ff38e23f1b34d4d9e079efae3da2801341ffc" 1112 | "checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de" 1113 | "checksum chrono 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ba5f60682a4c264e7f8d77b82e7788938a76befdf949d4a98026d19099c9d873" 1114 | "checksum cocoa 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b0c23085dde1ef4429df6e5896b89356d35cdd321fb43afe3e378d010bb5adc6" 1115 | "checksum core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "25bfd746d203017f7d5cbd31ee5d8e17f94b6521c7af77ece6c9e4b2d4b16c67" 1116 | "checksum core-foundation 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "286e0b41c3a20da26536c6000a280585d519fd07b3956b43aed8a79e9edce980" 1117 | "checksum core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "065a5d7ffdcbc8fa145d6f0746f3555025b9097a9e9cda59f7467abae670c78d" 1118 | "checksum core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "716c271e8613ace48344f723b60b900a93150271e5be206212d052bbc0883efa" 1119 | "checksum core-graphics 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fb0ed45fdc32f9ab426238fba9407dfead7bacd7900c9b4dd3f396f46eafdae3" 1120 | "checksum crossbeam 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "24ce9782d4d5c53674646a6a4c1863a21a8fc0cb649b3c94dfc16e45071dea19" 1121 | "checksum crossbeam-deque 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c1bdc73742c36f7f35ebcda81dbb33a7e0d33757d03a06d9ddca762712ec5ea2" 1122 | "checksum crossbeam-epoch 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9b4e2817eb773f770dcb294127c011e22771899c21d18fce7dd739c0b9832e81" 1123 | "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" 1124 | "checksum crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d636a8b3bcc1b409d7ffd3facef8f21dcb4009626adbd0c5e6c4305c07253c7b" 1125 | "checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab" 1126 | "checksum flate2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9fac2277e84e5e858483756647a9d0aa8d9a2b7cba517fd84325a0aaa69a0909" 1127 | "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" 1128 | "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 1129 | "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 1130 | "checksum fruitbasket 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "97a838280303abdfd0ec5d42aa934565daac8037e724ff7d728672f038921025" 1131 | "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" 1132 | "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" 1133 | "checksum futures 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)" = "0c5a3176836efa0b37f0e321b86672dfada1564aeb516fbed67b7c24050a0263" 1134 | "checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" 1135 | "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" 1136 | "checksum hn 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1b46eca3c3fc4436f29ed07e986a5f9646badca01cef948c91721237a425f686" 1137 | "checksum httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c2f407128745b78abc95c0ffbe4e5d37427fdc0d45470710cfef8c44522a2e37" 1138 | "checksum humantime 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0484fda3e7007f2a4a0d9c3a703ca38c71c54c55602ce4660c419fd32e188c9e" 1139 | "checksum hyper 0.11.24 (registry+https://github.com/rust-lang/crates.io-index)" = "df4dd5dae401458087396b6db7fabc4d6760aa456a5fa8e92bda549f39cae661" 1140 | "checksum hyper-tls 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a5aa51f6ae9842239b0fac14af5f22123b8432b4cc774a44ff059fcba0f675ca" 1141 | "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" 1142 | "checksum itoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c069bbec61e1ca5a596166e55dfe4773ff745c3d16b700013bcaff9a6df2c682" 1143 | "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 1144 | "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" 1145 | "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" 1146 | "checksum lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c8f31047daa365f19be14b47c29df4f7c3b581832407daabe6ae77397619237d" 1147 | "checksum lazycell 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a6f08839bc70ef4a3fe1d566d5350f519c5912ea86be0df1740a7d247c7fc0ef" 1148 | "checksum libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)" = "6fd41f331ac7c5b8ac259b8bf82c75c0fb2e469bbf37d2becbba9a6a2221965b" 1149 | "checksum linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "70fb39025bc7cdd76305867c4eccf2f2dcf6e9a57f5b21a93e1c2d86cd03ec9e" 1150 | "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" 1151 | "checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2" 1152 | "checksum log-mdc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a94d21414c1f4a51209ad204c1776a3d0765002c76c6abcb602a6f09f1e881c7" 1153 | "checksum log4rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a1f16090a553200fba94e104310b3e53e71f500fd9db7dc2143055aa3cc7ae63" 1154 | "checksum malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 1155 | "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" 1156 | "checksum mime 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e2e00e17be181010a91dbfefb01660b17311059dc8c7f48b9017677721e732bd" 1157 | "checksum miniz-sys 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "609ce024854aeb19a0ef7567d348aaa5a746b32fb72e336df7fcc16869d7e2b4" 1158 | "checksum mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)" = "6d771e3ef92d58a8da8df7d6976bfca9371ed1de6619d9d5a5ce5b1f29b85bfe" 1159 | "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" 1160 | "checksum native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f74dbadc8b43df7864539cedb7bc91345e532fdd913cfdc23ad94f4d2d40fbc0" 1161 | "checksum net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)" = "9044faf1413a1057267be51b5afba8eb1090bd2231c693664aa1db716fe1eae0" 1162 | "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" 1163 | "checksum num-integer 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "f8d26da319fb45674985c78f1d1caf99aa4941f785d384a2ae36d0740bc3e2fe" 1164 | "checksum num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" 1165 | "checksum num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dee092fcdf725aee04dd7da1d21debff559237d49ef1cb3e69bcb8ece44c7364" 1166 | "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30" 1167 | "checksum objc 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "877f30f37acef6749b1841cceab289707f211aecfc756553cd63976190e6cc2e" 1168 | "checksum objc-foundation 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" 1169 | "checksum objc_exception 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "098cd29a2fa3c230d3463ae069cecccc3fdfd64c0d2496ab5b96f82dab6a00dc" 1170 | "checksum objc_id 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e4730aa1c64d722db45f7ccc4113a3e2c465d018de6db4d3e7dfe031e8c8a297" 1171 | "checksum open 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c281318d992e4432cfa799969467003d05921582a7489a8325e37f8a450d5113" 1172 | "checksum openssl 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)" = "a3605c298474a3aa69de92d21139fb5e2a81688d308262359d85cdd0d12a7985" 1173 | "checksum openssl-sys 0.9.27 (registry+https://github.com/rust-lang/crates.io-index)" = "d6fdc5c4a02e69ce65046f1763a0181107038e02176233acb0b3351d7cc588f9" 1174 | "checksum ordered-float 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "58d25b6c0e47b20d05226d288ff434940296e7e2f8b877975da32f862152241f" 1175 | "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" 1176 | "checksum pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "3a8b4c6b8165cd1a1cd4b9b120978131389f64bdaf456435caa41e630edba903" 1177 | "checksum proc-macro2 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "388d7ea47318c5ccdeb9ba6312cee7d3f65dd2804be8580a170fce410d50b786" 1178 | "checksum quick-error 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eda5fe9b71976e62bc81b781206aaa076401769b2143379d3eb2118388babac4" 1179 | "checksum quote 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7b0ff51282f28dc1b53fd154298feaa2e77c5ea0dba68e1fd8b03b72fbe13d2a" 1180 | "checksum rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "15a732abf9d20f0ad8eeb6f909bf6868722d9a06e1e50802b6a70351f40b4eb1" 1181 | "checksum rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eba5f8cb59cc50ed56be8880a5c7b496bfd9bd26394e176bc67884094145c2c5" 1182 | "checksum redox_syscall 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "0d92eecebad22b767915e4d529f89f28ee96dbbf5a4810d2b844373f136417fd" 1183 | "checksum relay 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1576e382688d7e9deecea24417e350d3062d97e32e45d70b1cde65994ff1489a" 1184 | "checksum remove_dir_all 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dfc5b3ce5d5ea144bb04ebd093a9e14e9765bcfec866aecda9b6dec43b3d1e24" 1185 | "checksum rubrail 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fdbab75a7ce7497d446bc79541a94b07545c9e7625ba34d8dd94783f84a09dd1" 1186 | "checksum safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e27a8b19b835f7aea908818e871f5cc3a5a186550c30773be987e155e8163d8f" 1187 | "checksum schannel 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "fbaffce35eb61c5b00846e73128b0cd62717e7c0ec46abbec132370d013975b4" 1188 | "checksum scoped-tls 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8674d439c964889e2476f474a3bf198cc9e199e77499960893bac5de7e9218a4" 1189 | "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" 1190 | "checksum security-framework 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "dfa44ee9c54ce5eecc9de7d5acbad112ee58755239381f687e564004ba4a2332" 1191 | "checksum security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "5421621e836278a0b139268f36eee0dc7e389b784dc3f79d8f11aabadf41bead" 1192 | "checksum serde 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "d3bcee660dcde8f52c3765dd9ca5ee36b4bf35470a738eb0bd5a8752b0389645" 1193 | "checksum serde-value 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "52903ade2290cbd61a0937a66a268f26cebf246e3ddd7964a8babb297111fb0d" 1194 | "checksum serde_derive 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "f1711ab8b208541fa8de00425f6a577d90f27bb60724d2bb5fd911314af9668f" 1195 | "checksum serde_derive_internals 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)" = "89b340a48245bc03ddba31d0ff1709c118df90edc6adabaca4aac77aea181cce" 1196 | "checksum serde_json 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)" = "5c508584d9913df116b91505eec55610a2f5b16e9ed793c46e4d0152872b3e74" 1197 | "checksum serde_yaml 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e0f868d400d9d13d00988da49f7f02aeac6ef00f11901a8c535bd59d777b9e19" 1198 | "checksum slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23" 1199 | "checksum slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fdeff4cd9ecff59ec7e3744cbca73dfe5ac35c2aedb2cfba8a1c715a18912e9d" 1200 | "checksum smallvec 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4c8cbcd6df1e117c2210e13ab5109635ad68a929fcbb8964dc965b76cb5ee013" 1201 | "checksum syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "91b52877572087400e83d24b9178488541e3d535259e04ff17a63df1e5ceff59" 1202 | "checksum take 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b157868d8ac1f56b64604539990685fa7611d8fa9e5476cf0c02cf34d32917c5" 1203 | "checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" 1204 | "checksum time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "a15375f1df02096fb3317256ce2cee6a1f42fc84ea5ad5fc8c421cfe40c73098" 1205 | "checksum tokio 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "be15ef40f675c9fe66e354d74c73f3ed012ca1aa14d65846a33ee48f1ae8d922" 1206 | "checksum tokio-core 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "799492ccba3d8ed5e41f2520a7cfd504cb65bbfe5fbbbd0012e335ae5f188051" 1207 | "checksum tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8cac2a7883ff3567e9d66bb09100d09b33d90311feca0206c7ca034bc0c55113" 1208 | "checksum tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "6af9eb326f64b2d6b68438e1953341e00ab3cf54de7e35d92bfc73af8555313a" 1209 | "checksum tokio-proto 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fbb47ae81353c63c487030659494b295f6cb6576242f907f203473b191b0389" 1210 | "checksum tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3cedc8e5af5131dc3423ffa4f877cce78ad25259a9a62de0613735a13ebc64b" 1211 | "checksum tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162" 1212 | "checksum tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ec9b094851aadd2caf83ba3ad8e8c4ce65a42104f7b94d9e6550023f0407853f" 1213 | "checksum tokio-threadpool 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bf3d05cdd6a78005e535d2b27c21521bdf91fbb321027a62d8e178929d18966d" 1214 | "checksum tokio-timer 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "87d50912757dcf24f3614c9e6925aa72da51b5104dc2ab708e24f814f4052f85" 1215 | "checksum tokio-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "772f4b04e560117fe3b0a53e490c16ddc8ba6ec437015d91fa385564996ed913" 1216 | "checksum tokio-udp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "137bda266504893ac4774e0ec4c2108f7ccdbcb7ac8dced6305fe9e4e0b5041a" 1217 | "checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" 1218 | "checksum typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "653be63c80a3296da5551e1bfd2cca35227e13cdd08c6668903ae2f4f77aa1f6" 1219 | "checksum unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284b6d3db520d67fbe88fd778c21510d1b0ba4a551e5d0fbb023d33405f6de8a" 1220 | "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" 1221 | "checksum unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1f2ae5ddb18e1c92664717616dd9549dde73f539f01bd7b77c2edb2446bdff91" 1222 | "checksum unsafe-any 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f30360d7979f5e9c6e6cea48af192ea8fab4afb3cf72597154b8f08935bc9c7f" 1223 | "checksum vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9e0a7d8bed3178a8fb112199d466eeca9ed09a14ba8ad67718179b4fd5487d0b" 1224 | "checksum version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6b772017e347561807c1aa192438c5fd74242a670a6cffacc40f2defd1dc069d" 1225 | "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" 1226 | "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 1227 | "checksum winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "04e3bd221fcbe8a271359c04f21a76db7d0c6028862d1bb5512d85e1e2eb5bb3" 1228 | "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 1229 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1230 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1231 | "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" 1232 | "checksum yaml-rust 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "57ab38ee1a4a266ed033496cf9af1828d8d6e6c1cfa5f643a2809effcae4d628" 1233 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "toucHNews" 3 | version = "0.4.1-rc" 4 | authors = ["Trevor Bentley "] 5 | description = "Hacker News (YCombinator) news feed for the Mac Touch Bar" 6 | keywords = ["news", "hackernews", "touchbar", "mac", "osx"] 7 | homepage = "https://github.com/mrmekon/toucHNews" 8 | repository = "https://github.com/mrmekon/toucHNews" 9 | license = "Apache-2.0" 10 | 11 | [profile.release] 12 | opt-level = 3 13 | debug = false 14 | rpath = false 15 | lto = true 16 | debug-assertions = false 17 | codegen-units = 1 18 | panic = 'unwind' 19 | 20 | [dependencies] 21 | rubrail = "0.7" 22 | hn = "0.4" 23 | open = "1.2" 24 | log = {version = "0.4", optional = true } 25 | 26 | [dependencies.fruitbasket] 27 | version = "0.6" 28 | features = ["logging"] 29 | 30 | [package.metadata.release] 31 | sign-commit = false 32 | upload-doc = false 33 | pre-release-commit-message = "Release {{version}}" 34 | dev-version-ext = "rc" 35 | tag-message = "Release {{version}}" 36 | doc-commit-message = "Release {{version}}" 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # toucHNews: Hacker News news feed for the Mac Touch Bar 2 | 3 | [![OSX/Linux Build Status](https://travis-ci.org/mrmekon/toucHNews.svg?branch=master)](https://travis-ci.org/mrmekon/toucHNews) 4 | [![Crates.io Version](https://img.shields.io/crates/v/toucHNews.svg)](https://crates.io/crates/toucHNews) 5 | 6 | toucHNews is a simple, interactive Hacker News news feed for the Mac Touch Bar. 7 | 8 | It lives persistently in the "Control Strip", the small cluster of icons permanantly displayed on the right side of the Touch Bar. When its icon (cleverly labeled `hn`) is clicked, it expands to display the latest headlines from Hacker News across the Touch Bar. 9 | 10 | It is written in Rust. 11 | 12 | ## Interface 13 | 14 | One headline is shown at a time. To interact: 15 | 16 | * Single tap the headline to show the next one. 17 | * Double tap the article counter to return to the beginning. 18 | * Swipe right until the text turns blue and release to open the article in your default browser 19 | * Swipe left until the text turns orange to permanently remove the article from the bar. 20 | * Tap the 'X' in the circle on the left to minimize back into the Control Strip. 21 | * Tap the 'X' in the square on the right to quit. 22 | 23 | 24 | ## Screencast 25 | 26 | 27 | 28 | 29 | ## Installing toucHNews 30 | 31 | ### Pre-built Mac App 32 | 33 | **WARNING** Apps are not signed with a developer ID. After running for the first time, you must open the Security & Privacy tab of System Preferences and unblock toucHNews. 34 | 35 | * [toucHNews v0.4.0 - 64-bit OS X 10.12 (Sierra)](https://github.com/mrmekon/toucHNews/releases/download/toucHNews-0.4.0/toucHNews-0.4.0.zip) (MD5 Checksum: `4be4aba99e900903ed486f15df69f84b`) 36 | * [toucHNews v0.3.3 - 64-bit OS X 10.12 (Sierra)](https://github.com/mrmekon/toucHNews/releases/download/toucHNews-0.3.3/toucHNews-0.3.3.zip) (MD5 Checksum: `0cebdca33d66c2a6a982eaeec647a14f`) 37 | * [toucHNews v0.3.2 - 64-bit OS X 10.12 (Sierra)](https://github.com/mrmekon/toucHNews/releases/download/toucHNews-0.3.2/toucHNews-0.3.2.zip) (MD5 Checksum: `8b90eaab993729847308a643804e6da8`) 38 | * [toucHNews v0.3.1 - 64-bit OS X 10.12 (Sierra)](https://github.com/mrmekon/toucHNews/releases/download/toucHNews-0.3.1/toucHNews-0.3.1.zip) (MD5 Checksum: `f395e6f000e4d632c491d3c6431a51a1`) 39 | * [toucHNews v0.3.0 - 64-bit OS X 10.12 (Sierra)](https://github.com/mrmekon/toucHNews/releases/download/toucHNews-0.3.0/toucHNews.zip) (MD5 Checksum: `adb4b7611037c721c7c8a6f23ac09dd2`) 40 | * [toucHNews v0.2.1 - 64-bit OS X 10.12 (Sierra)](https://github.com/mrmekon/toucHNews/releases/download/toucHNews-0.2.1/toucHNews.zip) (MD5 Checksum: `1f3432046981443780d453757ec01ebc`) 41 | * [toucHNews v0.2.0 - 64-bit OS X 10.12 (Sierra)](https://github.com/mrmekon/toucHNews/releases/download/toucHNews-0.2.0/toucHNews.zip) (MD5 Checksum: `327fcce38801812b0d49224064f15c50`) 42 | 43 | ### GitHub 44 | 45 | ``` 46 | $ git clone https://github.com/mrmekon/toucHNews.git 47 | $ cd toucHNews 48 | $ cargo run 49 | ``` 50 | 51 | ## Requirements 52 | 53 | * A Mac with a Touch Bar, of course. Or you can use the Touch Bar simulator in XCode if you don't have one and want to test it out. 54 | * "Control Strip" enabled on the Touch Bar. The Control Strip is the always-available shortcuts on the right-hand side. It is enabled by default. If it's not enabled for you, open *System Preferences* -> *Keyboard*, and in the *Touch Bar shows* drop-down select *App Controls with Control Strip*. 55 | 56 | ## Direct Dependencies 57 | 58 | * [fruitbasket](https://github.com/mrmekon/fruitbasket) - Rust framework for Mac app lifecycle 59 | * [rubrail](https://github.com/mrmekon/rubrail-rs) - Rust Touch Bar UI library 60 | * [hn](https://github.com/mrmekon/hn-rs) - Rust Hacker News API wrapper 61 | * [open](https://github.com/Byron/open-rs) - Opens things 62 | -------------------------------------------------------------------------------- /bundle_osx.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DST="target/" 4 | APPDIR="toucHNews.app" 5 | 6 | echo "Building OS X app..." 7 | 8 | rm -rf "$DST/$APPDIR" 9 | mkdir "$DST/$APPDIR/" 10 | mkdir "$DST/$APPDIR/Contents/" 11 | mkdir "$DST/$APPDIR/Contents/Resources/" 12 | mkdir "$DST/$APPDIR/Contents/MacOS/" 13 | 14 | cp -a target/debug/toucHNews "$DST/$APPDIR/Contents/MacOS/" 15 | 16 | strip -u -r "$DST/$APPDIR/Contents/MacOS/toucHNews" 17 | 18 | cat > "$DST/$APPDIR/Contents/Info.plist" << EOF 19 | { 20 | CFBundleName = toucHNews; 21 | CFBundleDisplayName = toucHNews; 22 | CFBundleIdentifier = "com.trevorbentley.toucHNews"; 23 | CFBundleExecutable = toucHNews; 24 | CFBundleIconFile = "toucHNews.icns"; 25 | 26 | CFBundleVersion = "0.0.2"; 27 | CFBundleInfoDictionaryVersion = "6.0"; 28 | CFBundlePackageType = APPL; 29 | CFBundleSignature = xxxx; 30 | 31 | LSMinimumSystemVersion = "10.10.0"; 32 | } 33 | EOF 34 | echo "Done!" 35 | -------------------------------------------------------------------------------- /docs/screencast.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mrmekon/toucHNews/cc9d3d3669ca8f19c765159a4b5d90779cd63770/docs/screencast.gif -------------------------------------------------------------------------------- /icon/gen_iconset.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | mkdir toucHNews.iconset 3 | sips -z 16 16 hn1024.png --out toucHNews.iconset/icon_16x16.png 4 | sips -z 32 32 hn1024.png --out toucHNews.iconset/icon_16x16@2x.png 5 | sips -z 32 32 hn1024.png --out toucHNews.iconset/icon_32x32.png 6 | sips -z 64 64 hn1024.png --out toucHNews.iconset/icon_32x32@2x.png 7 | sips -z 128 128 hn1024.png --out toucHNews.iconset/icon_128x128.png 8 | sips -z 256 256 hn1024.png --out toucHNews.iconset/icon_128x128@2x.png 9 | sips -z 256 256 hn1024.png --out toucHNews.iconset/icon_256x256.png 10 | sips -z 512 512 hn1024.png --out toucHNews.iconset/icon_256x256@2x.png 11 | sips -z 512 512 hn1024.png --out toucHNews.iconset/icon_512x512.png 12 | cp hn1024.png toucHNews.iconset/icon_512x512@2x.png 13 | iconutil -c icns toucHNews.iconset 14 | rm -R toucHNews.iconset 15 | -------------------------------------------------------------------------------- /icon/hn1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mrmekon/toucHNews/cc9d3d3669ca8f19c765159a4b5d90779cd63770/icon/hn1024.png -------------------------------------------------------------------------------- /icon/toucHNews.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mrmekon/toucHNews/cc9d3d3669ca8f19c765159a4b5d90779cd63770/icon/toucHNews.icns -------------------------------------------------------------------------------- /release_osx.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | APP="toucHNews" 4 | DST="target/" 5 | APPDIR="toucHNews.app" 6 | RELEASE=`git describe --abbrev=0` 7 | 8 | echo "Building OS X app $RELEASE..." 9 | 10 | cargo run --release && pkill "$APP" 11 | 12 | (cd "$DST" && zip -r9 "$RELEASE.zip" "$APPDIR" && md5 "$RELEASE.zip" > "$RELEASE.md5") 13 | 14 | echo "Done!" 15 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #![allow(non_snake_case)] 2 | extern crate rubrail; 3 | use rubrail::Touchbar; 4 | use rubrail::TTouchbar; 5 | use rubrail::SpacerType; 6 | use rubrail::SwipeState; 7 | 8 | extern crate fruitbasket; 9 | 10 | extern crate hn; 11 | use hn::HackerNews; 12 | 13 | extern crate open; 14 | 15 | #[cfg(feature = "log")] 16 | #[macro_use] 17 | extern crate log; 18 | 19 | use std::time::Duration; 20 | use std::sync::Arc; 21 | use std::sync::RwLock; 22 | use std::sync::mpsc::channel; 23 | use std::sync::mpsc::Receiver; 24 | 25 | struct TouchbarUI { 26 | touchbar: Touchbar, 27 | hn: HackerNews, 28 | headline_label: rubrail::ItemId, 29 | idx_label: rubrail::ItemId, 30 | headline_idx: Arc>, 31 | entries: Vec, 32 | rx: Receiver, 33 | } 34 | 35 | enum Cmd { 36 | Open, 37 | Hide, 38 | } 39 | 40 | impl TouchbarUI { 41 | fn init(stopper: fruitbasket::FruitStopper) -> TouchbarUI { 42 | let (tx,rx) = channel::(); 43 | let mut touchbar = Touchbar::alloc("hn"); 44 | let hn = HackerNews::new(); 45 | 46 | let headline_label = touchbar.create_label("Loading..."); 47 | let headline_idx = Arc::new(RwLock::new(0)); 48 | unsafe { rubrail::util::set_text_color(&headline_label, 1., 1., 1., 1.0); } 49 | 50 | let cb_idx = headline_idx.clone(); 51 | touchbar.add_item_tap_gesture(&headline_label, 1, 1, Box::new(move |_| { 52 | let mut writer = cb_idx.write().unwrap(); 53 | *writer += 1; 54 | })); 55 | touchbar.add_item_swipe_gesture(&headline_label, Box::new(move |item,state,translation| { 56 | let rgba = match translation { 57 | t if t > 170. => (0.1, 0.7, 1.0, 1.0), 58 | t if t < -170. => (0.8, 0.4, 0.1, 1.0), 59 | _ => (0.9, 0.9, 0.9, 1.0), 60 | }; 61 | match state { 62 | SwipeState::Cancelled | SwipeState::Failed | SwipeState::Unknown => { 63 | unsafe { rubrail::util::set_text_color(item, 1., 1., 1., 1.); } 64 | }, 65 | SwipeState::Ended => { 66 | unsafe { rubrail::util::set_text_color(item, 1., 1., 1., 1.); } 67 | match translation { 68 | t if t > 170. => { 69 | let _ = tx.send(Cmd::Open); 70 | }, 71 | t if t < -170. => { 72 | let _ = tx.send(Cmd::Hide); 73 | }, 74 | _ => {}, 75 | } 76 | } 77 | _ => { 78 | unsafe { rubrail::util::set_text_color(item, rgba.0, rgba.1, rgba.2, rgba.3); } 79 | } 80 | } 81 | })); 82 | 83 | let idx_label = touchbar.create_label("0 / 0"); 84 | let cb_idx = headline_idx.clone(); 85 | touchbar.add_item_tap_gesture(&idx_label, 2, 1, Box::new(move |_| { 86 | let mut writer = cb_idx.write().unwrap(); 87 | *writer = 0; 88 | })); 89 | 90 | let quit_stopper = stopper.clone(); 91 | let quit_button = touchbar.create_button(None, Some("X"), Box::new(move |_| { 92 | quit_stopper.stop() 93 | })); 94 | touchbar.update_button_width(&quit_button, 30); 95 | 96 | let flexible_space = touchbar.create_spacer(SpacerType::Flexible); 97 | let root_bar = touchbar.create_bar(); 98 | 99 | touchbar.add_items_to_bar(&root_bar, vec![ 100 | headline_label, 101 | flexible_space, 102 | idx_label, 103 | quit_button, 104 | ]); 105 | touchbar.set_bar_as_root(root_bar); 106 | 107 | TouchbarUI { 108 | touchbar: touchbar, 109 | hn: hn, 110 | headline_label: headline_label, 111 | idx_label: idx_label, 112 | headline_idx: headline_idx, 113 | entries: vec![], 114 | rx: rx, 115 | } 116 | } 117 | fn update(&mut self) { 118 | self.entries = self.hn.into_iter().collect(); 119 | let len = self.entries.len(); 120 | if len == 0 { 121 | return; 122 | } 123 | let idx = *self.headline_idx.read().unwrap(); 124 | if idx >= len { 125 | let mut writer = self.headline_idx.write().unwrap(); 126 | *writer = 0; 127 | } 128 | if let Some(item) = self.entries.get(idx) { 129 | self.touchbar.update_label(&self.headline_label, &item.title()); 130 | self.touchbar.update_label_width(&self.headline_label, 570); 131 | self.touchbar.update_label(&self.idx_label, &format!("{}/{}", idx+1, len)); 132 | } 133 | } 134 | fn open(&mut self) { 135 | let idx = *self.headline_idx.read().unwrap(); 136 | if let Some(item) = self.hn.into_iter().nth(idx) { 137 | let url = item.url(); 138 | let _ = open::that(&url); 139 | } 140 | } 141 | fn hide(&mut self) { 142 | let idx = *self.headline_idx.read().unwrap(); 143 | if let Some(item) = self.hn.into_iter().nth(idx) { 144 | self.hn.hide(&item); 145 | } 146 | if self.hn.into_iter().count() == 0 { 147 | self.touchbar.update_label(&self.headline_label, ""); 148 | self.touchbar.update_label_width(&self.headline_label, 570); 149 | self.touchbar.update_label(&self.idx_label, &format!("{}/{}", 0, 0)); 150 | } 151 | } 152 | } 153 | 154 | fn main() { 155 | #[cfg(feature = "log")] 156 | fruitbasket::create_logger(".touchnews.log", fruitbasket::LogDir::Home, 5, 2).unwrap(); 157 | let icon = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR")) 158 | .join("icon").join("toucHNews.icns"); 159 | let mut nsapp = fruitbasket::Trampoline::new( 160 | "touCHnews", "toucHNews", "com.trevorbentley.toucHNews") 161 | .icon("toucHNews.icns") 162 | .version(env!("CARGO_PKG_VERSION")) 163 | .plist_key("LSBackgroundOnly", "1") 164 | .resource(icon.to_str().unwrap()) 165 | .build(fruitbasket::InstallDir::Custom("target/".to_string())).unwrap(); 166 | nsapp.set_activation_policy(fruitbasket::ActivationPolicy::Prohibited); 167 | #[cfg(feature = "log")] 168 | info!("Launched toucHNews!"); 169 | 170 | let stopper = nsapp.stopper(); 171 | let mut bar = TouchbarUI::init(stopper); 172 | 173 | loop { 174 | if let Ok(cmd) = bar.rx.recv_timeout(Duration::from_millis(100)) { 175 | match cmd { 176 | Cmd::Open => { bar.open(); }, 177 | Cmd::Hide => { bar.hide(); }, 178 | } 179 | } 180 | bar.update(); 181 | if nsapp.run(fruitbasket::RunPeriod::Once).is_err() { 182 | break; 183 | } 184 | } 185 | } 186 | --------------------------------------------------------------------------------