(ids []string)
| 52 | } |
| 53 | |
| 54 | func (node *Node) addVirtualParts(ids []string) (err error) { |
| 55 | nodes := Nodes{} |
| 56 | if _, err := dbFind(bson.M{"id": bson.M{"$in": ids}}, &nodes, "", nil); err != nil { |
| 57 | return err |
| 58 | } |
| 59 | if len(ids) != len(nodes) { |
| 60 | return errors.New("unable to load all node ids.") |
| 61 | } |
| 62 | node.File.Virtual = true |
| 63 | for _, n := range nodes { |
| 64 | if n.HasFile() && !n.HasFileLock() { |
| 65 | node.File.VirtualParts = append(node.File.VirtualParts, n.Id) |
| 66 | } else { |
| 67 | return errors.New("node %s: has no file or file is locked. All nodes in source must have available files.") |
| 68 | } |
| 69 | } |
| 70 | if reader, err := node.FileReader(); err == nil { |
| 71 | defer reader.Close() |
| 72 | md5h := md5.New() |
| 73 | n, err := io.Copy(md5h, reader) |
| 74 | if err != nil { |
| 75 | return err |
| 76 | } |
| 77 | node.File.Checksum["md5"] = fmt.Sprintf("%x", md5h.Sum(nil)) |
| 78 | node.File.Size = n |
| 79 | } else { |
| 80 | return err |
| 81 | } |
| 82 | return |
| 83 | } |
| 84 | |
| 85 | func (node *Node) addPart(n int, file *file.FormFile) (err error) { |
| 86 | if n >= node.Parts.Count && !node.Parts.VarLen { |
no test coverage detected