module.exports = Story var Promise = require('bluebird') var BufferUtils = require('../lib/buffer-utils') var Snapchat = require('../') /** * Snapchat Story * * @class * @param {Snapchat} client * @param {Object} params */ function Story (client, params) { var self = this if (!(self instanceof Story)) return new Story(client, params) if (!(client instanceof Snapchat)) throw new Error('invalid client') self.client = client // null until you call load // self.blob = null // null until you call loadThumbnail // self.thumbnailBlob = null self.author = params['username'] self.viewed = !!params['viewed'] self.shared = !!params['is_shared'] self.zipped = !!params['zipped'] self.matureContent = !!params['mature_content'] self.needsAuth = !!params['needs_auth'] self.duration = params['time'] || 0 self.identifier = params['id'] self.text = params['caption_text_display'] self.clientIdentifier = params['client_id'] if (params['story_filter_id'].length) { self.storyFilterIdentifier = params['story_filter_id'] } self.adCanFollow = !!params['ad_can_follow'] self.mediaIdentifier = params['media_id'] self.mediaIV = params['media_iv'] self.mediaKey = params['media_key'] self.mediaKind = params['media_type'] || 0 self.mediaURL = params['media_url'] self.thumbIV = params['thumbnail_iv'] self.thumbURL = params['thumbnail_url'] self.timeLeft = params['time_left'] || 0 self.created = new Date(+params['timestamp']).toISOString() } /** * The underlying data for the image or video. * * @name Story#suggestedFilename * @property {string} */ Object.defineProperty(Story.prototype, 'suggestedFilename', { get: function () { var self = this if (!self.blob) { return null } else if (self.blob.isImage || self.blob.isVideo) { return self.identifier + BufferUtils.getFileExtension(self.blob.data) } else { return self.identifier } } }) /** * Loads the blob for the story. If successful, the blob property of the original Story object will contain the story's blob data. */ Story.prototype.load = function (cb) { var self = this return new Promise(function (resolve, reject) { self.client.stories.loadStoryBlob(self, function (err, blob) { if (err) { return reject(err) } // seperate media & overlay data if (Array.isArray(blob)) { if (blob.length > 2) { } self.overlay = blob[1].blob blob = blob[0].blob } self.blob = blob return resolve(blob) }) }).nodeify(cb) } /** * Loads the blob for the story thumbnail. If successful, the thumbnailBlob property of the original Story object will contain the story's thumbnail blob data. */ Story.prototype.loadThumbnail = function (cb) { var self = this return new Promise(function (resolve, reject) { self.client.stories.loadStoryThumbnailBlob(self, function (err, blob) { if (err) { return reject(err) } self.thumbnailBlob = blob return resolve(self) }) }).nodeify(cb) }