Contact card decompress, split, merge
This commit is contained in:
@ -43,17 +43,53 @@ func (contact *ContactCard) Compress() ([]byte, error) {
|
||||
return nil, err
|
||||
}
|
||||
var b bytes.Buffer
|
||||
gz := gzip.NewWriter(&b)
|
||||
gz, err := gzip.NewWriterLevel(&b, gzip.BestCompression)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if _, err := gz.Write(out); err != nil {
|
||||
log.Fatal(err)
|
||||
return nil, err
|
||||
}
|
||||
if err := gz.Close(); err != nil {
|
||||
log.Fatal(err)
|
||||
return nil, err
|
||||
}
|
||||
fmt.Println(b.Bytes())
|
||||
return b.Bytes(), nil
|
||||
}
|
||||
|
||||
func (contact *ContactCard) Split(parts uint8) (packets [][]byte, err error) {
|
||||
data, err := contact.Compress()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return BufferSplit(data, parts)
|
||||
}
|
||||
|
||||
func NewContactCardFromCompressed(compressed []byte) (*ContactCard, error) {
|
||||
cc := &ContactCard{}
|
||||
reader := bytes.NewReader([]byte(compressed))
|
||||
gzreader, err := gzip.NewReader(reader)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
output, err := ioutil.ReadAll(gzreader)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := proto.Unmarshal(output, cc); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return cc, nil
|
||||
}
|
||||
|
||||
func NewContactCardFromSplit(packets [][]byte) (*ContactCard, error) {
|
||||
data, err := BufferMerge(packets)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return NewContactCardFromCompressed(data)
|
||||
}
|
||||
|
||||
func (contact *ContactCard) WriteCompressed(filename string) error {
|
||||
out, err := contact.Compress()
|
||||
if err != nil {
|
||||
|
Reference in New Issue
Block a user