diff options
Diffstat (limited to 'uploadedfile/thumbfile.go')
| -rw-r--r-- | uploadedfile/thumbfile.go | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/uploadedfile/thumbfile.go b/uploadedfile/thumbfile.go new file mode 100644 index 0000000..ab38f72 --- /dev/null +++ b/uploadedfile/thumbfile.go @@ -0,0 +1,126 @@ +package uploadedfile + +import ( + "errors" + "fmt" + "os" + + "mandible/imageprocessor/gm" +) + +type ThumbFile struct { + name string + width int + height int + shape string + path string +} + +func NewThumbFile(width, height int, name, shape, path string) *ThumbFile { + return &ThumbFile{ + name, + width, + height, + shape, + path, + } +} + +func (this *ThumbFile) GetName() string { + return this.name +} + +func (this *ThumbFile) SetName(name string) { + this.name = name +} + +func (this *ThumbFile) GetHeight() int { + return this.height +} + +func (this *ThumbFile) SetHeight(h int) { + this.height = h +} + +func (this *ThumbFile) GetWidth() int { + return this.width +} + +func (this *ThumbFile) SetWidth(h int) { + this.width = h +} + +func (this *ThumbFile) GetShape() string { + return this.shape +} + +func (this *ThumbFile) SetShape(shape string) { + this.shape = shape +} + +func (this *ThumbFile) GetPath() string { + return this.path +} + +func (this *ThumbFile) SetPath(path string) error { + if _, err := os.Stat(path); os.IsNotExist(err) { + return errors.New(fmt.Sprintf("Error when creating thumbnail %s", this.GetName())) + } + + this.path = path + + return nil +} + +func (this *ThumbFile) Process(original *UploadedFile) error { + switch this.shape { + case "circle": + return this.processCircle(original) + case "thumb": + return this.processThumb(original) + case "square": + return this.processSquare(original) + + } + + return errors.New("Invalid thumb shape " + this.shape) +} + +func (this *ThumbFile) processSquare(original *UploadedFile) error { + filename, err := gm.SquareThumb(original.GetPath(), this.GetName(), this.GetWidth()) + if err != nil { + return err + } + + if err := this.SetPath(filename); err != nil { + return err + } + + return nil +} + +func (this *ThumbFile) processCircle(original *UploadedFile) error { + filename, err := gm.CircleThumb(original.GetPath(), this.GetName(), this.GetWidth()) + if err != nil { + return err + } + + if err := this.SetPath(filename); err != nil { + return err + } + + return nil +} + +func (this *ThumbFile) processThumb(original *UploadedFile) error { + filename, err := gm.Thumb(original.GetPath(), this.GetName(), this.GetWidth(), this.GetHeight()) + if err != nil { + return err + } + + if err := this.SetPath(filename); err != nil { + return err + } + + return nil +} |
