mktorrent 0.8.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/mktorrent.rb +53 -8
  3. metadata +9 -28
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 22f0156acd8ad036cc4ca9cf7e95287c3397261d
4
+ data.tar.gz: 7600dab3997a9bda87b6ee57b60b6a1878137ca1
5
+ SHA512:
6
+ metadata.gz: 6c30391db7f9542c5fed7c46e1d917d99de6e7bce8a0d8fff6e5c2c9a41b6f62d888e5b4aaad8f119255679d1123a916daf269439f1117f9ddfe2a54269fb284
7
+ data.tar.gz: 6aec4ef17e999b554029e0c1cb994a04732527a2a222dc17d1b6a12650e1f6242ddeda61864db5cc692ab8fda51c54fad6ad93233148a75b2557081894bff745
data/lib/mktorrent.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'bencode'
2
2
  require 'digest/sha1'
3
- require 'active_support'
3
+ require 'date'
4
4
 
5
5
  # Sample usage
6
6
  #t = Torrent.new("http://your.tracker.com")
@@ -16,7 +16,7 @@ class Torrent
16
16
  # optionally initialize filename
17
17
  def initialize(tracker)
18
18
  @tracker = tracker
19
- @piecelength = 512.kilobytes
19
+ @piecelength = 512 * 1024 # 512 KB
20
20
  @files = []
21
21
  @filehashes = []
22
22
  @size = 0
@@ -24,19 +24,60 @@ class Torrent
24
24
  build_the_torrent
25
25
  end
26
26
 
27
+ def all_files
28
+ unless @files.count < 1
29
+ all_files = []
30
+ @files.each do |f|
31
+ all_files << f[:path]
32
+ end
33
+ end
34
+ all_files
35
+ end
36
+
27
37
  def count
28
38
  @files.count
29
39
  end
30
40
 
41
+ def read_pieces(files, length)
42
+ buffer = ""
43
+ files.each do |f|
44
+ puts "hashing #{f.join("/")}"
45
+ File.open(f.join("/")) do |fh|
46
+ begin
47
+ read = fh.read(length - buffer.length)
48
+ if (buffer.length + read.length) == length
49
+ yield(buffer + read)
50
+ buffer = ""
51
+ else
52
+ buffer += read
53
+ end
54
+ end until fh.eof?
55
+ end
56
+ end
57
+
58
+ yield buffer
59
+ end
60
+
31
61
  def build
32
62
  @info = { :announce => @tracker,
63
+ :'creation date' => DateTime.now.strftime("%s"),
33
64
  :info => { :name => @defaultdir,
34
65
  :'piece length' => @piecelength,
35
- :pieces => @filehashes.join,
36
66
  :files => @files
37
67
  #:private => 1,
38
68
  }
39
69
  }
70
+ @info[:info][:pieces] = ""
71
+ if @files.count > 0
72
+ i = 0
73
+ read_pieces(all_files, @piecelength) do |piece|
74
+ @info[:info][:pieces] += Digest::SHA1.digest(piece)
75
+ i += 1
76
+ if (i % 100) == 0
77
+ #print "#{(i.to_f / num_pieces * 100.0).round}%... "; $stdout.flush
78
+ end
79
+ end
80
+ end
40
81
  end
41
82
 
42
83
  def write_torrent(filename)
@@ -45,7 +86,9 @@ class Torrent
45
86
  torrentfile.write self.to_s
46
87
  #torrentfile.puts self.to_s
47
88
  end
48
- puts "Wrote #{filename}"
89
+ torrent_file = "#{`pwd`.chomp}/#{filename}"
90
+ puts "Wrote #{torrent_file}"
91
+ torrent_file
49
92
  end
50
93
 
51
94
  # Return the .torrent file as a string
@@ -61,20 +104,22 @@ class Torrent
61
104
  end
62
105
 
63
106
  if File.exists?(filepath)
64
- filesize = hash_pieces(filepath)
107
+ #filesize = hash_pieces(filepath)
65
108
  # TODO tidy the path up...
66
- @files << { path: filepath.split('/'), length: filesize }
109
+ @files << { path: filepath.split('/'), length: File::open(filepath, "rb").size }
67
110
  else
68
111
  raise IOError, "Couldn't access #{filepath}"
69
112
  end
70
113
  end
71
114
 
72
- def hash_pieces(file)
115
+ # Need to read the files in @piecelength chunks and hash against that
116
+ def hash_pieces(files)
73
117
  offset = 0
74
118
  f = File::open(file, "rb")
75
119
  @size += f.size
76
120
  while offset < f.size do
77
- @filehashes << Digest::SHA1.digest(IO::binread(f, offset, @piecelength))
121
+ # This is wrong :(
122
+ #@filehashes << Digest::SHA1.digest(IO::binread(f, offset, @piecelength))
78
123
  offset += @piecelength
79
124
  STDOUT.write "\r#{File.basename(file)}: hashed #{(offset.to_f / f.size.to_f)*100}%"
80
125
  STDOUT.flush
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mktorrent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
5
- prerelease:
4
+ version: 1.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Timothy Mukaibo
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-06 00:00:00.000000000 Z
11
+ date: 2013-04-21 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bencode
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - '='
20
18
  - !ruby/object:Gem::Version
@@ -22,28 +20,12 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - '='
28
25
  - !ruby/object:Gem::Version
29
26
  version: 0.7.0
30
- - !ruby/object:Gem::Dependency
31
- name: activesupport
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: 3.0.0
38
- type: :runtime
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: 3.0.0
46
- description: Create .torrent files easily with this gem
27
+ description: Create .torrent files easily with this gem. The code is ugly, but it
28
+ works :)
47
29
  email: timothy@mukaibo.com
48
30
  executables: []
49
31
  extensions: []
@@ -53,27 +35,26 @@ files:
53
35
  - test/mktorrent_test.rb
54
36
  homepage: https://github.com/mukaibot/mktorrent
55
37
  licenses: []
38
+ metadata: {}
56
39
  post_install_message:
57
40
  rdoc_options: []
58
41
  require_paths:
59
42
  - lib
60
43
  required_ruby_version: !ruby/object:Gem::Requirement
61
- none: false
62
44
  requirements:
63
- - - ! '>='
45
+ - - '>='
64
46
  - !ruby/object:Gem::Version
65
47
  version: '0'
66
48
  required_rubygems_version: !ruby/object:Gem::Requirement
67
- none: false
68
49
  requirements:
69
- - - ! '>='
50
+ - - '>='
70
51
  - !ruby/object:Gem::Version
71
52
  version: '0'
72
53
  requirements: []
73
54
  rubyforge_project:
74
- rubygems_version: 1.8.23
55
+ rubygems_version: 2.0.0.rc.2
75
56
  signing_key:
76
- specification_version: 3
57
+ specification_version: 4
77
58
  summary: Create .torrent files easily with this gem
78
59
  test_files:
79
60
  - test/mktorrent_test.rb