Class: Jabber::FileTransfer::FileSource

Inherits:
Object
  • Object
show all
Includes:
TransferSource
Defined in:
lib/xmpp4r/bytestreams/helper/filetransfer.rb

Overview

Simple implementation of TransferSource for sending simple files (supports ranged transfers)

Instance Method Summary collapse

Methods included from TransferSource

#md5

Constructor Details

#initialize(filename) ⇒ FileSource

Returns a new instance of FileSource



72
73
74
75
76
77
# File 'lib/xmpp4r/bytestreams/helper/filetransfer.rb', line 72

def initialize(filename)
  @file = File.new(filename, "rb")
  @filename = filename
  @bytes_read = 0
  @length = nil
end

Instance Method Details

#can_range?Boolean

Returns:

  • (Boolean)


120
121
122
# File 'lib/xmpp4r/bytestreams/helper/filetransfer.rb', line 120

def can_range?
  true
end

#dateObject



93
94
95
# File 'lib/xmpp4r/bytestreams/helper/filetransfer.rb', line 93

def date
  @file.mtime
end

#filenameObject



79
80
81
# File 'lib/xmpp4r/bytestreams/helper/filetransfer.rb', line 79

def filename
  File::basename @filename
end

#length=(l) ⇒ Object



116
117
118
# File 'lib/xmpp4r/bytestreams/helper/filetransfer.rb', line 116

def length=(l)
  @length = l
end

#mimeObject

Everything is 'application/octet-stream'



85
86
87
# File 'lib/xmpp4r/bytestreams/helper/filetransfer.rb', line 85

def mime
  'application/octet-stream'
end

#read(length = 512) ⇒ Object

Because it can_range?, this method implements length checking



99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/xmpp4r/bytestreams/helper/filetransfer.rb', line 99

def read(length=512)
  if @length
    return nil if @bytes_read >= @length  # Already read everything requested
    if @bytes_read + length > @length # Will we read more than requested?
      length = @length - @bytes_read  # Truncate it!
    end
  end

  buf = @file.read(length)
  @bytes_read += buf.size if buf
  buf
end

#seek(position) ⇒ Object



112
113
114
# File 'lib/xmpp4r/bytestreams/helper/filetransfer.rb', line 112

def seek(position)
  @file.seek(position)
end

#sizeObject



89
90
91
# File 'lib/xmpp4r/bytestreams/helper/filetransfer.rb', line 89

def size
  File.size @filename
end