示例#1
0
        // --------------------------------------------------------------------
        // TYukariRequest → TYukariStatistics へコピー
        // --------------------------------------------------------------------
        private static void CopyYukariRequestToYukariStatistics(TYukariRequest yukariRequest, TYukariStatistics yukariStatistics)
        {
            // EF Core では、代入しても実際の値が更新されていなければ更新と判定されない(無駄な保存が発生しない)模様なので、プログラムでは更新チェックはせずに常に代入する
            // 途中で変わるものについては、変わったら Dirty フラグを立てる必要がある
            yukariStatistics.RequestId        = yukariRequest.Id;
            yukariStatistics.RequestMoviePath = yukariRequest.Path;
            yukariStatistics.RequestSinger    = yukariRequest.Singer;

            yukariStatistics.Dirty         |= yukariStatistics.RequestComment != yukariRequest.Comment;
            yukariStatistics.RequestComment = yukariRequest.Comment;

            yukariStatistics.Dirty       |= yukariStatistics.RequestOrder != yukariRequest.Order;
            yukariStatistics.RequestOrder = yukariRequest.Order;

            yukariStatistics.Dirty           |= yukariStatistics.RequestKeyChange != yukariRequest.KeyChange;
            yukariStatistics.RequestKeyChange = yukariRequest.KeyChange;
        }
示例#2
0
 // --------------------------------------------------------------------
 // 統計を必要に応じて更新
 // --------------------------------------------------------------------
 private static void UpdateExistStatisticsIfNeeded(TYukariStatistics existStatistics, TYukariRequest yukariRequest, DbSet <TFound> founds)
 {
     CopyYukariRequestToYukariStatistics(yukariRequest, existStatistics);
     CopyFoundToYukariStatisticsIfNeeded(founds, existStatistics);
 }
示例#3
0
 // --------------------------------------------------------------------
 // request.db の 1 レコードが既に統計に追加されていればその統計レコードを返す
 // --------------------------------------------------------------------
 private static TYukariStatistics?ExistStatisticsRecord(DbSet <TYukariStatistics> yukariStatistics, TYukariRequest yukariRequest)
 {
     // request.db ファイル名、ゆかり予約 Id、Path、Singer のすべてが一致したものを既存レコードとする
     // かつ、この PC で追加したレコード(ID 接頭辞の先頭が一致するレコード)を既存レコードとする
     // かつ、推定予約日時が全消去検知日時以降のものを既存レコードとする
     // ルーム名は途中で変更されることがあるので判定に使用しない
     return(yukariStatistics.Where(x => x.RequestTime >= YlModel.Instance.EnvModel.YlSettings.LastYukariRequestClearTime &&
                                   x.RequestId == yukariRequest.Id && x.RequestDatabasePath == YlModel.Instance.EnvModel.YlSettings.YukariRequestDatabasePath() &&
                                   x.RequestMoviePath == yukariRequest.Path && x.RequestSinger == yukariRequest.Singer &&
                                   EF.Functions.Like(x.Id, $"{YlModel.Instance.EnvModel.YlSettings.IdPrefix}%")).OrderByDescending(x => x.RequestTime).FirstOrDefault());
 }
示例#4
0
        // ====================================================================
        // private 関数
        // ====================================================================

        // --------------------------------------------------------------------
        // request.db の 1 レコードを統計に追加
        // --------------------------------------------------------------------
        private async Task AddYukariRequest(DbSet <TYukariStatistics> yukariStatistics, TYukariRequest yukariRequest, DbSet <TFound> founds)
        {
            try
            {
                Debug.Assert(MainWindowViewModel != null, "AddYukariRequest() MainWindowViewModel is null");
                await YlCommon.InputIdPrefixIfNeededWithInvoke(MainWindowViewModel);
            }
            catch (Exception)
            {
                // OperationCanceledException を通常の例外に変換
                throw new Exception("ID 接頭辞が設定されていません。");
            }
            Debug.Assert(YlModel.Instance.EnvModel.YlSettings.IdPrefix != null, "AddYukariRequest() IdPrefix is null");
            TYukariStatistics yukariStatisticsRecord = new()
            {
                Id    = YlModel.Instance.EnvModel.YlSettings.PrepareYukariStatisticsLastId(yukariStatistics),
                Dirty = true,
                RequestDatabasePath = YlModel.Instance.EnvModel.YlSettings.YukariRequestDatabasePath(),
                RequestTime         = YukariRequestContext.LastWriteMjd(),
                RoomName            = YlModel.Instance.EnvModel.YlSettings.YukariRoomName,
                //IdPrefix = YukaListerModel.Instance.EnvModel.YlSettings.IdPrefix,
            };

            CopyYukariRequestToYukariStatistics(yukariRequest, yukariStatisticsRecord);
            CopyFoundToYukariStatisticsIfNeeded(founds, yukariStatisticsRecord);
            yukariStatistics.Add(yukariStatisticsRecord);
            Debug.WriteLine("AddYukariRequest() 追加: " + yukariStatisticsRecord.RequestMoviePath);
        }