Esempio n. 1
0
        public UsersTest()
        {
            _photoListWithOneUser = Enumerable.Range(0, 5)
                                    .Select(offset =>
            {
                var meta = new VrcMetaData();
                meta.Users.Add(new KoyashiroKohaku.VrcMetaTool.User($"{(char)('a' + offset)}"));
                return(new Photo($"file{offset}.png")
                {
                    MetaData = meta
                });
            });

            _photoListWithManyUsers = Enumerable.Range(0, 5)
                                      .Select(offset =>
            {
                var meta = new VrcMetaData();
                foreach (var userOffset in Enumerable.Range(0, 5))
                {
                    meta.Users.Add(new KoyashiroKohaku.VrcMetaTool.User($"{(char)('a' + userOffset)}"));
                }
                return(new Photo($"file{offset}.png")
                {
                    MetaData = meta
                });
            });

            _photoListForAlphabet = new int[] { 0, 3, 1, 2, 4 } // 各写真のユーザーの文字offset
            .Select(i =>
            {
                var meta = new VrcMetaData
                {
                    World = "worldName"
                };
                meta.Users.Add(
                    new KoyashiroKohaku.VrcMetaTool.User($"{(char)('a' + i)}"));
                return(new Photo("hoge.png")
                {
                    MetaData = meta
                });
            });

            _photoListForCount = new int[] { 3, 5, 1, 4, 2 } // 各写真のユーザー数
            .Select(i =>
            {
                var meta = new VrcMetaData
                {
                    World = "worldName"
                };
                meta.Users.AddRange(
                    Enumerable.Range(0, i)
                    .Select(ii =>
                            new KoyashiroKohaku.VrcMetaTool.User($"{(char)('a' + i)}")));
                return(new Photo("hoge.png")
                {
                    MetaData = meta
                });
            });
        }
Esempio n. 2
0
 // TODO: 命名をどうにかする
 private void ImageProcessing(string filePath, VrcMetaData meta, SearchResult searchResult, Action <string, VrcMetaData> imageProcessFunction)
 {
     imageProcessFunction(filePath, meta);
     AppCache.Instance.DeleteCacheFile(filePath);
     //TODO: ここでサムネイルの読み直しをおこなう
     Image.Value = ImageHelper.LoadBitmapImage(filePath);
     searchResult.ResearchCommand.Execute();
 }
Esempio n. 3
0
        public static void FilpHorizontalAndSave(string filePath, VrcMetaData metaData)
        {
            using var image = FlipHorizontal(LoadImage(filePath));
            var buffer = Bitmap2Bytes(image);

            if (!(metaData is null))
            {
                buffer = VrcMetaDataWriter.Write(buffer, metaData);
            }
            SaveImage(buffer, filePath);
        }
Esempio n. 4
0
        public static void Rotate180AndSave(string filePath, VrcMetaData metaData)
        {
            using var image = Rotate180(LoadImage(filePath));
            var buffer = Bitmap2Bytes(image);

            if (!(metaData is null))
            {
                buffer = VrcMetaDataWriter.Write(buffer, metaData);
            }
            SaveImage(buffer, filePath);
        }
Esempio n. 5
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. 6
0
        public List <(string filePath, VrcMetaData vrcMetaData)> GetVrcMetaDataIfExists(IEnumerable <string> filePaths)
        {
            using (asyncLock.Lock())
            {
                var photos = Photos
                             .Select(p => new
                {
                    p.FilePath,
                    p.World,
                    p.Date,
                    p.Photographer,
                    p.PhotoUsers,
                })
                             .Where(p => filePaths.Contains(p.FilePath))
                             .ToList();

                var results = new List <(string filePath, VrcMetaData vrcMetaData)>();

                foreach (var photo in photos)
                {
                    var filePath    = photo.FilePath;
                    var vrcMetaData = new VrcMetaData
                    {
                        World        = photo.World?.WorldName,
                        Date         = photo.Date,
                        Photographer = photo.Photographer?.UserName
                    };

                    foreach (var(userName, twitterScreenName) in photo.PhotoUsers.Select(pu => (pu.User.UserName, pu.User.TwitterScreenName)))
                    {
                        var user = new KoyashiroKohaku.VrcMetaTool.User(userName)
                        {
                            TwitterScreenName = twitterScreenName
                        };

                        vrcMetaData.Users.Add(user);
                    }

                    results.Add((filePath, vrcMetaData));
                }

                return(results);
            }
        }
Esempio n. 7
0
 public SearchResultUserNameTest()
 {
     _photoList = new int[] { 3, 2, 5, 10 } // 各人が含まれる写真の数
     .SelectMany((i, offset) =>
     {
         var meta = new VrcMetaData
         {
             World = "worldName"
         };
         meta.Users.Add(
             new KoyashiroKohaku.VrcMetaTool.User($"{(char)('a' + offset)}"));
         return(Enumerable.Range(0, i)
                .Select(_ =>
                        new Photo("hoge.png")
         {
             MetaData = meta,
         }));
     });
 }
Esempio n. 8
0
 public SearchResultWorldNameTest()
 {
     _photoList = new int[] { 3, 2, 5, 10 } // 各ワールドが含まれる写真の数
     .SelectMany((i, offset) =>
                 Enumerable.Range(0, i)
                 .Select(_ =>
     {
         var meta = new VrcMetaData
         {
             World = $"{(char)('a' + offset)}"
         };
         // ワールド検索だけどUserがnullだと自動的に検索から除外されてしまう
         meta.Users.Add(new KoyashiroKohaku.VrcMetaTool.User("userName"));
         return(new Photo("hoge.png")
         {
             MetaData = meta
         });
     }));
 }
Esempio n. 9
0
        public async Task <List <(string filePath, VrcMetaData vrcMetaData)> > GetVrcMetaDataIfExistsAsync(IEnumerable <string> filePaths)
        {
            var photos = await Photos
                         .Select(p =>
                                 new
            {
                p.FilePath,
                p.World,
                p.Date,
                p.Photographer,
                p.PhotoUsers
            })
                         .ToListAsync()
                         .ConfigureAwait(true);

            var results = new List <(string filePath, VrcMetaData vrcMetaData)>();

            foreach (var photo in photos)
            {
                var filePath    = photo.FilePath;
                var vrcMetaData = new VrcMetaData
                {
                    World        = photo.World?.WorldName,
                    Date         = photo.Date,
                    Photographer = photo.Photographer?.UserName
                };

                foreach (var(userName, twitterScreenName) in photo.PhotoUsers.Select(pu => (pu.User.UserName, pu.User.TwitterScreenName)))
                {
                    var user = new KoyashiroKohaku.VrcMetaTool.User(userName)
                    {
                        TwitterScreenName = twitterScreenName
                    };

                    vrcMetaData.Users.Add(user);
                }

                results.Add((filePath, vrcMetaData));
            }

            return(results);
        }
Esempio n. 10
0
        public List <(string filePath, VrcMetaData vrcMetaData)> GetVrcMetaDataIfExists(IEnumerable <string> filePaths)
        {
            return(filePaths
                   .Select((filePath, offset) =>
            {
                var meta = new VrcMetaData
                {
                    Photographer = $"user{offset}",
                    Date = DateTime.Now.AddDays(-offset),
                    World = $"world{offset}"
                };
                meta.Users.AddRange(
                    Enumerable.Range(0, offset + 1)
                    .Select(i => new User($"user{i}")
                {
                    TwitterScreenName = "@user{i}"
                }));

                return (filePath, meta);
            })
                   .ToList());
        }
Esempio n. 11
0
 public Task InsertAsync(string filePath, VrcMetaData metaData, CancellationToken cancelToken)
 {
     return(Task.Delay(100));
 }
Esempio n. 12
0
        public Task InsertAsync(string filePath, VrcMetaData metaData, CancellationToken cancelToken)
        {
            return(Task.Run(async() =>
            {
                var photo = new Photo
                {
                    FilePath = filePath
                };

                photo.Date = metaData.Date;

                using (await asyncLock.LockAsync())
                {
                    if (cancelToken.IsCancellationRequested)
                    {
                        return;
                    }

                    if (metaData.Photographer != null)
                    {
                        if (!ExistsUserByUserName(metaData.Photographer, out User user))
                        {
                            user = CreateUser(metaData.Photographer);
                        }
                        photo.Photographer = user;
                    }

                    if (metaData.World != null)
                    {
                        if (!ExistsWorldByWorldName(metaData.World, out World world))
                        {
                            world = CreateWorld(metaData.World);
                        }
                        photo.World = world;
                    }

                    if (metaData.Users != null && metaData.Users.Any())
                    {
                        foreach (var metaUser in metaData.Users)
                        {
                            if (!ExistsUserByUserName(metaUser.UserName, out User user))
                            {
                                user = CreateUser(metaUser.UserName);
                            }

                            var photoUser = CreatePhotoUser(photo, user);
                            photo.PhotoUsers.Add(photoUser);
                        }
                    }

                    _context.Photos.Add(photo);
                    count++;

                    if (count >= 100)
                    {
                        _context.SaveChanges();
                        count = 0;
                    }
                }
            }, cancelToken));
        }