Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,27 @@ public class IterableInAppFileStorage implements IterableInAppStorage, IterableI
private static final String FOLDER_PATH = "IterableInAppFileStorage";
private static final String INDEX_FILE = "index.html";
private static final int OPERATION_SAVE = 100;

private final Context context;

private Map<String, IterableInAppMessage> messages =
Collections.synchronizedMap(new LinkedHashMap<String, IterableInAppMessage>());

private final HandlerThread fileOperationThread = new HandlerThread("FileOperationThread");

@VisibleForTesting
FileOperationHandler fileOperationHandler;

IterableInAppFileStorage(Context context) {
this.context = context;

fileOperationThread.start();
fileOperationHandler = new FileOperationHandler(fileOperationThread.getLooper());

load();
}

//region IterableInAppStorage interface implementation
@NonNull
@Override
public synchronized List<IterableInAppMessage> getMessages() {
Expand Down Expand Up @@ -68,6 +74,45 @@ public synchronized void removeMessage(@NonNull IterableInAppMessage message) {
saveMessagesInBackground();
}

@Override
public void saveHTML(@NonNull String messageID, @NonNull String contentHTML) {
File folder = createFolderForMessage(messageID);
if (folder == null) {
IterableLogger.e(TAG, "Failed to create folder for HTML content");
return;
}

File file = new File(folder, INDEX_FILE);
boolean result = IterableUtil.writeFile(file, contentHTML);
if (!result) {
IterableLogger.e(TAG, "Failed to store HTML content");
}
}

@Nullable
@Override
public String getHTML(@NonNull String messageID) {
File file = getFileForContent(messageID);
return IterableUtil.readFile(file);
}

@Override
public void removeHTML(@NonNull String messageID) {
File folder = getFolderForMessage(messageID);

File[] files = folder.listFiles();
if (files == null) {
return;
}

for (File file : files) {
file.delete();
}
folder.delete();
}
//endregion

//region In-App Lifecycle
@Override
public void onInAppMessageChanged(@NonNull IterableInAppMessage message) {
saveMessagesInBackground();
Expand All @@ -80,7 +125,9 @@ private synchronized void clearMessages() {
}
messages.clear();
}
//endregion

//region JSON Parsing
@NonNull
private JSONObject serializeMessages() {
JSONObject jsonData = new JSONObject();
Expand Down Expand Up @@ -116,15 +163,9 @@ private void loadMessagesFromJson(JSONObject jsonData) {
}
}
}
//endregion

private File getInAppStorageFile() {
return new File(getInAppContentFolder(), "itbl_inapp.json");
}

private File getInAppCacheStorageFile() {
return new File(IterableUtil.getSdkCacheDir(context), "itbl_inapp.json");
}

//region File Saving/Loading
private void load() {
try {
File inAppStorageFile = getInAppStorageFile();
Expand Down Expand Up @@ -169,20 +210,15 @@ private synchronized void saveMetadata() {
IterableLogger.e(TAG, "Error while saving in-app messages to file", e);
}
}
//endregion

@Override
public void saveHTML(@NonNull String messageID, @NonNull String contentHTML) {
File folder = createFolderForMessage(messageID);
if (folder == null) {
IterableLogger.e(TAG, "Failed to create folder for HTML content");
return;
}
//region File Management
private File getInAppStorageFile() {
return new File(getInAppContentFolder(), "itbl_inapp.json");
}

File file = new File(folder, INDEX_FILE);
boolean result = IterableUtil.writeFile(file, contentHTML);
if (!result) {
IterableLogger.e(TAG, "Failed to store HTML content");
}
private File getInAppCacheStorageFile() {
return new File(IterableUtil.getSdkCacheDir(context), "itbl_inapp.json");
}

@Nullable
Expand Down Expand Up @@ -217,28 +253,7 @@ private File getFileForContent(String messageID) {
File folder = getFolderForMessage(messageID);
return new File(folder, INDEX_FILE);
}

@Nullable
@Override
public String getHTML(@NonNull String messageID) {
File file = getFileForContent(messageID);
return IterableUtil.readFile(file);
}

@Override
public void removeHTML(@NonNull String messageID) {
File folder = getFolderForMessage(messageID);

File[] files = folder.listFiles();
if (files == null) {
return;
}

for (File file : files) {
file.delete();
}
folder.delete();
}
//endregion

class FileOperationHandler extends Handler {
FileOperationHandler(Looper threadLooper) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class IterableInAppMemoryStorage implements IterableInAppStorage {

}

//region IterableInAppStorage interface implementation
@NonNull
@Override
public synchronized List<IterableInAppMessage> getMessages() {
Expand Down Expand Up @@ -54,4 +55,5 @@ public String getHTML(@NonNull String messageID) {
public void removeHTML(@NonNull String messageID) {

}
//endregion
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,18 @@
interface IterableInAppStorage {
@NonNull
List<IterableInAppMessage> getMessages();

@Nullable
IterableInAppMessage getMessage(String messageId);

void addMessage(@NonNull IterableInAppMessage message);

void removeMessage(@NonNull IterableInAppMessage message);

void saveHTML(@NonNull String messageID, @NonNull String contentHTML);

@Nullable
String getHTML(@NonNull String messageID);

void removeHTML(@NonNull String messageID);
}
Loading