public Program GetProgram(string fileName, string fileProductName)
 {
     var db = new x360ceModelContainer();
     var o = db.Programs.FirstOrDefault(x => x.FileName == fileName && x.FileProductName == fileProductName);
     if (o != null) return o;
     o = db.Programs.FirstOrDefault(x => x.FileName == fileName);
     db.Dispose();
     db = null;
     return o;
 }
 public string DeleteSetting(Setting s)
 {
     var db = new x360ceModelContainer();
     var setting = db.Settings.FirstOrDefault(x => x.InstanceGuid == s.InstanceGuid && x.FileName == s.FileName && x.FileProductName == s.FileProductName);
     if (setting == null) return "Setting not found";
     db.Settings.DeleteObject(setting);
     db.SaveChanges();
     db.Dispose();
     db = null;
     return "";
 }
 public List<Program> GetPrograms(EnabledState isEnabled, int minInstanceCount)
 {
     var programs = GetOverridePrograms();
     if (programs == null)
     {
         var db = new x360ceModelContainer();
         IQueryable<Program> list = db.Programs;
         if (isEnabled == EnabledState.Enabled) list = list.Where(x => x.IsEnabled);
         else if (isEnabled == EnabledState.Disabled) list = list.Where(x => !x.IsEnabled);
         if (minInstanceCount > 0) list = list.Where(x => x.InstanceCount == minInstanceCount);
         programs = list.ToList();
         db.Dispose();
         db = null;
     }
     return programs;
 }
Beispiel #4
0
        public SearchResult GetPresets()
        {
            var sr = new SearchResult();
            var db = new x360ceModelContainer();
            IQueryable<Program> list = db.Programs;
            // Not used.
            sr.Settings = new Setting[0];
            // Contains TOP 20 most popular DirectInput devices.
            var query = db.Products.OrderByDescending(x => x.InstanceCount).Take(20);
            var products = query.ToArray();
            var productGuids = products.Select(x => x.ProductGuid).ToArray();
            // Select TOP products
            var query2 =
                // Select most popular devices.
                from row in query
                // Join all sumaries for these devices.
                join sum in db.Summaries on row.ProductGuid equals sum.ProductGuid
                // Group in order to identify most popular PAD setting for the device.
                group sum by new { sum.ProductGuid, sum.PadSettingChecksum } into g
                select g.OrderByDescending(x => x.Users).First();

            var padSettingGuids = query2.ToList();
            // Fill summaries.
            sr.Summaries = padSettingGuids.Select(x => new Summary()
            {
                ProductGuid = x.ProductGuid,
                ProductName = x.ProductName,
                PadSettingChecksum = x.PadSettingChecksum,
            }).ToArray();
            var settingChecksums = padSettingGuids.Select(x => x.PadSettingChecksum).ToArray();
            //// Join all pad setings related to summaries.
            //join pad in db.PadSettings on sum.PadSettingChecksum equals pad.PadSettingChecksum
            //select new
            //{
            //    Summary = sum,
            //    PadSetting = pad,
            //};
            // Contains most popular PAD Setting for device.
            sr.PadSettings = new PadSetting[0];
            // Code here.
            db.Dispose();
            db = null;
            return sr;
        }
 public string SetProgram(Program p)
 {
     if (HttpContext.Current.User.Identity.IsAuthenticated)
     {
         var db = new x360ceModelContainer();
         var o = db.Programs.FirstOrDefault(x => x.FileName == p.FileName && x.FileProductName == p.FileProductName);
         if (o == null)
         {
             o = new Program();
             o.ProgramId = Guid.NewGuid();
             o.DateCreated = DateTime.Now;
             o.FileName = p.FileName;
             o.FileProductName = p.FileProductName;
             db.Programs.AddObject(o);
         }
         else
         {
             o.DateUpdated = DateTime.Now;
         }
         o.HookMask = p.HookMask;
         o.InstanceCount = p.InstanceCount;
         o.IsEnabled = p.IsEnabled;
         o.XInputMask = p.XInputMask;
         db.SaveChanges();
         db.Dispose();
         db = null;
         return "";
     }
     else
     {
         return "User was not authenticated.";
     }
 }
 public string SaveSetting(Setting s, PadSetting ps)
 {
     var checksum = ps.GetCheckSum();
     var db = new x360ceModelContainer();
     var s1 = db.Settings.FirstOrDefault(x => x.InstanceGuid == s.InstanceGuid && x.FileName == s.FileName && x.FileProductName == s.FileProductName);
     var n = DateTime.Now;
     if (s1 == null)
     {
         s1 = new Setting();
         s1.SettingId = Guid.NewGuid();
         s1.DateCreated = n;
         db.Settings.AddObject(s1);
     }
     s1.Comment = s.Comment;
     s1.DateUpdated = n;
     s1.DateSelected = n;
     s1.DeviceType = s.DeviceType;
     s1.FileName = s.FileName;
     s1.FileProductName = s.FileProductName;
     s1.InstanceGuid = s.InstanceGuid;
     s1.InstanceName = s.InstanceName;
     s1.ProductGuid = s.ProductGuid;
     s1.ProductName = s.ProductName;
     s1.IsEnabled = s.IsEnabled;
     s1.PadSettingChecksum = checksum;
     // Save Pad Settings.
     var p1 = db.PadSettings.FirstOrDefault(x => x.PadSettingChecksum == checksum);
     if (p1 == null)
     {
         p1 = new PadSetting();
         p1.PadSettingChecksum = checksum;
         db.PadSettings.AddObject(p1);
     }
     p1.AxisToDPadDeadZone = ps.AxisToDPadDeadZone;
     p1.AxisToDPadEnabled = ps.AxisToDPadEnabled;
     p1.AxisToDPadOffset = ps.AxisToDPadOffset;
     p1.ButtonA = ps.ButtonA;
     p1.ButtonB = ps.ButtonB;
     p1.ButtonBig = string.IsNullOrEmpty(ps.ButtonBig) ? "" : ps.ButtonBig;
     p1.ButtonGuide = string.IsNullOrEmpty(ps.ButtonGuide) ? "" : ps.ButtonGuide;
     p1.ButtonBack = ps.ButtonBack;
     p1.ButtonStart = ps.ButtonStart;
     p1.ButtonX = ps.ButtonX;
     p1.ButtonY = ps.ButtonY;
     p1.DPad = ps.DPad;
     p1.DPadDown = ps.DPadDown;
     p1.DPadLeft = ps.DPadLeft;
     p1.DPadRight = ps.DPadRight;
     p1.DPadUp = ps.DPadUp;
     p1.ForceEnable = ps.ForceEnable;
     p1.ForceOverall = ps.ForceOverall;
     p1.ForceSwapMotor = ps.ForceSwapMotor;
     p1.ForceType = ps.ForceType;
     p1.GamePadType = ps.GamePadType;
     p1.LeftMotorPeriod = ps.LeftMotorPeriod;
     p1.LeftMotorStrength = string.IsNullOrEmpty(ps.LeftMotorStrength) ? "100" : ps.LeftMotorStrength;
     p1.LeftShoulder = ps.LeftShoulder;
     p1.LeftThumbAntiDeadZoneX = ps.LeftThumbAntiDeadZoneX;
     p1.LeftThumbAntiDeadZoneY = ps.LeftThumbAntiDeadZoneY;
     p1.LeftThumbAxisX = ps.LeftThumbAxisX;
     p1.LeftThumbAxisY = ps.LeftThumbAxisY;
     p1.LeftThumbButton = ps.LeftThumbButton;
     p1.LeftThumbDeadZoneX = ps.LeftThumbDeadZoneX;
     p1.LeftThumbDeadZoneY = ps.LeftThumbDeadZoneY;
     p1.LeftThumbLinearX = string.IsNullOrEmpty(ps.LeftThumbLinearX) ? "" : ps.LeftThumbLinearX;
     p1.LeftThumbLinearY = string.IsNullOrEmpty(ps.LeftThumbLinearY) ? "" : ps.LeftThumbLinearY;
     p1.LeftThumbDown = ps.LeftThumbDown;
     p1.LeftThumbLeft = ps.LeftThumbLeft;
     p1.LeftThumbRight = ps.LeftThumbRight;
     p1.LeftThumbUp = ps.LeftThumbUp;
     p1.LeftTrigger = ps.LeftTrigger;
     p1.LeftTriggerDeadZone = ps.LeftTriggerDeadZone;
     p1.PassThrough = ps.PassThrough;
     p1.RightMotorPeriod = ps.RightMotorPeriod;
     p1.RightMotorStrength = string.IsNullOrEmpty(ps.RightMotorStrength) ? "100" : ps.RightMotorStrength;
     p1.RightShoulder = ps.RightShoulder;
     p1.RightThumbAntiDeadZoneX = ps.RightThumbAntiDeadZoneX;
     p1.RightThumbAntiDeadZoneY = ps.RightThumbAntiDeadZoneY;
     p1.RightThumbLinearX = string.IsNullOrEmpty(ps.RightThumbLinearX) ? "" : ps.RightThumbLinearX;
     p1.RightThumbLinearY = string.IsNullOrEmpty(ps.RightThumbLinearY) ? "" : ps.RightThumbLinearY;
     p1.RightThumbAxisX = ps.RightThumbAxisX;
     p1.RightThumbAxisY = ps.RightThumbAxisY;
     p1.RightThumbButton = ps.RightThumbButton;
     p1.RightThumbDeadZoneX = ps.RightThumbDeadZoneX;
     p1.RightThumbDeadZoneY = ps.RightThumbDeadZoneY;
     p1.RightThumbDown = ps.RightThumbDown;
     p1.RightThumbLeft = ps.RightThumbLeft;
     p1.RightThumbRight = ps.RightThumbRight;
     p1.RightThumbUp = ps.RightThumbUp;
     p1.RightTrigger = ps.RightTrigger;
     p1.RightTriggerDeadZone = ps.RightTriggerDeadZone;
     db.SaveChanges();
     db.Dispose();
     db = null;
     return "";
 }
 public SettingsData GetSettingsData()
 {
     var data = new SettingsData();
     var db = new x360ceModelContainer();
     data.Programs = db.Programs.Where(x => x.IsEnabled && x.InstanceCount > 1).ToList();
     db.Dispose();
     db = null;
     return data;
 }
 public List<Vendor> GetVendors()
 {
     var db = new x360ceModelContainer();
     var q = from row in db.Vendors
             select new Vendor
             {
                 VendorId = row.VendorId,
                 VendorName = row.VendorName,
                 ShortName = row.ShortName,
                 WebSite = row.WebSite
             };
     var vendors = q.ToList();
     db.Dispose();
     db = null;
     return vendors;
 }
 public SearchResult LoadSetting(Guid[] checksum)
 {
     var sr = new SearchResult();
     var db = new x360ceModelContainer();
     sr.PadSettings = db.PadSettings.Where(x => checksum.Contains(x.PadSettingChecksum)).ToArray();
     db.Dispose();
     db = null;
     return sr;
 }
 public SearchResult SearchSettings(SearchParameter[] args)
 {
     var sr = new SearchResult();
     var db = new x360ceModelContainer();
     // Get all device instances of the user.
     var instances = args.Where(x => x.InstanceGuid != Guid.Empty).Select(x => x.InstanceGuid).Distinct().ToArray();
     if (instances.Length == 0)
     {
         sr.Settings = new Setting[0];
     }
     else
     {
         // Get all settings attached to user's device instances.
         sr.Settings = db.Settings.Where(x => instances.Contains(x.InstanceGuid))
             .OrderBy(x => x.ProductName).ThenBy(x => x.FileName).ThenBy(x => x.FileProductName).ToArray();
     }
     // Get list of products (unique identifiers).
     var products = args.Where(x => x.ProductGuid != Guid.Empty).Select(x => x.ProductGuid).Distinct().ToArray();
     var files = args.Where(x => !string.IsNullOrEmpty(x.FileName) || !string.IsNullOrEmpty(x.FileProductName)).ToList();
     if (products.Length == 0)
     {
         sr.Summaries = new Summary[0];
     }
     else
     {
         files.Add(new SearchParameter() { FileName = "", FileProductName = "" });
         Expression body = null;
         var param = Expression.Parameter(typeof(Summary), "x");
         var pgParam = Expression.PropertyOrField(param, "ProductGuid");
         var fnParam = Expression.PropertyOrField(param, "FileName");
         var fpParam = Expression.PropertyOrField(param, "FileProductName");
         for (int i = 0; i < products.Length; i++)
         {
             var productGuid = products[i];
             for (int f = 0; f < files.Count; f++)
             {
                 var fileName = files[f].FileName;
                 var fileProductName = files[f].FileProductName;
                 var exp1 = Expression.AndAlso(
                         Expression.Equal(pgParam, Expression.Constant(productGuid)),
                         Expression.Equal(fnParam, Expression.Constant(fileName))
                    );
                 exp1 = Expression.AndAlso(exp1, Expression.Equal(fpParam, Expression.Constant(fileProductName)));
                 body = body == null ? exp1 : Expression.OrElse(body, exp1).Reduce();
             }
         }
         var lambda = Expression.Lambda<Func<Summary, bool>>(body, param);
         // Select only TOP 10 configurations per per controller and file.
         var summaries = db.Summaries.Where(lambda).ToArray();
         var topSummaries = new List<Summary>();
         var productGuids = db.Summaries.Where(lambda).Select(x => x.ProductGuid).Distinct();
         foreach (var pg in productGuids)
         {
             var controllerSummaries = summaries.Where(x => x.ProductGuid == pg);
             var fileNames = controllerSummaries.Select(x => x.FileName).Distinct();
             foreach (var fileName in fileNames)
             {
                 // Top 10 configurations per file
                 topSummaries.AddRange(controllerSummaries.Where(x => x.FileName == fileName).OrderByDescending(x => x.Users).Take(10));
             }
         }
         sr.Summaries = topSummaries.OrderBy(x => x.ProductName).ThenBy(x => x.FileName).ThenBy(x => x.FileProductName).ThenBy(x => x.Users).ToArray();
     }
     db.Dispose();
     db = null;
     return sr;
 }
 public string SetGames(CloudAction action, List<Game> games)
 {
     if (action == CloudAction.Delete)
     {
         var db = new x360ceModelContainer();
         var deleted = 0;
         for (int i = 0; i < games.Count; i++)
         {
             var game = games[i];
             var diskDriveId = game.DiskDriveId;
             var fileName = game.FileName;
             var currentGame = db.Games.FirstOrDefault(x => x.DiskDriveId == diskDriveId && x.FileName == fileName);
             if (currentGame == null) continue;
             db.Games.DeleteObject(currentGame);
             deleted++;
         }
         db.SaveChanges();
         db.Dispose();
         db = null;
         return string.Format("{0} game(s) deleted.", deleted);
     }
     else
     {
         var db = new x360ceModelContainer();
         var created = 0;
         var updated = 0;
         for (int i = 0; i < games.Count; i++)
         {
             var game = games[i];
             var diskDriveId = game.DiskDriveId;
             var fileName = game.FileName;
             var item = db.Games.FirstOrDefault(x => x.DiskDriveId == diskDriveId && x.FileName == fileName);
             if (item == null)
             {
                 created++;
                 item = new Game();
                 item.GameId = Guid.NewGuid();
                 db.Games.AddObject(item);
                 item.DateCreated = DateTime.Now;
             }
             else
             {
                 updated++;
                 item.DateUpdated = DateTime.Now;
             }
             item.Comment = game.Comment;
             item.CompanyName = game.CompanyName;
             item.DInputFile = game.DInputFile;
             item.DInputMask = game.DInputMask;
             item.FakePID = game.FakePID;
             item.FakeVID = game.FakeVID;
             item.FileName = game.FileName;
             item.FileProductName = game.FileProductName;
             item.FileVersion = game.FileVersion;
             item.FullPath = game.FullPath;
             item.HookMask = game.HookMask;
             item.IsEnabled = game.IsEnabled;
             item.Timeout = game.Timeout;
             item.Weight = 1;
             item.XInputMask = game.XInputMask;
         }
         db.SaveChanges();
         db.Dispose();
         db = null;
         return string.Format("{0} game(s) created, {1} game(s) updated.", created, updated);
     }
 }
 public SearchResult SearchSettings(SearchParameter[] args)
 {
     var sr = new SearchResult();
     var db = new x360ceModelContainer();
     // Get all device instances of the user.
     var p = SearchParameterCollection.GetSqlParameter(args);
     var hasInstances = args.Any(x => x.InstanceGuid != Guid.Empty);
     var hasFiles = args.Any(x => !string.IsNullOrEmpty(x.FileName));
     var hasProducts = args.Any(x => x.ProductGuid != Guid.Empty);
     if (hasInstances)
     {
         // Get user instances.
         sr.Settings = db.ExecuteStoreQuery<Setting>("exec x360ce_GetUserInstances @args", p).ToArray();
         // Get list of products (unique identifiers).
         var products = args.Where(x => x.ProductGuid != Guid.Empty).Select(x => x.ProductGuid).Distinct().ToArray();
         var files = args.Where(x => !string.IsNullOrEmpty(x.FileName) || !string.IsNullOrEmpty(x.FileProductName)).ToList();
         if (products.Length == 0)
         {
             sr.Summaries = new Summary[0];
         }
         else
         {
             files.Add(new SearchParameter() { FileName = "", FileProductName = "" });
             Expression body = null;
             var param = Expression.Parameter(typeof(Summary), "x");
             var pgParam = Expression.PropertyOrField(param, "ProductGuid");
             var fnParam = Expression.PropertyOrField(param, "FileName");
             var fpParam = Expression.PropertyOrField(param, "FileProductName");
             for (int i = 0; i < products.Length; i++)
             {
                 var productGuid = products[i];
                 for (int f = 0; f < files.Count; f++)
                 {
                     var fileName = files[f].FileName;
                     var fileProductName = files[f].FileProductName;
                     var exp1 = Expression.AndAlso(
                             Expression.Equal(pgParam, Expression.Constant(productGuid)),
                             Expression.Equal(fnParam, Expression.Constant(fileName))
                        );
                     exp1 = Expression.AndAlso(exp1, Expression.Equal(fpParam, Expression.Constant(fileProductName)));
                     body = body == null ? exp1 : Expression.OrElse(body, exp1).Reduce();
                 }
             }
             var lambda = Expression.Lambda<Func<Summary, bool>>(body, param);
             // Select only TOP 10 configurations per controller and file.
             var summaries = db.Summaries.Where(lambda).ToArray();
             var topSummaries = new List<Summary>();
             var productGuids = db.Summaries.Where(lambda).Select(x => x.ProductGuid).Distinct();
             foreach (var pg in productGuids)
             {
                 var controllerSummaries = summaries.Where(x => x.ProductGuid == pg);
                 var fileNames = controllerSummaries.Select(x => x.FileName).Distinct();
                 foreach (var fileName in fileNames)
                 {
                     // Top 10 configurations per file
                     topSummaries.AddRange(controllerSummaries.Where(x => x.FileName == fileName).OrderByDescending(x => x.Users).Take(10));
                 }
             }
             sr.Summaries = topSummaries.OrderBy(x => x.ProductName).ThenBy(x => x.FileName).ThenBy(x => x.FileProductName).ThenBy(x => x.Users).ToArray();
         }
     }
     else if (args!= null && args.Length > 0)
     {
         // Get presets.
         var item = args.FirstOrDefault();
         var ds = EngineHelper.GetPresets(new SearchParameter[0]);
         sr.Presets = SqlHelper.ConvertToList<Preset>(ds.Tables[0]).ToArray();
         sr.PadSettings = SqlHelper.ConvertToList<PadSetting>(ds.Tables[1]).ToArray();
         sr.Summaries = new Summary[0];
         sr.Settings = new Setting[0];
     }
     else
     {
         sr.Presets = new Preset[0];
         sr.PadSettings = new PadSetting[0];
         sr.Summaries = new Summary[0];
         sr.Settings = new Setting[0];
     }
     db.Dispose();
     db = null;
     return sr;
 }