// The idea with this file is to make it webpackable for the style guide const { bindActionCreators } = require('redux'); const Backbone = require('../../ts/backbone'); const Crypto = require('./crypto'); const Data = require('./data'); const Database = require('./database'); const Emoji = require('../../ts/util/emoji'); const IndexedDB = require('./indexeddb'); const Notifications = require('../../ts/notifications'); const OS = require('../../ts/OS'); const Settings = require('./settings'); const Util = require('../../ts/util'); const { migrateToSQL } = require('./migrate_to_sql'); const Metadata = require('./metadata/SecretSessionCipher'); const RefreshSenderCertificate = require('./refresh_sender_certificate'); const LinkPreviews = require('./link_previews'); const AttachmentDownloads = require('./attachment_downloads'); // Components const { AttachmentList, } = require('../../ts/components/conversation/AttachmentList'); const { CaptionEditor } = require('../../ts/components/CaptionEditor'); const { ContactDetail, } = require('../../ts/components/conversation/ContactDetail'); const { ContactListItem } = require('../../ts/components/ContactListItem'); const { ContactName } = require('../../ts/components/conversation/ContactName'); const { ConversationHeader, } = require('../../ts/components/conversation/ConversationHeader'); const { EmbeddedContact, } = require('../../ts/components/conversation/EmbeddedContact'); const { Emojify } = require('../../ts/components/conversation/Emojify'); const { GroupNotification, } = require('../../ts/components/conversation/GroupNotification'); const { Lightbox } = require('../../ts/components/Lightbox'); const { LightboxGallery } = require('../../ts/components/LightboxGallery'); const { MediaGallery, } = require('../../ts/components/conversation/media-gallery/MediaGallery'); const { Message } = require('../../ts/components/conversation/Message'); const { MessageBody } = require('../../ts/components/conversation/MessageBody'); const { MessageDetail, } = require('../../ts/components/conversation/MessageDetail'); const { Quote } = require('../../ts/components/conversation/Quote'); const { ResetSessionNotification, } = require('../../ts/components/conversation/ResetSessionNotification'); const { SafetyNumberNotification, } = require('../../ts/components/conversation/SafetyNumberNotification'); const { StagedLinkPreview, } = require('../../ts/components/conversation/StagedLinkPreview'); const { TimerNotification, } = require('../../ts/components/conversation/TimerNotification'); const { TypingBubble, } = require('../../ts/components/conversation/TypingBubble'); const { VerificationNotification, } = require('../../ts/components/conversation/VerificationNotification'); // State const { createLeftPane } = require('../../ts/state/roots/createLeftPane'); const { createStore } = require('../../ts/state/createStore'); const conversationsDuck = require('../../ts/state/ducks/conversations'); const userDuck = require('../../ts/state/ducks/user'); // Migrations const { getPlaceholderMigrations, getCurrentVersion, } = require('./migrations/get_placeholder_migrations'); const { run } = require('./migrations/migrations'); // Types const AttachmentType = require('./types/attachment'); const VisualAttachment = require('./types/visual_attachment'); const Contact = require('../../ts/types/Contact'); const Conversation = require('./types/conversation'); const Errors = require('./types/errors'); const MediaGalleryMessage = require('../../ts/components/conversation/media-gallery/types/Message'); const MessageType = require('./types/message'); const MIME = require('../../ts/types/MIME'); const PhoneNumber = require('../../ts/types/PhoneNumber'); const SettingsType = require('../../ts/types/Settings'); // Views const Initialization = require('./views/initialization'); // Workflow const { IdleDetector } = require('./idle_detector'); const MessageDataMigrator = require('./messages_data_migrator'); function initializeMigrations({ userDataPath, getRegionCode, Attachments, Type, VisualType, logger, }) { if (!Attachments) { return null; } const { getPath, createReader, createAbsolutePathGetter, createWriterForNew, createWriterForExisting, } = Attachments; const { makeObjectUrl, revokeObjectUrl, getImageDimensions, makeImageThumbnail, makeVideoScreenshot, } = VisualType; const attachmentsPath = getPath(userDataPath); const readAttachmentData = createReader(attachmentsPath); const loadAttachmentData = Type.loadData(readAttachmentData); const loadPreviewData = MessageType.loadPreviewData(loadAttachmentData); const loadQuoteData = MessageType.loadQuoteData(loadAttachmentData); const getAbsoluteAttachmentPath = createAbsolutePathGetter(attachmentsPath); const deleteOnDisk = Attachments.createDeleter(attachmentsPath); const writeNewAttachmentData = createWriterForNew(attachmentsPath); return { attachmentsPath, deleteAttachmentData: deleteOnDisk, deleteExternalMessageFiles: MessageType.deleteAllExternalFiles({ deleteAttachmentData: Type.deleteData(deleteOnDisk), deleteOnDisk, }), getAbsoluteAttachmentPath, getPlaceholderMigrations, getCurrentVersion, loadAttachmentData, loadMessage: MessageType.createAttachmentLoader(loadAttachmentData), loadPreviewData, loadQuoteData, readAttachmentData, run, processNewAttachment: attachment => MessageType.processNewAttachment(attachment, { writeNewAttachmentData, getAbsoluteAttachmentPath, makeObjectUrl, revokeObjectUrl, getImageDimensions, makeImageThumbnail, makeVideoScreenshot, logger, }), upgradeMessageSchema: (message, options = {}) => { const { maxVersion } = options; return MessageType.upgradeSchema(message, { writeNewAttachmentData, getRegionCode, getAbsoluteAttachmentPath, makeObjectUrl, revokeObjectUrl, getImageDimensions, makeImageThumbnail, makeVideoScreenshot, logger, maxVersion, }); }, writeMessageAttachments: MessageType.createAttachmentDataWriter({ writeExistingAttachmentData: createWriterForExisting(attachmentsPath), logger, }), writeNewAttachmentData: createWriterForNew(attachmentsPath), }; } exports.setup = (options = {}) => { const { Attachments, userDataPath, getRegionCode, logger } = options; const Migrations = initializeMigrations({ userDataPath, getRegionCode, Attachments, Type: AttachmentType, VisualType: VisualAttachment, logger, }); const Components = { AttachmentList, CaptionEditor, ContactDetail, ContactListItem, ContactName, ConversationHeader, EmbeddedContact, Emojify, GroupNotification, Lightbox, LightboxGallery, MediaGallery, Message, MessageBody, MessageDetail, Quote, ResetSessionNotification, SafetyNumberNotification, StagedLinkPreview, TimerNotification, Types: { Message: MediaGalleryMessage, }, TypingBubble, VerificationNotification, }; const Roots = { createLeftPane, }; const Ducks = { conversations: conversationsDuck, user: userDuck, }; const State = { bindActionCreators, createStore, Roots, Ducks, }; const Types = { Attachment: AttachmentType, Contact, Conversation, Errors, Message: MessageType, MIME, PhoneNumber, Settings: SettingsType, VisualAttachment, }; const Views = { Initialization, }; const Workflow = { IdleDetector, MessageDataMigrator, }; return { AttachmentDownloads, Backbone, Components, Crypto, Data, Database, Emoji, IndexedDB, LinkPreviews, Metadata, migrateToSQL, Migrations, Notifications, OS, RefreshSenderCertificate, Settings, State, Types, Util, Views, Workflow, }; };