func handleStickerMessage(parent *ChatWindow, msg *prot.Message) IMessage { from := msg.GetFrom() msgType := checkMessageType(from) meta := msg.ContentMetadata stkid := meta["STKID"] stkpkgid := meta["STKPKGID"] stkver := meta["STKVER"] url := api.LINE_STICKER_URL + stkver + "/" + stkpkgid + "/PC/stickers/" + stkid + ".png" filename := path.Join(goline.TempDirPath, "sticker", stkid+".png") if checkFileNotExist(filename) { err := downloadFile(url, filename) if err != nil { goline.LoggerPrintln(err) return NewTextMessage(parent, msgType, from, "Failed to download sticker.") } } return NewImageMessage(parent, msgType, from, filename) }
func NewIMessage(parent *ChatWindow, msg *prot.Message) IMessage { contentType := msg.GetContentType() //TODO: Support content type switch contentType { case prot.ContentType_NONE: return handleTextMessage(parent, msg, msg.GetText()) case prot.ContentType_IMAGE: return handleImagePreviewMessage(parent, msg) case prot.ContentType_VIDEO: return handleImagePreviewMessage(parent, msg) case prot.ContentType_STICKER: return handleStickerMessage(parent, msg) case prot.ContentType_AUDIO: return handleTextPreviewMessage(parent, msg, "Content Type: Audio", ".mp4") case prot.ContentType_FILE: return handleTextPreviewMessage(parent, msg, "Content Type: File", "") default: return handleTextMessage(parent, msg, contentType.String()) } }
func handleTextPreviewMessage(parent *ChatWindow, msg *prot.Message, text, ext string) IMessage { from := msg.GetFrom() msgType := checkMessageType(from) label, err := gtk.LabelNew(text) if err != nil { goline.LoggerPanicln(err) } msgId := msg.GetId() meta := msg.GetContentMetadata() var url string if meta["PUBLIC"] == "TRUE" { url = meta["DOWNLOAD_URL"] } else { url = api.LINE_OBJECT_STORAGE_URL + msgId } return NewDownloadableMessage(parent, msgType, from, msgId, url, ext, label) }
func handleImagePreviewMessage(parent *ChatWindow, msg *prot.Message) IMessage { from := msg.GetFrom() msgType := checkMessageType(from) msgId := msg.GetId() preview := path.Join(goline.TempDirPath, "preview", msgId) meta := msg.GetContentMetadata() var url string if checkFileNotExist(preview) { if meta["PUBLIC"] == "TRUE" { url = meta["PREVIEW_URL"] } else { url = api.LINE_OBJECT_STORAGE_URL + msgId + "/preview" } err := downloadFile(url, preview) if err != nil { goline.LoggerPrintln(err) return NewTextMessage(parent, msgType, from, "Failed to download preview.") } } image, err := gtk.ImageNew() if err != nil { goline.LoggerPanicln(err) } image.SetFromFile(preview) if meta["PUBLIC"] == "TRUE" { url = meta["DOWNLOAD_URL"] } else { url = api.LINE_OBJECT_STORAGE_URL + msgId } return NewDownloadableMessage(parent, msgType, from, msgId, url, "", image) }
func handleTextMessage(parent *ChatWindow, msg *prot.Message, text string) IMessage { from := msg.GetFrom() msgType := checkMessageType(from) return NewTextMessage(parent, msgType, from, text) }