/// <summary>
        /// Gets a list of devices that match the filter criteria.
        /// </summary>
        /// <param name="deviceFilter">The device filter.</param>
        /// <returns>An array of DeviceInformation objects.</returns>
        public static DeviceInformation[] GetDevices(DeviceFilter deviceFilter)
        {
            List <DeviceInformation> result = new List <DeviceInformation>();

            Guid emptyGuid = Guid.Empty;

            int filter;

            if (deviceFilter == DeviceFilter.AllDevices || deviceFilter == DeviceFilter.AllPciDevices)
            {
                filter = (int)DIGCF.DIGCF_ALLCLASSES;
            }
            else
            {
                filter = (int)DIGCF.DIGCF_ALLCLASSES | (int)DIGCF.DIGCF_PRESENT;
            }

            IntPtr deviceInfoSet =
                Win32SetupApi.SetupDiGetClassDevs(
                    ref emptyGuid,
                    IntPtr.Zero,
                    IntPtr.Zero,
                    filter);

            SP_DEVINFO_DATA deviceInfoData =
                new SP_DEVINFO_DATA();

            deviceInfoData.Size = Marshal.SizeOf(typeof(SP_DEVINFO_DATA));

            for (int i = 0; Win32SetupApi.SetupDiEnumDeviceInfo(deviceInfoSet, i, ref deviceInfoData); i++)
            {
                DeviceInformation deviceInformation =
                    GetDeviceInformation(deviceInfoSet, deviceInfoData);

                switch (deviceFilter)
                {
                case DeviceFilter.PresentPciDevices:
                case DeviceFilter.AllPciDevices:
                    if (!deviceInformation.LocationInfo
                        .ToLowerInvariant().Contains("pci"))
                    {
                        continue; // relates to the for-loop
                    }
                    else
                    {
                        break; // relates to the switch
                    }

                case DeviceFilter.AllDevices:
                default:
                    break;
                }

                result.Add(deviceInformation);
            }

            Win32SetupApi.SetupDiDestroyDeviceInfoList(deviceInfoSet);

            return(result.ToArray());
        }
예제 #2
0
        public void Add(DeviceList deviceList, DeviceFilter filter)
        {
            Throw.If.Null(deviceList, "deviceList").Null(filter, "filter");

            var    oldDevices       = new Device[0];
            Action updateDeviceList = () =>
            {
                var newDevices = deviceList.GetAllDevices(filter).ToArray();

                lock (_refCounts)
                {
                    foreach (var newDevice in newDevices)
                    {
                        IncrementRefCount(newDevice);
                    }

                    foreach (var oldDevice in oldDevices)
                    {
                        DecrementRefCount(oldDevice);
                    }
                }

                oldDevices = newDevices;
                RaiseChangedIfDirty();
            };

            _areDriversBeingInstalled.Add(() => deviceList.AreDriversBeingInstalled);
            deviceList.Changed += (sender, e) => updateDeviceList();
            updateDeviceList();
        }
예제 #3
0
        public async Task <bool> AnyDevicesWithSerialNumber(string serialNumber)
        {
            var service = ServicesManager.SelfService;
            var Filter  = new DeviceFilter();

            Filter.SerialNumberFilter = serialNumber;

            try
            {
                GetDevicesResponse deviceResponse = await service.GetDevices(Token, Filter);

                if (deviceResponse == null || deviceResponse.Error != ErrorCode.OK)
                {
                    Notify(deviceResponse);
                    return(true);
                }
                else if (deviceResponse.Devices != null && deviceResponse.Devices.Any())
                {
                    return(true);
                }
            }
            catch (ServiceException ex)
            {
                //TODO: HIGH Add logging
                Notify(ex.Message);
            }

            return(false);
        }
예제 #4
0
        public ICollection <DeviceSyncDto> GetDevices(IEnumerable <DeviceSyncDto> devices)
        {
            var filter = new DeviceFilter
            {
                Ids = devices.Select(s => s.Id)
            };

            return(ServiceHandler.Get(filter).ToList());
        }
예제 #5
0
 public List <Device> GetAll(DeviceFilter filter = null)
 {
     using (var context = new DeviceHiveContext())
     {
         return(context.Devices
                .Include(e => e.Network)
                .Include(e => e.DeviceClass.Equipment)
                .Filter(filter).ToList());
     }
 }
예제 #6
0
 public List <Device> GetByNetwork(int networkId, DeviceFilter filter = null)
 {
     using (var context = new DeviceHiveContext())
     {
         return(context.Devices
                .Include(e => e.Network)
                .Include(e => e.DeviceClass.Equipment)
                .Where(e => e.Network.ID == networkId)
                .Filter(filter).ToList());
     }
 }
예제 #7
0
 public List <Device> GetByUser(int userId, DeviceFilter filter = null)
 {
     using (var context = new DeviceHiveContext())
     {
         return(context.Devices
                .Include(e => e.Network)
                .Include(e => e.DeviceClass.Equipment)
                .Where(e => context.UserNetworks.Any(n => n.UserID == userId && n.NetworkID == e.NetworkID))
                .Filter(filter).ToList());
     }
 }
예제 #8
0
        // полчить все газоанализаторы по фильтру
        public async Task <List <Device> > GetAllDevicesFiltered(DeviceFilter filter)
        {
            var fb = Builders <Device> .Filter;

            FilterDefinition <Device> f =
                fb.Eq("Name", filter.ByName) |
                fb.Eq("Manufacturer", filter.ByManufacturer) |
                fb.Eq("ScopeOfApplication", filter.ByScopeOfApplication) |
                fb.Eq("Type", filter.ByType);

            if (filter.BySubstance != null)
            {
                f |= fb.All("Substance", filter.BySubstance);
            }

            return(await DeviceCollection.Find(f).ToListAsync());
        }
예제 #9
0
        public Device Get(string id, User user = null)
        {
            IFilter <Device> filter = new DeviceFilter();

            if (user != null)
            {
                filter = new IdentityDeviceFilter(filter, user);
            }
            Device device = deviceRepository.GetById(id, filter);

            if (device == null)
            {
                throw new NotFoundException(typeof(Device));
            }

            return(device);
        }
예제 #10
0
        public ActionResult <GetDevicesResponse> GetDevices(DeviceFilter filter)
        {
            var devices = _deviceService.Get(filter);
            var overall = _deviceService.BaseDeviceCount();
            int pages   = overall / filter.PageSize;

            if ((overall % filter.PageSize) != 0)
            {
                pages++;
            }

            return(new GetDevicesResponse()
            {
                Count = filter.PageSize,
                Devices = devices,
                From = filter.PageSize * filter.Page,
                Overall = overall,
                Pages = pages
            });
        }
예제 #11
0
        public static string ToQueryParams(this DeviceFilter filter)
        {
            string queryParams = string.Empty;

            if (filter.Users?.Any() ?? false)
            {
                foreach (var userId in filter.Users)
                {
                    queryParams = QueryParamsHelper.AddParams(queryParams, $"users={userId}");
                }
            }

            if (!string.IsNullOrWhiteSpace(filter.OperativeSystem))
            {
                queryParams = QueryParamsHelper.AddParams(queryParams, $"operativeSystem={filter.OperativeSystem}");
            }

            if (!string.IsNullOrWhiteSpace(filter.Name))
            {
                queryParams = QueryParamsHelper.AddParams(queryParams, $"name={filter.Name}");
            }

            return(queryParams);
        }
예제 #12
0
 public PaginatedItems <Device> GetAll(DeviceFilter filter, int rowsPerPage, int pageNumber)
 {
     return(deviceRepository.GetAllPaginated(filter, rowsPerPage, pageNumber));
 }
예제 #13
0
        public async Task <IActionResult> Get([FromQuery] DeviceFilter filter, [FromQuery] int rowsPerPage = 0, [FromQuery] int pageNumber = 1)
        {
            var devices = deviceService.GetAll(filter, rowsPerPage, pageNumber);

            return(Ok(Mapper.Map <PaginatedItemsDto <DeviceOverviewDto> >(devices)));
        }
예제 #14
0
        public ICollection <DeviceSyncDto> GetDevices()
        {
            var filter = new DeviceFilter();

            return(ServiceHandler.Get(filter).ToList());
        }
예제 #15
0
 public List <Device> GetAll(DeviceFilter filter = null)
 {
     return(_mongo.Devices.AsQueryable().Filter(filter).ToList());
 }
예제 #16
0
 public SetDeviceFilterOption(Expression <Func <T, bool> > prepicate, IQueryable <T> devices, DeviceFilter <T> filter)
     : base(prepicate, devices, filter)
 {
 }
예제 #17
0
 public Task <OperationResult <IList <Device> > > GetAllAsync(DeviceFilter filter)
 => _apiClient.GetAsync <OperationResult <IList <Device> > >(URL + filter.ToQueryParams());
예제 #18
0
        public List <Device> GetByUser(int userId, DeviceFilter filter = null)
        {
            var networkIds = _mongo.UserNetworks.AsQueryable().Where(e => e.UserID == userId).Select(e => (int?)e.NetworkID).ToArray();

            return(_mongo.Devices.AsQueryable().Where(e => networkIds.Contains(e.NetworkID)).Filter(filter).ToList());
        }
예제 #19
0
 public List <Device> GetByNetwork(int networkId, DeviceFilter filter = null)
 {
     return(_mongo.Devices.AsQueryable().Where(e => e.NetworkID == networkId).Filter(filter).ToList());
 }
예제 #20
0
        // получить страницу газоанализаторов с учётом фильтра
        public async Task <List <Device> > GetPageOfDevicesFiltered(int pageNumber, int pageSize, DeviceFilter filter)
        {
            var fb = Builders <Device> .Filter;

            FilterDefinition <Device> f =
                fb.Eq("Name", filter.ByName) |
                fb.Eq("Manufacturer", filter.ByManufacturer) |
                fb.Eq("ScopeOfApplication", filter.ByScopeOfApplication) |
                fb.Eq("Type", filter.ByType);

            if (filter.BySubstance != null)
            {
                f |= fb.All("Substance", filter.BySubstance);
            }

            return(await DeviceCollection.Find(f).Skip((pageNumber - 1) * pageSize).Limit(pageSize).ToListAsync());
        }
예제 #21
0
        public async Task <GetDevicesResponse> GetDevices(string token, DeviceFilter filter)
        {
            var devices = await RequestHandler.ProcessPostRequest <GetDevicesResponse, DeviceFilter>(POST_GETDEVICES, filter, token);

            return(devices);
        }
예제 #22
0
 public DeviceViewModel()
 {
     Filter = new DeviceFilter();
 }
예제 #23
0
        public static IQueryable <Device> Filter(this IQueryable <Device> query, DeviceFilter filter)
        {
            if (filter == null)
            {
                return(query);
            }

            if (filter.Name != null)
            {
                query = query.Where(e => e.Name == filter.Name);
            }

            if (filter.NamePattern != null)
            {
                query = query.Where(e => e.Name.Contains(filter.NamePattern));
            }

            if (filter.Status != null)
            {
                query = query.Where(e => e.Status == filter.Status);
            }

            if (filter.NetworkID != null)
            {
                query = query.Where(e => e.NetworkID == filter.NetworkID.Value);
            }

            if (filter.NetworkName != null)
            {
                query = query.Where(e => e.Network.Name == filter.NetworkName);
            }

            if (filter.DeviceClassID != null)
            {
                query = query.Where(e => e.DeviceClassID == filter.DeviceClassID.Value);
            }

            if (filter.DeviceClassName != null)
            {
                query = query.Where(e => e.DeviceClass.Name == filter.DeviceClassName);
            }

            if (filter.DeviceClassVersion != null)
            {
                query = query.Where(e => e.DeviceClass.Version == filter.DeviceClassVersion);
            }

            if (filter.SortField != DeviceSortField.None)
            {
                switch (filter.SortField)
                {
                case DeviceSortField.ID:
                    query = query.OrderBy(e => e.ID, filter.SortOrder);
                    break;

                case DeviceSortField.Name:
                    query = query.OrderBy(e => e.Name, filter.SortOrder);
                    break;

                case DeviceSortField.Status:
                    query = query.OrderBy(e => e.Status, filter.SortOrder)
                            .ThenBy(e => e.Name, filter.SortOrder);
                    break;

                case DeviceSortField.Network:
                    query = query.OrderBy(e => e.Network.Name, filter.SortOrder)
                            .ThenBy(e => e.Name, filter.SortOrder);
                    break;

                case DeviceSortField.DeviceClass:
                    query = query.OrderBy(e => e.DeviceClass.Name, filter.SortOrder)
                            .ThenBy(e => e.DeviceClass.Version, filter.SortOrder)
                            .ThenBy(e => e.Name, filter.SortOrder);
                    break;
                }
            }

            if (filter.Skip != null)
            {
                query = query.Skip(filter.Skip.Value);
            }

            if (filter.Take != null)
            {
                query = query.Take(filter.Take.Value);
            }

            return(query);
        }
예제 #24
0
        public IActionResult Get([FromQuery] DeviceFilter filter)
        {
            IEnumerable <Device> devices = deviceService.Get(filter);

            return(Ok(mapper.Map <IEnumerable <string> >(devices)));
        }
예제 #25
0
 public IEnumerable <Device> GetDevices(DeviceTypes types, DeviceFilter filter)
 {
     Throw.If.Null(filter, "filter");
     return(GetDevices(types).Where(device => filter(device)));
 }
예제 #26
0
 /// <summary>
 /// Gets a list of connected devices, filtered by some criteria.
 /// </summary>
 /// <param name="filter">The filter criteria.</param>
 /// <returns>The filtered device list.</returns>
 public IEnumerable <Device> GetAllDevices(DeviceFilter filter)
 {
     Throw.If.Null(filter, "filter");
     return(GetAllDevices().Where(device => filter(device)));
 }