Edited at

TitaniumMobileでファイルローテート処理

More than 3 years have passed since last update.

TitaniumMobileでファイルローテートの処理を書いてみました。

サーバからダウンロードしたファイルと、ローカルに保存されているファイルを入れ替える処理。

temp領域に保存してあるコンテンツファイルを、アプリの起動時にサーバ側へリクエストを行い、新しいコンテンツファイルを取得して入れ替えるような動きを想定。


処理の流れ

1.バックアップ処理


  • バックアップファイルの作成(ファイルのリネーム)

2.ダウンロード処理


  • ダウンロード失敗時に、ダウンロードしたファイルを削除し、バックアップファイルのリストア

3.バックアップファイルの削除

みたいな感じです。


サンプルコード


filerotate.js


// tmp領域のパス
var temp = Ti.Filesystem.tempDirectory

// バックアップファイルオブジェクト保存用の配列
var oldfileList = [];

// ダウンロードファイルオブジェクト保存用の配列
var downloadfileList = [];

// ロールバック処理
var rollback = function(){
rollback_deletefiles();
rollback_restorefiles();
};

// ダウンロードファイルの削除
var rollback_deletefiles = function(){
if(downloadfileList.length > 0){
for(var i=0 in downloadfileList){
var bResult = downloadfileList[i].deleteFile();
if(bResult == true){
console.log("Delete download files success");
} else {
console.log("Delete download files failure");
}
}
}
};

// バックアップファイルのリストア
var rollback_restorefiles = function(){
if(oldfileList.length > 0){
for(var i=0 in oldfileList){
var oldFileName = oldfileList[i].name;
var fileName = oldFileName.replace(/.old_/, "");
var bResult = oldfileList[i].rename(fileName);
if(bResult == true){
console.log("Restore file success");
} else {
console.log("Restore file failure");
}
}
}
};

// バックアップファイルの作成
var backup_oldfiles = function(){
var fileList = Ti.Filesystem.getFile(temp).getDirectoryListing();
for(var i=0 in fileList){
var file = Ti.Filesystem.getFile(temp,fileList[i]);
var oldFileName = ".old_"+ file.name;
var bResult = file.rename(oldFileName);
var oldFile = Ti.Filesystem.getFile(temp,oldFileName);
if(bResult == true){
console.log('Rename success');
oldfileList[i] = oldFile;
} else {
console.log('Rename failure');
rollback();
}
}
};

// バックアップファイル削除
var remove_oldfiles = function(){
for (var i=0 in oldfileList){
var bResult = oldfileList[i].deleteFile();
if(bResult == true){
console.log("Delete old files success");
} else {
console.log("Delete old files failure");
}
}
};


このコードですが、そのままでは動きません。

使う場合は、摘んでいただけると幸いです。

ソースはこちらに置いておきます。