Exemplo n.º 1
0
        private static WinDivertHandle OpenHandle(byte[] ruleBuffer, FilterDefinition filter, WinDivertLayer layer, short priority, WinDivertFlag flags)
        {
            LibraryMode mode = GetSafeLibraryMode();

            if (filter._stringValue != null)
            {
                int count = Encoding.ASCII.GetBytes(filter._stringValue, 0, filter._stringValue.Length, ruleBuffer, 0);
            }
            else
            {
                DivertFilterStringBuilder.WriteFilter(ruleBuffer, filter._filterExpression);
            }



            switch (mode)
            {
            case LibraryMode.Standard:
                //var rule=DivertFilterStringBuilder.MakeFilter(filter);
                //IntPtr rawHandle = Interop.NativeMethods.WinDivert.WinDivertOpen(rule, layer,priority,flags);
                IntPtr             rawHandle = Interop.NativeMethods.WinDivert.WinDivertOpen(ruleBuffer, layer, priority, flags);
                WinDivertLibHandle wh        = rawHandle;
                if (wh.IsInvalid)
                {
                    var error = NativeMethods.Kernel32.GetLastError();
                    switch (error)
                    {
                    case 2:
                        throw new Exception("Driver WinDivert32.sys or WinDivert64.sys is not found");

                    case 5:
                        throw new UnauthorizedAccessException("Need Admin");

                    case 87:
                        throw new ArgumentException("filter expression is invalid", nameof(filter));

                    case 577:
                        throw new UnauthorizedAccessException("Driver signature verification failed");

                    case 654:
                        throw new InvalidOperationException("An incompatible version of the WinDivert driver is currently loaded");

                    case 1060:
                        throw new InvalidOperationException("The handle was opened with the WINDIVERT_FLAG_NO_INSTALL flag and the WinDivert driver is not already installed.");

                    case 1275:
                        throw new UnauthorizedAccessException("Driver is blocked by other software");

                    case 1753:
                        throw new InvalidOperationException("Base Filtering Engine service has been disabled");
                    }
                }
                return(wh);

            case LibraryMode.ManagedOnly:
            default:
                throw new InvalidOperationException();
            }
        }
Exemplo n.º 2
0
 private static LibraryMode GetSafeLibraryMode()
 {
     if (_libraryMode == LibraryMode.None)
     {
         _libraryMode = LibraryMode.Standard;
     }
     return(_libraryMode);
 }
Exemplo n.º 3
0
        private void Startup(LibraryMode mode)
        {
            var version = new LibraryVersion();

            var result = link.Startup(version, mode);

            logger.Information("link.Startup({Mode}) => {Result}", mode, result);
            logger.Information("LibraryVersion {@Version}", new { version.major, version.minor, version.maintenance, version.release });
        }
Exemplo n.º 4
0
        public void Shuffle(int limitNum, LibraryMode libraryMode, bool isSelectAllMovie)
        {
            var libraries = _databaseAccessor.ShuffleLibrary(limitNum, libraryMode, isSelectAllMovie);

            LibraryItems.Clear();
            foreach (var libraryItem in libraries)
            {
                LibraryItems.Add(libraryItem);
            }
        }
        public IEnumerable<LibraryItem> ShuffleLibrary(int limitNum, LibraryMode libraryMode, bool isSelectAllMovie)
        {
            if (string.IsNullOrEmpty(_lastLibrarySelectSQL)) return Enumerable.Empty<LibraryItem>();

            // ALLMovieが選択されているときは全体からシャッフルする。
            var repSql = isSelectAllMovie ? 
                _sqlBuilder.CreateSelectLibrary(libraryMode, new LibraryCondition(FilteringMode.SQL, new FilteringCondition("", false))):
            _lastLibrarySelectSQL;

            var sql = SQLResource.SelectShuffleLibrary.Replace("#LastExecSql#", repSql);
            return SqlExecuter.Query<LibraryItem>(
                sql, 
                new { LimitNum = limitNum });
        }
Exemplo n.º 6
0
        /// <summary>
        /// グループを取得するSQLを生成します。
        /// </summary>
        /// <param name="libraryMode"></param>
        /// <param name="lastSql"></param>
        /// <returns></returns>
        public string CreateSelectGroup(LibraryMode libraryMode, string lastSql)
        {
            var sql = SQLResource.SelectGroupList;
            var join = new StringBuilder();

            switch (libraryMode)
            {
                case LibraryMode.Normal:
                    join.Append("LEFT JOIN (SELECT PPL.GID , count(*) cnt ");
                    join.Append("FROM MOVLIST PPL ");
                    join.Append("INNER JOIN  MOVLIST SPL ON PPL.ID = SPL.ID  AND ");
                    join.Append("SPL.RATING = 9");
                    join.Append(" GROUP BY PPL.GID ");
                    join.Append(") CL ON ifnull(PL.GID,'') = ifnull(CL.GID,'') ");
                    join.Append("LEFT JOIN (SELECT PPPL.GID , count(*) cnt ");
                    join.Append("FROM MOVLIST PPPL WHERE ");
                    join.Append(CreateRatingWhereString(libraryMode));
                    join.Append("GROUP BY PPPL.GID ");
                    join.Append(") ACL ON ifnull(PL.GID,'') = ifnull(ACL.GID,'') ");
                    join.Append("LEFT JOIN  MOVGROUPLIST GPL ON PL.GID = GPL.GID ");
                    sql = sql.Replace("#CLASS1COUNT#", ",ifnull(CL.cnt,0) ");
                    break;
                case LibraryMode.Favorite:
                case LibraryMode.Exclude:
                    join.Append("LEFT JOIN (SELECT PPPL.GID , count(*) cnt ");
                    join.Append("FROM MOVLIST PPPL WHERE ");
                    join.Append(CreateRatingWhereString(libraryMode));
                    join.Append(" GROUP BY PPPL.GID ");
                    join.Append(") ACL ON PL.GID = ACL.GID ");
                    join.Append("LEFT JOIN  MOVGROUPLIST GPL ON PL.GID = GPL.GID ");
                    if (libraryMode == LibraryMode.Favorite) sql = sql.Replace("#CLASS1COUNT#", ",CNT ");
                    if (libraryMode == LibraryMode.Exclude) sql = sql.Replace("#CLASS1COUNT#", ",'' ");
                    break;
            }

            sql = sql.Replace("#JOIN#", join.ToString());
            sql = sql.Replace("#LASTEXECSQL#", lastSql);

            return sql;
        }
Exemplo n.º 7
0
 public static extern Result RFID_Startup
 (
     [In, Out] LibraryVersion pVersion,
     [In]      LibraryMode mode
 );
Exemplo n.º 8
0
        public static LibraryViewModel Create(LibraryResult result, string tabId, int parentId, int?filterFileTypeId, bool allowUpload, LibraryMode mode)
        {
            var model = Create <LibraryViewModel>(tabId, parentId);

            model.Mode             = mode;
            model.RootFolder       = result.Folder;
            model.FilterFileTypeId = filterFileTypeId;
            model.AllowUpload      = allowUpload;
            return(model);
        }
Exemplo n.º 9
0
        /// <summary>
        /// ライブラリを取得するSQLを生成します。
        /// </summary>
        /// <returns></returns>
        public string CreateSelectLibrary(LibraryMode libraryMode, LibraryCondition libCondition)
        {
            bool isFullSql = false;
            var sb = new StringBuilder();
            sb.Append(SQLResource.SelectLibraryList);
            sb.Append(" WHERE ");
            sb.Append(CreateRatingWhereString(libraryMode));

            if (!string.IsNullOrEmpty(libCondition.FilteringText))
            {
                // フィルタリング
                var filterString = libCondition.FilteringText.ToLower();
                sb.Append(" AND ");
                var normalFilter = "lower(IFNULL(FILEPATH,'') || IFNULL(TITLE,'') || IFNULL(GPL.GROUPNAME,'') || IFNULL(SEASON,'')) LIKE '%" +
                        EscapeSQL(filterString) + "%' ";
                if (filterString.Length < 3)
                {
                    sb.Append(normalFilter);
                }
                else
                {
                    var migemoFilter = "ISMATCHMIGEMO('" + EscapeSQL(filterString) +
                                       "',lower(IFNULL(FILEPATH,'') || IFNULL(TITLE,'') || IFNULL(GPL.GROUPNAME,''))) ";
                    sb.Append(string.Format("(({0}) OR ({1}))", normalFilter, migemoFilter));
                }
            }

            var condSql = libCondition.Condition.Sql;

            switch (libCondition.FilteringMode)
            {
                case FilteringMode.SQL:
                    condSql = condSql.ToUpper();
                    if (string.IsNullOrEmpty(condSql)) break;
                    if (!(condSql.Substring(0, 3).Equals("AND")
                          || condSql.Substring(0, 2).Equals("OR"))) isFullSql = true;
                    sb.Append(condSql);
                    break;

                case FilteringMode.Group:
                    // TODO: Gidでもよいのでは?
                    sb.Append(" AND ");
                    if (!string.IsNullOrEmpty(condSql))
                    {
                        sb.Append(" GPL.GROUPNAME = '" + EscapeSQL(condSql) + "'");
                    }
                    else
                    {
                        sb.Append(" GPL.GROUPNAME IS NULL ");
                    }
                    sb.Append(" ORDER BY round(PL.NO)");
                    break;
            }
            

            var sql = sb.ToString();
            if (isFullSql) sql = SQLResource.SelectLibraryList + " " + condSql;
            if (!sql.ToUpper().Contains("ORDER BY")) sql += " ORDER BY PL.DATE desc ";
            if (libCondition.Condition.IsLimited && libCondition.MaxLimitNum > 0) sql += string.Format(" LIMIT {0}", libCondition.MaxLimitNum);
            return sql;
        }
Exemplo n.º 10
0
 /// <summary>
 /// RATING条件を生成します。
 /// </summary>
 /// <param name="libraryMode"></param>
 /// <returns></returns>
 private string CreateRatingWhereString(LibraryMode libraryMode)
 {
     switch (libraryMode)
     {
         case LibraryMode.Normal:
             return "RATING > 0 ";
         case LibraryMode.Favorite:
             return "RATING = 9 ";
         case LibraryMode.Exclude:
             return "RATING = 0 ";
     }
     return "";
 }
Exemplo n.º 11
0
 public void SetToPicker(System.Action <ActorableSearchResult> pickerCallback)
 {
     libraryMode         = LibraryMode.Picker;
     this.pickerCallback = pickerCallback;
 }
Exemplo n.º 12
0
 public void SetToCreateTool()
 {
     libraryMode = LibraryMode.CreateTool;
 }