static bool processResourceListObject <Storage, SrcType, DstType>(
            List <DstType> dstObjectList,
            ResourceStorageWatcher <Storage, SrcType> watcher,
            System.Func <SrcType, int, ResId, DstType> converter)
        {
            var result = watcher.hasNewObjects;

            if (dstObjectList == null)
            {
                throw new System.ArgumentNullException("dstObjectList");
            }
            if (watcher == null)
            {
                throw new System.ArgumentNullException("watcher");
            }
            if (converter == null)
            {
                throw new System.ArgumentNullException("converter");
            }

            foreach (var cur in watcher.getNewObjectsData())
            {
                var dst = converter(cur.data, cur.index, cur.id);
                dstObjectList.Add(dst);
            }
            watcher.updateNumObjects();

            return(result);
        }
        static bool saveResourcesToPath <DstType, SrcType, StorageType>(
            List <string> outObjectPaths,
            string baseDir,
            ResourceStorageWatcher <StorageType, SrcType> objects,
            IndexedObjectConverter <SrcType, DstType> converter,
            System.Func <DstType, string> nameFunc, string baseName, bool showGui,
            System.Action <DstType> dstProcessor = null)
            where DstType : IFastJsonValue
        {
            if (converter == null)
            {
                throw new System.ArgumentNullException("converter");
            }

            bool result = false;

            try{
                if (objects != null)
                {
                    foreach (var curData in objects.getNewObjectsData())
                    {
                        //lq begin
                        var temp = saveResourceToPath(
                            baseDir, curData.data, curData.index, curData.id,
                            objects.numObjects,
                            converter, nameFunc, baseName, showGui,
                            dstProcessor
                            );

                        if (string.IsNullOrEmpty(temp) == false)
                        {
                            outObjectPaths.Add(temp);
                            result = true;
                        }
                        //end
                    }
                    objects.updateNumObjects();                    //yup. I forgot that part.
                }
                return(result);
            }
            finally{
                if (showGui)
                {
                    ExportUtility.hideProgressBar();
                }
            }
        }