コード例 #1
0
        private bool OpenAutoExecEntries(Database db)
        {
            string thisDevice = KeeAutoExecExt.ThisDeviceId;

            foreach (var autoOpenItem in KeeAutoExecExt.GetAutoExecItems(db.KpDatabase))
            {
                if (!autoOpenItem.Enabled)
                {
                    continue;
                }
                if (!KeeAutoExecExt.IsDeviceEnabled(autoOpenItem, thisDevice, out _))
                {
                    continue;
                }
                IOConnectionInfo dbIoc;
                if (KeeAutoExecExt.TryGetDatabaseIoc(autoOpenItem, out dbIoc) &&
                    App.Kp2a.TryGetDatabase(dbIoc) == null &&
                    App.Kp2a.AttemptedToOpenBefore(dbIoc) == false
                    )
                {
                    if (KeeAutoExecExt.AutoOpenEntry(this, autoOpenItem, false))
                    {
                        LaunchingOther = true;
                        return(true);
                    }
                }
            }
            return(false);
        }
コード例 #2
0
        public override void InitializeEntry(PwEntry entry)
        {
            base.InitializeEntry(entry);
            if (!entry.Strings.Exists(strVisible))
            {
                entry.Strings.Set(strVisible, new ProtectedString(false, "true"));
            }
            if (!entry.Strings.Exists(strEnabled))
            {
                entry.Strings.Set(strEnabled, new ProtectedString(false, "true"));
            }
            var autoExecItem = KeeAutoExecExt.MakeAutoExecItem(App.Kp2a.CurrentDb.KpDatabase, entry, 0);
            IOConnectionInfo ioc;

            if (!KeeAutoExecExt.TryGetDatabaseIoc(autoExecItem, out ioc))
            {
                ioc = IOConnectionInfo.FromPath(entry.Strings.ReadSafe(PwDefs.UrlField));
            }
            string path = ioc.Path;

            try
            {
                var filestorage = App.Kp2a.GetFileStorage(ioc);
                if (filestorage != null)
                {
                    path = filestorage.IocToPath(ioc);
                }
            }
            catch (NoFileStorageFoundException)
            {
            }


            entry.Strings.Set(strUiDatabaseFile, new ProtectedString(false, path));
            entry.Strings.Set(strUiKeyFile, new ProtectedString(false, entry.Strings.ReadSafe(PwDefs.UserNameField)));

            var devices =
                KeeAutoExecExt.GetIfDevice(KeeAutoExecExt.MakeAutoExecItem(App.Kp2a.CurrentDb.KpDatabase, entry, 0));

            //make sure user can enable/disable on this device explicitly:
            if (!devices.ContainsKey(KeeAutoExecExt.ThisDeviceId))
            {
                devices[KeeAutoExecExt.ThisDeviceId] = false;
            }
            foreach (var ifDevice in devices)
            {
                entry.Strings.Set(strUiIfDevice + ifDevice.Key, new ProtectedString(false, ifDevice.Value.ToString()));
            }
        }
コード例 #3
0
        private static bool IsValidIoc(AutoExecItem item)
        {
            IOConnectionInfo itemIoc;

            if (!KeeAutoExecExt.TryGetDatabaseIoc(item, out itemIoc))
            {
                return(false);
            }
            try
            {
                //see if we have a file storage for the given protocol
                App.Kp2a.GetFileStorage(itemIoc);
            }
            catch (Exception e)
            {
                return(false);
            }
            return(true);
        }
コード例 #4
0
            public void Update()
            {
                string thisDevice = KeeAutoExecExt.ThisDeviceId;

                _displayedDatabases = App.Kp2a.OpenDatabases.ToList();
                _autoExecItems      = App.Kp2a.OpenDatabases
                                      .SelectMany(db => KeeAutoExecExt.GetAutoExecItems(db.KpDatabase))
                                      .Where(item =>
                                             item.Visible
                                             &&
                                             KeeAutoExecExt.IsDeviceEnabled(item, thisDevice, out _)
                                             &&
                                             !_displayedDatabases.Any(displayedDb =>
                {
                    IOConnectionInfo itemIoc;
                    return(KeeAutoExecExt.TryGetDatabaseIoc(item, out itemIoc) &&
                           displayedDb.Ioc.IsSameFileAs(itemIoc));
                }))
                                      .ToList();
            }
コード例 #5
0
        private bool OpenAutoExecEntries(Database db)
        {
            try
            {
                string thisDevice = KeeAutoExecExt.ThisDeviceId;
                foreach (var autoOpenItem in KeeAutoExecExt.GetAutoExecItems(db.KpDatabase))
                {
                    if (!autoOpenItem.Enabled)
                    {
                        continue;
                    }
                    if (!KeeAutoExecExt.IsDeviceEnabled(autoOpenItem, thisDevice, out _))
                    {
                        continue;
                    }
                    if (!IsValidIoc(autoOpenItem))
                    {
                        continue;
                    }

                    IOConnectionInfo dbIoc;
                    if (KeeAutoExecExt.TryGetDatabaseIoc(autoOpenItem, out dbIoc) &&
                        App.Kp2a.TryGetDatabase(dbIoc) == null &&
                        App.Kp2a.AttemptedToOpenBefore(dbIoc) == false
                        )
                    {
                        if (KeeAutoExecExt.AutoOpenEntry(this, autoOpenItem, false, new ActivityLaunchModeRequestCode(ReqCodeOpenNewDb)))
                        {
                            LaunchingOther = true;
                            return(true);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Kp2aLog.LogUnexpectedError(e);
            }

            return(false);
        }
コード例 #6
0
            public override View GetView(int position, View convertView, ViewGroup parent)
            {
                if (cursorInflater == null)
                {
                    cursorInflater = (LayoutInflater)_context.GetSystemService(Context.LayoutInflaterService);
                }

                View view;

                if (convertView == null)
                {
                    // if it's not recycled, initialize some attributes

                    view = cursorInflater.Inflate(Resource.Layout.child_db_config_row, parent, false);


                    view.FindViewById <Button>(Resource.Id.child_db_enable_on_this_device).Click += (sender, args) =>
                    {
                        View sending_view = (View)sender;
                        _context.OnEnable(_displayedChildDatabases[GetClickedPos(sending_view)]);
                    };

                    view.FindViewById <Button>(Resource.Id.child_db_disable_on_this_device).Click += (sender, args) =>
                    {
                        View sending_view = (View)sender;
                        _context.OnDisable(_displayedChildDatabases[GetClickedPos(sending_view)]);
                    };


                    view.FindViewById <Button>(Resource.Id.child_db_edit).Click += (sender, args) =>
                    {
                        View sending_view = (View)sender;
                        _context.OnEdit(_displayedChildDatabases[GetClickedPos(sending_view)]);
                    };


                    view.FindViewById <Button>(Resource.Id.child_db_open).Click += (sender, args) =>
                    {
                        View sending_view = (View)sender;
                        _context.OnOpen(_displayedChildDatabases[GetClickedPos(sending_view)]);
                    };


                    view.FindViewById <Button>(Resource.Id.child_db_enable_a_copy_for_this_device).Click += (sender, args) =>
                    {
                        View sending_view = (View)sender;
                        _context.OnEnableCopy(_displayedChildDatabases[GetClickedPos(sending_view)]);
                    };
                }
                else
                {
                    view = convertView;
                }


                var iv           = view.FindViewById <ImageView>(Resource.Id.child_db_icon);
                var autoExecItem = _displayedChildDatabases[position];
                var pw           = autoExecItem.Entry;

                SprContext ctx = new SprContext(pw, App.Kp2a.FindDatabaseForElement(pw).KpDatabase, SprCompileFlags.All);

                string deviceId = KeeAutoExecExt.ThisDeviceId;

                view.FindViewById <TextView>(Resource.Id.child_db_title).Text =
                    SprEngine.Compile(pw.Strings.GetSafe(PwDefs.TitleField).ReadString(), ctx);

                view.FindViewById <TextView>(Resource.Id.child_db_url).Text =
                    _context.GetString(Resource.String.entry_url) + ": " + SprEngine.Compile(pw.Strings.GetSafe(PwDefs.UrlField).ReadString(), ctx);

                bool deviceEnabledExplict;
                bool deviceEnabled = KeeAutoExecExt.IsDeviceEnabled(autoExecItem, deviceId, out deviceEnabledExplict);

                deviceEnabled &= deviceEnabledExplict;


                if (!autoExecItem.Enabled)
                {
                    view.FindViewById <TextView>(Resource.Id.child_db_enabled_here).Text =
                        _context.GetString(Resource.String.plugin_disabled);
                }
                else
                {
                    view.FindViewById <TextView>(Resource.Id.child_db_enabled_here).Text =
                        _context.GetString(Resource.String.child_db_enabled_on_this_device) + ": " +
                        (!deviceEnabledExplict ?
                         _context.GetString(Resource.String.unspecified)
                            :
                         ((autoExecItem.Enabled && deviceEnabled)
                                ? _context.GetString(Resource.String.yes)
                                : _context.GetString(Resource.String.no)));
                }

                view.FindViewById(Resource.Id.child_db_enable_on_this_device).Visibility  = !deviceEnabled && autoExecItem.Enabled ? ViewStates.Visible : ViewStates.Gone;
                view.FindViewById(Resource.Id.child_db_disable_on_this_device).Visibility = (deviceEnabled || !deviceEnabledExplict) && autoExecItem.Enabled ? ViewStates.Visible : ViewStates.Gone;
                view.FindViewById(Resource.Id.child_db_enable_a_copy_for_this_device_container).Visibility = !deviceEnabled && autoExecItem.Enabled ? ViewStates.Visible : ViewStates.Gone;
                view.FindViewById(Resource.Id.child_db_edit).Visibility = deviceEnabledExplict || !autoExecItem.Enabled  ? ViewStates.Visible : ViewStates.Gone;
                IOConnectionInfo ioc;

                if ((KeeAutoExecExt.TryGetDatabaseIoc(autoExecItem, out ioc)) && App.Kp2a.TryGetDatabase(ioc) == null)
                {
                    view.FindViewById(Resource.Id.child_db_open).Visibility = ViewStates.Visible;
                }
                else
                {
                    view.FindViewById(Resource.Id.child_db_open).Visibility = ViewStates.Gone;
                }


                Database db = App.Kp2a.FindDatabaseForElement(pw);

                bool isExpired = pw.Expires && pw.ExpiryTime < DateTime.Now;

                if (isExpired)
                {
                    db.DrawableFactory.AssignDrawableTo(iv, _context, db.KpDatabase, PwIcon.Expired, PwUuid.Zero, false);
                }
                else
                {
                    db.DrawableFactory.AssignDrawableTo(iv, _context, db.KpDatabase, pw.IconId, pw.CustomIconUuid, false);
                }



                view.Tag = position.ToString();

                return(view);
            }