Table of Contents

Backup your apps

Following a reminder from Dave on the discussion group that we should be backing up our apps regularly, I thought I would post a simple way of sending yourself an email archive of your DroidScript folder.

The following code is intended as a guide to one way you can keep a snapshot of your code at any given time.

If you wish, you can save the mail as a draft, rather than sending it.

Or instead of choosing a mail app to send the file, you may be able to choose an archiving app that is on your device, such as Google Drive.

archive.js
var mygmail = app.GetUser();
var txt, yesNo, archname;
 
//Called when application is started.
function OnStart()
{
    //Create a layout with objects vertically centered.
    var lay = app.CreateLayout( "linear", "FillXY" );    
 
 
    //Create a text label and add it to layout.
    txt = app.CreateText( "..." );
    lay.AddChild( txt );
 
    //Add layout to app.    
    app.AddLayout( lay );
    var fname = CreateArchive();
    yesNo = app.CreateYesNoDialog( "Send by mail?" ); 
    yesNo.fname = fname;
    yesNo.SetOnTouch( yesNoMail_OnTouch );
}
 
//Create a backup archive.
function CreateArchive( )
{
    var archfolder = "/sdcard/sjgapps/archive/"; 
    app.MakeFolder(archfolder);
    //Create project zip file.
    var zip = app.CreateZipUtil();
    var fldr = "/sdcard/DroidScript";
    archname = (new Date).toISOString().slice(0,19 );
    archname = "ds"+archname.replace(/[-:]/g,"");
    archname =  archname.replace(/T/,"_");
    archname += ".zip";
    var file = archfolder+archname;
    archname = app.GetModel()+"/"+archname;
    zip.Create( file );
 
    app.ShowProgress( "Archiving..." );
    AddFolder( zip, "DroidScript", fldr );
    app.HideProgress();
    zip.Close();
 
    return file;
}
 
 
//Recursively add folder contents to zip.
function AddFolder( zip, name, fldr )
{
    txt.SetText(name);
    var list = app.ListFolder( fldr,"",0,"alphasort" );
    for( var i=0; i<list.length; i++ )
    {
        var title = list[i];
        if( !app.IsFolder( fldr+"/"+title ) )
            zip.AddFile( name+"/"+title, fldr+"/"+title );
        else
            AddFolder( zip, name+"/"+title, fldr+"/"+title );
    }
}
//Handle 'send by mail?' dialog. 
function yesNoMail_OnTouch( result ) 
{ 
    if( result=="Yes" ) 
    {
        var fname = yesNo.fname;
        app.SendMail( mygmail, archname, "DroidScript backup attached", fname );
    }
}

Warnings

Version required

This code makes the assumption that you are using at least version 1.15 of DroidScript, as the path for your apps is hard coded but older versions used a different path

Filling your sdcard

There is no code included to delete the zip files.

Over time, /sdcard/sjgapps/archive will build up all the archives you create.

You should probably delete those files manually from time to time, probably after emailing them or placing them in your cloud storage.