Esempio n. 1
0
        public static IEnumerator CopyFile(TimiSharedURI sourceFileURI, TimiSharedURI destinationDirectoryURI)
        {
            if (destinationDirectoryURI.BasePathType == FileBasePathType.LocalDataPath ||
                destinationDirectoryURI.BasePathType == FileBasePathType.LocalPersistentDataPath ||
                (destinationDirectoryURI.BasePathType == FileBasePathType.LocalStreamingAssetsPath && Application.isEditor))
            {
                FileLoadRequest fileLoadRequest = FileLoader.GetFileStreamAsync(sourceFileURI, FileMode.Open, FileAccess.Read);
                if (fileLoadRequest != null)
                {
                    fileLoadRequest.StartRequest();
                    yield return(fileLoadRequest);

                    string contents = FileUtils.GetStreamContents(fileLoadRequest.LoadedFileStream);

                    TimiSharedURI destinationFileURI = new TimiSharedURI(destinationDirectoryURI.BasePathType,
                                                                         Path.Combine(destinationDirectoryURI.RelativePath, sourceFileURI.FileName));
                    using (Stream destinationFileStream = FileLoader.GetFileStreamSync(destinationFileURI, FileMode.Create, FileAccess.Write)) {
                        if (destinationFileStream != null)
                        {
                            FileUtils.PutStreamContents(destinationFileStream, contents);
                        }
                        destinationFileStream.Close();
                    }
                }

                yield break;
            }
            else
            {
                string errorMessage = "Not supported to write on base path type: " + destinationDirectoryURI.BasePathType;
                DebugLog.LogErrorColor(errorMessage, LogColor.grey);
                throw new NotImplementedException(errorMessage);
            }
        }
Esempio n. 2
0
 public static void WriteFile(TimiSharedURI fileURI, string contents)
 {
     using (Stream fileStream = FileLoader.GetFileStreamSync(fileURI, FileMode.Create, FileAccess.ReadWrite)) {
         using (StreamWriter streamWriter = new StreamWriter(fileStream)) {
             streamWriter.Write(contents);
             fileStream.Flush();
             streamWriter.Flush();
         }
     }
 }
Esempio n. 3
0
        // Reads a CSV that is formatted as comma separated values per line
        // The first line must contain the legend
        public static CSVResult ReadCSVFile(TimiSharedURI fileURI)
        {
            CSVResult result = null;

            using (Stream fileStream = FileLoader.GetFileStreamSync(fileURI, FileMode.Open, FileAccess.Read)) {
                if (fileStream == null)
                {
                    return(null);
                }

                StreamReader streamReader = new StreamReader(fileStream);
                if (streamReader.Peek() < 0)
                {
                    DebugLog.LogErrorColor("Empty file", LogColor.grey);
                    return(null);
                }

                result = new CSVResult();

                // Read the legend from the first line
                string   legendLine = streamReader.ReadLine();
                string[] legend     = legendLine.Split(',');
                for (int i = 0; i < legend.Length; ++i)
                {
                    result.keysPerItem.Add(legend[i]);
                }

                int lineNumber = 0;
                while (streamReader.Peek() >= 0)
                {
                    ++lineNumber;

                    string   line  = streamReader.ReadLine();
                    string[] words = line.Split(',');

                    if (result.keysPerItem.Count != words.Length)
                    {
                        DebugLog.LogWarningColor("Malformed item on line number: " + lineNumber, LogColor.grey);
                        continue;
                    }

                    CSVItem item = new CSVItem();
                    for (int i = 0; i < result.keysPerItem.Count; ++i)
                    {
                        item.values[result.keysPerItem[i]] = words[i];
                    }
                    result.items.Add(item);
                }

                fileStream.Close();
            }

            return(result);
        }
Esempio n. 4
0
        public static List <TimiSharedURI> GetDirectoriesInDirectory(TimiSharedURI directoryUri)
        {
            string[]             directoryPathNames = Directory.GetDirectories(directoryUri.GetFullPath());
            List <TimiSharedURI> directoryURIs      = new List <TimiSharedURI>();

            for (int i = 0; i < directoryPathNames.Length; ++i)
            {
                string directoryName = Path.GetFileName(directoryPathNames[i]);
                directoryURIs.Add(new TimiSharedURI(directoryUri.BasePathType, Path.Combine(directoryUri.RelativePath, directoryName)));
            }

            return(directoryURIs);
        }
Esempio n. 5
0
 public static void CreateDirectory(TimiSharedURI uri)
 {
     if (uri.BasePathType == FileBasePathType.LocalDataPath ||
         uri.BasePathType == FileBasePathType.LocalPersistentDataPath ||
         (uri.BasePathType == FileBasePathType.LocalStreamingAssetsPath && Application.isEditor))
     {
         Directory.CreateDirectory(uri.GetFullPath());
     }
     else
     {
         string errorMessage = "Not supported to create directory on base path type: " + uri.BasePathType;
         DebugLog.LogErrorColor(errorMessage, LogColor.grey);
         throw new NotImplementedException(errorMessage);
     }
 }
Esempio n. 6
0
 public static bool DoesDirectoryExist(TimiSharedURI uri)
 {
     if (uri.BasePathType == FileBasePathType.LocalDataPath ||
         uri.BasePathType == FileBasePathType.LocalPersistentDataPath ||
         uri.BasePathType == FileBasePathType.LocalStreamingAssetsPath)
     {
         return(Directory.Exists(uri.GetFullPath()));
     }
     else
     {
         string errorMessage = "Not supported to check directory exists on base path type: " + uri.BasePathType;
         DebugLog.LogErrorColor(errorMessage, LogColor.grey);
         throw new NotImplementedException(errorMessage);
     }
 }
Esempio n. 7
0
        private IEnumerator CopyFirstLaunchTextAssets()
        {
            FileUtils.CreateDirectory(this.FirstLaunchDestinationURI);

            var enumerator = this._bootstrapTextAssetInfos.GetEnumerator();

            while (enumerator.MoveNext())
            {
                TextAsset     textAsset      = enumerator.Current.textAsset;
                TimiSharedURI destinationURI = TimiSharedURI.Combine(this.FirstLaunchDestinationURI, new TimiSharedURI(FileBasePathType.LocalPersistentDataPath, enumerator.Current.fileName));

                FileUtils.WriteFile(destinationURI, textAsset.text);
            }
            enumerator.Dispose();

            yield break;
        }
Esempio n. 8
0
    public static void SaveAppConfigData(AppConfigData appConfigData)
    {
        if (!Application.isEditor)
        {
            throw new NotImplementedException("Not yet supported to edit app config on device");
        }

        string appConfigDataJson = TimiSharedSerializer.Serialize(appConfigData);

        if (!string.IsNullOrEmpty(appConfigDataJson))
        {
            TimiSharedURI appConfigFileUri = AppConfigHelper.AppConfigFileURI;
            using (Stream appConfigFileStream = FileLoader.GetFileStreamSync(appConfigFileUri, FileMode.Create, FileAccess.Write)) {
                FileUtils.PutStreamContents(appConfigFileStream, appConfigDataJson);
                appConfigFileStream.Close();
            }
        }
    }
Esempio n. 9
0
        public static List <TimiSharedURI> GetFilesInDirectory(TimiSharedURI directoryUri)
        {
            string[]             filePathNames = Directory.GetFiles(directoryUri.GetFullPath());
            List <TimiSharedURI> fileURIs      = new List <TimiSharedURI>();

            for (int i = 0; i < filePathNames.Length; ++i)
            {
                string fileName  = Path.GetFileName(filePathNames[i]);
                string extension = Path.GetExtension(fileName);
                if (extension == ".meta" || extension == ".DS_Store")
                {
                    // Skip Unity meta files and mac DS_Store files
                    continue;
                }
                fileURIs.Add(new TimiSharedURI(directoryUri.BasePathType, Path.Combine(directoryUri.RelativePath, fileName)));
            }

            return(fileURIs);
        }
Esempio n. 10
0
        public static IEnumerator CopyDirectoryContents(TimiSharedURI sourceDirectory, TimiSharedURI destinationDirectory)
        {
            if (destinationDirectory.BasePathType == FileBasePathType.LocalDataPath ||
                destinationDirectory.BasePathType == FileBasePathType.LocalPersistentDataPath ||
                (destinationDirectory.BasePathType == FileBasePathType.LocalStreamingAssetsPath && Application.isEditor))
            {
                if (!FileUtils.DoesDirectoryExist(sourceDirectory))
                {
                    DebugLog.LogWarningColor("Source directory does not exist: " + sourceDirectory.GetFullPath(), LogColor.grey);
                    yield break;
                }

                if (!FileUtils.DoesDirectoryExist(destinationDirectory))
                {
                    FileUtils.CreateDirectory(destinationDirectory);
                }

                List <TimiSharedURI> fileURIs      = FileUtils.GetFilesInDirectory(sourceDirectory);
                List <TimiSharedURI> directoryURIs = FileUtils.GetDirectoriesInDirectory(sourceDirectory);

                for (int i = 0; i < fileURIs.Count; ++i)
                {
                    // TODO: Make this parallel for all the files
                    yield return(FileUtils.CopyFile(fileURIs[i], destinationDirectory));
                }
                for (int i = 0; i < directoryURIs.Count; ++i)
                {
                    TimiSharedURI destination = new TimiSharedURI(destinationDirectory.BasePathType,
                                                                  Path.Combine(destinationDirectory.RelativePath, directoryURIs[i].FileName));
                    // TODO: Make this parallel for all the files
                    yield return(FileUtils.CopyDirectoryContents(directoryURIs[i], destination));
                }

                yield break;
            }
            else
            {
                string errorMessage = "Not supported to write on base path type: " + destinationDirectory.BasePathType;
                DebugLog.LogErrorColor(errorMessage, LogColor.grey);
                throw new NotImplementedException(errorMessage);
            }
        }