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(); } }
private static LibraryMode GetSafeLibraryMode() { if (_libraryMode == LibraryMode.None) { _libraryMode = LibraryMode.Standard; } return(_libraryMode); }
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 }); }
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 }); }
/// <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; }
public static extern Result RFID_Startup ( [In, Out] LibraryVersion pVersion, [In] LibraryMode mode );
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); }
/// <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; }
/// <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 ""; }
public void SetToPicker(System.Action <ActorableSearchResult> pickerCallback) { libraryMode = LibraryMode.Picker; this.pickerCallback = pickerCallback; }
public void SetToCreateTool() { libraryMode = LibraryMode.CreateTool; }