add untracked files, whoops
parent
d9193d7fe4
commit
8e76d8277e
@ -0,0 +1,41 @@
|
||||
'use strict'
|
||||
const React = require('react')
|
||||
const ReactDOM = require('react-dom')
|
||||
const create = require('create-react-class')
|
||||
const Promise = require('bluebird')
|
||||
const defaultValue = require('default-value')
|
||||
|
||||
const mediaLib = require('../../lib/media.js')
|
||||
|
||||
const Text = require('./text.js')
|
||||
|
||||
let Event = create({
|
||||
displayName: "m.video",
|
||||
|
||||
getInitialState: function() {
|
||||
let event = this.props.event
|
||||
if (event.content.url == undefined) {
|
||||
return null
|
||||
}
|
||||
return mediaLib.parseEvent(this.props.client, event, 1000, 1000)
|
||||
},
|
||||
|
||||
render: function() {
|
||||
let event = this.props.event
|
||||
|
||||
if (this.state == null) {
|
||||
return "malformed video event: " + event.content.body
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="body">
|
||||
<video controls poster={this.state.thumb} style={{maxHeight: this.state.size.h, maxWidth: this.state.size.w}}>
|
||||
<source src={this.state.full}></source>
|
||||
</video>
|
||||
{/*<Text body={event.body} nested={true}/>*/}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
})
|
||||
|
||||
module.exports = Event;
|
@ -0,0 +1,56 @@
|
||||
// should be able to handle images, stickers, and video
|
||||
|
||||
module.exports = {
|
||||
parseEvent: function(client, event, maxHeight, maxWidth) {
|
||||
if (event.content.msgtype == "m.image") {
|
||||
let h = maxHeight
|
||||
let w = maxWidth
|
||||
|
||||
let media_url = client.mxcUrlToHttp(event.content.url)
|
||||
let thumb_url = event.content.url
|
||||
|
||||
if (event.content.info != null) {
|
||||
if (event.content.info.thumbnail_url != null) {
|
||||
thumb_url = event.content.info.thumbnail_url
|
||||
}
|
||||
|
||||
if (event.content.info.thumbnail_info != null) {
|
||||
h = (event.content.info.thumbnail_info.h < maxHeight) ? event.content.info.thumbnail_info.h : h
|
||||
w = (event.content.info.thumbnail_info.w < maxWidth) ? event.content.info.thumbnail_info.w : w
|
||||
} else {
|
||||
h = (event.content.info.h < maxHeight) ? event.content.info.h : h
|
||||
w = (event.content.info.w < maxWidth) ? event.content.info.w : w
|
||||
}
|
||||
}
|
||||
|
||||
thumb_url = client.mxcUrlToHttp(thumb_url, w, h, 'scale', false)
|
||||
|
||||
return {
|
||||
full: media_url,
|
||||
thumb: thumb_url,
|
||||
size: {h, w}
|
||||
}
|
||||
}
|
||||
if (event.content.msgtype == "m.video") {
|
||||
let thumb = null
|
||||
let h = maxHeight
|
||||
let w = maxWidth
|
||||
|
||||
if (event.content.info != null) {
|
||||
if (event.content.info.thumbnail_url != null) {
|
||||
if (event.content.info.thumbnail_info != null) {
|
||||
h = (event.content.info.thumbnail_info.h < maxHeight) ? event.content.info.thumbnail_info.h : h
|
||||
w = (event.content.info.thumbnail_info.w < maxWidth) ? event.content.info.thumbnail_info.w : w
|
||||
}
|
||||
|
||||
thumb = client.mxcUrlToHttp(event.content.thumbnail, w, h, 'scale', false)
|
||||
}
|
||||
}
|
||||
return {
|
||||
full: client.mxcUrlToHttp(event.content.url),
|
||||
thumb: thumb,
|
||||
size: {h, w}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
<?xml version="1.0" ?><svg height="48" viewBox="0 0 48 48" width="48" xmlns="http://www.w3.org/2000/svg"><path fill="#dedede" d="M33 12v23c0 4.42-3.58 8-8 8s-8-3.58-8-8v-25c0-2.76 2.24-5 5-5s5 2.24 5 5v21c0 1.1-.89 2-2 2-1.11 0-2-.9-2-2v-19h-3v19c0 2.76 2.24 5 5 5s5-2.24 5-5v-21c0-4.42-3.58-8-8-8s-8 3.58-8 8v25c0 6.08 4.93 11 11 11s11-4.92 11-11v-23h-3z"/><path d="M0 0h48v48h-48z" fill="none"/></svg>
|
After Width: | Height: | Size: 404 B |
@ -0,0 +1,89 @@
|
||||
let assert = require('assert')
|
||||
let urllib = require('url')
|
||||
let querystring = require('querystring')
|
||||
|
||||
let mediaLib = require('../../lib/media.js')
|
||||
|
||||
let client = {
|
||||
mxcUrlToHttp: function(url, w, h, method, allowDirectLinks) {
|
||||
let hs = "https://chat.privacytools.io"
|
||||
let mxc = url.slice(6)
|
||||
if (w) {
|
||||
return `${hs}/_matrix/media/v1/thumbnail/${mxc}?w=${w}&h=${h}&method=${method}`
|
||||
} else {
|
||||
return `${hs}/_matrix/media/v1/download/${mxc}`
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let mockEventTemplate = {
|
||||
type: "m.room.message",
|
||||
sender: "@f0x:privacytools.io",
|
||||
content: {
|
||||
body: "image.png",
|
||||
info: {
|
||||
size: 16692,
|
||||
mimetype: "image/png",
|
||||
thumbnail_info: {
|
||||
w: 268,
|
||||
h: 141,
|
||||
mimetype: "image/png",
|
||||
size: 16896
|
||||
},
|
||||
w: 268,
|
||||
h: 141,
|
||||
thumbnail_url: "mxc://privacytools.io/zBSerdKMhaXSIxfjzCmOnhXH"
|
||||
},
|
||||
msgtype: "m.image",
|
||||
url: "mxc://privacytools.io/khPaFfeRyNdzlSttZraeAUre"
|
||||
},
|
||||
event_id: "$aaa:matrix.org",
|
||||
origin_server_ts: 1558470168199,
|
||||
unsigned: {
|
||||
age: 143237861
|
||||
},
|
||||
room_id: "!aaa:matrix.org"
|
||||
}
|
||||
|
||||
describe('media', function() {
|
||||
describe('#parseEvent()', function() {
|
||||
it('event without info', function() {
|
||||
let mockEvent = JSON.parse(JSON.stringify(mockEventTemplate))
|
||||
mockEvent.content.info = null
|
||||
|
||||
checkParsedEvent(mockEvent, {
|
||||
w: 1000,
|
||||
h: 1000,
|
||||
method: 'scale'
|
||||
})
|
||||
}),
|
||||
it('event without thumbnail', function() {
|
||||
let mockEvent = JSON.parse(JSON.stringify(mockEventTemplate))
|
||||
mockEvent.content.info.thumbnail_url = null
|
||||
mockEvent.content.info.thumbnail_info = null
|
||||
checkParsedEvent(mockEvent, {
|
||||
w: 268,
|
||||
h: 141,
|
||||
method: 'scale'
|
||||
})
|
||||
})
|
||||
it('event without thumbnail_info', function() {
|
||||
let mockEvent = JSON.parse(JSON.stringify(mockEventTemplate))
|
||||
mockEvent.content.info.thumbnail_url = null
|
||||
checkParsedEvent(mockEvent, {
|
||||
w: 268,
|
||||
h: 141,
|
||||
method: 'scale'
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
function checkParsedEvent(mockEvent, expected) {
|
||||
let media = mediaLib.parseEvent(client, mockEvent, 1000, 1000)
|
||||
let params = querystring.decode(urllib.parse(media.thumb).query)
|
||||
|
||||
Object.keys(params).forEach((key) => {
|
||||
assert.equal(expected[key], params[key])
|
||||
})
|
||||
}
|
Loading…
Reference in New Issue