ConversationMetadataItem findItem(final ConversationState state) { return findItem(new Filter() { @Override public boolean accept(ConversationMetadataItem item) { return state.equals(item.getConversationState()); } }); }
ConversationMetadataItem item = conversationMetadata.findItem(conversation); if (item == null) { item = new ConversationMetadataItem(conversation.getLocalIdentifier(), conversation.getConversationId(), conversation.getConversationDataFile(), conversation.getConversationMessagesFile()); conversationMetadata.addItem(item); } else { assertTrue(conversation.getConversationId() != null || conversation.hasState(ANONYMOUS_PENDING) || conversation.hasState(LEGACY_PENDING), "Missing conversation id for state: %s", conversation.getState());
private void saveMetadata() { checkConversationQueue(); try { if (ApptentiveLog.canLog(VERBOSE)) { ApptentiveLog.v(CONVERSATION, "Saving metadata: ", conversationMetadata.toString()); } long start = System.currentTimeMillis(); File metaFile = new File(conversationsStorageDir, CONVERSATION_METADATA_FILE); ObjectSerialization.serialize(metaFile, conversationMetadata, encryptionKey); ApptentiveLog.v(CONVERSATION, "Saved metadata (took %d ms)", System.currentTimeMillis() - start); } catch (Exception e) { ApptentiveLog.e(CONVERSATION, e, "Exception while saving metadata"); logException(e); } }
private ConversationMetadata resolveMetadata() throws ConversationMetadataLoadException { checkConversationQueue(); try { // attempt to load the encrypted metadata file File metaFile = new File(conversationsStorageDir, CONVERSATION_METADATA_FILE); if (metaFile.exists()) { ApptentiveLog.v(CONVERSATION, "Loading metadata file: %s", metaFile); return ObjectSerialization.deserialize(metaFile, ConversationMetadata.class, encryptionKey); } // attempt to load the legacy metadata file metaFile = new File(conversationsStorageDir, CONVERSATION_METADATA_FILE_LEGACY_V1); if (metaFile.exists()) { ApptentiveLog.v(CONVERSATION, "Loading legacy v1 metadata file: %s", metaFile); try { return ObjectSerialization.deserialize(metaFile, ConversationMetadata.class); } finally { // we need to delete the legacy file to avoid the data being loaded next time boolean fileDeleted = metaFile.delete(); ApptentiveLog.v(CONVERSATION, "Legacy metadata file deleted: %b", fileDeleted); } } ApptentiveLog.v(CONVERSATION, "No metadata files"); } catch (Exception e) { ApptentiveLog.e(CONVERSATION, e, "Exception while loading conversation metadata"); logException(e); // if we fail to load the metadata - we would not create a new one - just throw an exception throw new ConversationMetadataLoadException("Unable to load metadata", e); } return new ConversationMetadata(); }
private void printMetadata(ConversationMetadata metadata, String title) { List<ConversationMetadataItem> items = metadata.getItems(); if (items.isEmpty()) { ApptentiveLog.v(CONVERSATION, "%s (%d item(s))", title, items.size());
private @Nullable Conversation loadActiveConversationGuarded() throws ConversationLoadException { // try to load an active conversation from metadata first try { if (conversationMetadata.hasItems()) { return loadConversationFromMetadata(conversationMetadata); } // try to load legacy conversation Conversation legacyConversation = migrateLegacyConversation(getContext()); if (legacyConversation != null) { return legacyConversation; } } catch (Exception e) { ApptentiveLog.e(e, "Exception while loading conversation"); logException(e); // do not re-create a conversation if the last loading was unsuccessful throw new ConversationLoadException("Unable to load conversation", e); } // no active conversations: create a new one ApptentiveLog.i(CONVERSATION, "Creating 'anonymous' conversation..."); File dataFile = generateConversationDataFilename(); File messagesFile = generateMessagesFilename(); Conversation conversation = new Conversation(dataFile, messagesFile, encryptionKey); conversation.setState(ANONYMOUS_PENDING); fetchConversationToken(conversation); return conversation; }
ConversationMetadataItem findItem(final Conversation conversation) { return findItem(new Filter() { @Override public boolean accept(ConversationMetadataItem item) { return StringUtils.equal(item.getLocalConversationId(), conversation.getLocalIdentifier()); } }); }
item = metadata.findItem(LOGGED_IN); if (item != null) { ApptentiveLog.i(CONVERSATION, "Loading 'logged-in' conversation..."); item = metadata.findItem(ANONYMOUS); if (item != null) { ApptentiveLog.i(CONVERSATION, "Loading 'anonymous' conversation..."); item = metadata.findItem(ANONYMOUS_PENDING); if (item != null) { ApptentiveLog.i(CONVERSATION, "Loading 'anonymous pending' conversation..."); item = metadata.findItem(LEGACY_PENDING); if (item != null) { ApptentiveLog.i(CONVERSATION, "Loading 'legacy pending' conversation...");
final ConversationMetadataItem conversationItem = conversationMetadata.findItem(new Filter() { @Override public boolean accept(ConversationMetadataItem item) {