Esempio n. 1
0
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                Console.WriteLine("VrcMetaTool.NET.Reader.exeに画像ファイルをドラッグアンドドロップしてください。");
                Console.ReadLine();
            }

            var path = args[0];

            if (!File.Exists(path))
            {
                Console.WriteLine("ファイルを読み込めませんでした。");
                Console.ReadLine();
            }

            VrcMetaData vrcMetaData;

            try
            {
                vrcMetaData = VrcMetaDataReader.Read(File.ReadAllBytes(path));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return;
            }

            if (vrcMetaData.Date != null)
            {
                Console.WriteLine($"Date: {vrcMetaData.Date}");
            }

            if (vrcMetaData.Photographer != null)
            {
                Console.WriteLine($"Photo by: {vrcMetaData.Photographer}");
            }

            if (vrcMetaData.World != null)
            {
                Console.WriteLine($"World: {vrcMetaData.World}");
            }

            foreach (var user in vrcMetaData.Users)
            {
                if (user.HasTwitterScreenName)
                {
                    Console.WriteLine($"User: {user.UserName} : {user.TwitterScreenName}");
                }
                else
                {
                    Console.WriteLine($"User: {user.UserName}");
                }
            }

            Console.ReadLine();
        }
Esempio n. 2
0
 public static VrcMetaData GetVrcMetaData(string filePath)
 {
     //return new VrcMetaData();
     if (!VrcMetaDataReader.TryRead(filePath, out VrcMetaData meta))
     {
         meta = new VrcMetaData
         {
             Date = GetDateTimeFromPhotoName(filePath)
         };
     }
     return(meta);
 }
Esempio n. 3
0
        public async Task CreateDBCacheIfNeededAsync(IEnumerable <string> filePaths)
        {
            // DBに存在しないものだけキャッシュ作成を行う
            foreach (var filePath in filePaths.Except(await _context.Photos.Select(p => p.FilePath).ToListAsync().ConfigureAwait(true)))
            {
                var photo = new Photo
                {
                    FilePath = filePath
                };

                // サムネイル作成
                // サムネイルは初表示時に作成する
                //photo.Thumbnail = await ImageHelper.CreateThumbnailAsync(filePath);

                // metaデータ読み込み
                if (!VrcMetaDataReader.TryRead(filePath, out VrcMetaData meta))
                {
                    // ファイル名から日付を取得
                    photo.Date = MetaDataHelper.GetDateTimeFromPhotoName(filePath);
                }
                else
                {
                    // 日付情報設定
                    photo.Date = meta.Date;

                    // ワールド情報設定
                    if (string.IsNullOrEmpty(meta.World))
                    {
                        photo.World = null;
                    }
                    else
                    {
                        if (!ExistsWorldByWorldName(meta.World, out var world))
                        {
                            photo.World = CreateWorld(meta.World);
                        }
                        else
                        {
                            photo.World = world;
                        }
                    }

                    // 撮影者情報設定
                    if (string.IsNullOrEmpty(meta.Photographer))
                    {
                        photo.Photographer = null;
                    }
                    else
                    {
                        var(exists, photographer) = await ExistsUserByUserNameAsync(meta.Photographer).ConfigureAwait(true);

                        if (!exists)
                        {
                            photo.Photographer = await CreateUserAsync(meta.Photographer).ConfigureAwait(true);
                        }
                        else
                        {
                            photo.Photographer = photographer;
                        }
                    }

                    // ユーザ情報設定
                    if (meta.Users.Any())
                    {
                        foreach (var metaUser in meta.Users)
                        {
                            var(exists, user) = await ExistsUserByUserNameAsync(metaUser.UserName).ConfigureAwait(true);

                            // TODO:TwitterのDisplaynameを入れていない
                            if (!exists)
                            {
                                user = await CreateUserAsync(metaUser.UserName).ConfigureAwait(true);
                            }

                            var photoUser = CreatePhotoUser(photo, user);

                            photo.PhotoUsers.Add(photoUser);
                        }
                    }
                }

                await _context.Photos.AddAsync(photo);

                await _context.SaveChangesAsync().ConfigureAwait(true);
            }
        }