Container for folder settings stored in the database
Пример #1
0
    /*
[Obsolete("Not Used")]
private void NavigateNet(IListItemEx destination, Boolean isInSameTab = false, Boolean refresh = false, Boolean isCancel = false)
{
SaveSettingsToDatabase(this.CurrentFolder);
//TODO: Document isCancel Param better
if (destination == null) return;
if (this._RequestedCurrentLocation == destination && !refresh) return;

resetEvent.Set();

if (this.Threads.Count > 0)
{
mre.Set();
this.resetEvent.Set();
foreach (var thread in this.Threads.ToArray())
{
	thread.Abort();
	this.Threads.Remove(thread);
}
}

this._UnvalidateTimer.Stop();
this.IsDisplayEmptyText = false;
User32.SendMessage(this.LVHandle, MSG.LVM_SETITEMCOUNT, 0, 0);
this.DisableGroups();

this._ItemForRename = -1;
this._LastItemForRename = -1;

Items.Clear();
this._AddedItems.Clear();
ItemsForSubitemsUpdate.Clear();
waitingThumbnails.Clear();
overlayQueue.Clear();
shieldQueue.Clear();
this._CuttedIndexes.Clear();
this.SubItemValues.Clear();
this._RequestedCurrentLocation = destination;
if (!refresh)
Navigating?.Invoke(this, new NavigatingEventArgs(destination, isInSameTab));

var columns = new Collumns();
//var isFailed = true;
Int32 CurrentI = 0, LastI = 0, K = 0;
this.IsNavigationInProgress = true;
_ResetTimer.Stop();

this.RemoveAllCollumns();
this.AddDefaultColumns(false, true);
this.IsViewSelectionAllowed = true;

var navigationThread = new Thread(() =>
{
destination = FileSystemListItem.ToFileSystemItem(destination.ParentHandle, destination.PIDL);
this._RequestedCurrentLocation = destination;
this.Invoke((Action)(() =>
{
	if (!this._SearchTimer.Enabled)
	{
		this._SearchTimer.Start();
	}
}));
foreach (var shellItem in destination.TakeWhile(shellItem => !this.IsCancelRequested))
{
	CurrentI++;
	//if (CurrentI == 1) {
	//  isFailed = false;
	//}
	smre.WaitOne();

	if (this.ShowHidden || !shellItem.IsHidden)
	{
		shellItem.ItemIndex = K++;
		this.Items.Add(shellItem);
	}

	var delta = CurrentI - LastI;
	if (delta >= (this.IsSearchNavigating ? 1 : 5000))
		LastI = CurrentI;
	if (this.IsSearchNavigating && delta >= 20)
		Shell32.SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);
}

this.IsCancelRequested = false;
this.IsNavigationInProgress = false;

if (this._RequestedCurrentLocation.NavigationStatus != HResult.S_OK)
{
	this.Invoke((Action)(() =>
	{
		if (this._SearchTimer.Enabled)
			this._SearchTimer.Stop();
	}));
	GC.Collect();
	Shell32.SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);
	if (this.Threads.Count <= 1) return;
	mre.Set();
	this.resetEvent.Set();
	this.Threads[0].Abort();
	this.Threads.RemoveAt(0);
	return;
}

var headerhandle = User32.SendMessage(this.LVHandle, MSG.LVM_GETHEADER, 0, 0);
for (var i = 0; i < this.Collumns.Count; i++)
{
	this.Collumns[i].SetSplitButton(headerhandle, i);
}

if (this.View != ShellViewStyle.Details) AutosizeAllColumns(-2);

var sortColIndex = 0;
if (sortColIndex > -1) this.SetSortIcon(sortColIndex, SortOrder.Ascending);

this.SetSortCollumn(false, this.Collumns.First(), SortOrder.Ascending, false);

this.BeginInvoke((Action)(() =>
{
	var navArgs = new NavigatedEventArgs(this._RequestedCurrentLocation, this.CurrentFolder, isInSameTab);
	this.CurrentFolder = this._RequestedCurrentLocation;
	if (!refresh)
		Navigated?.Invoke(this, navArgs);
}));

GC.Collect();
Shell32.SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);
this.Invoke((Action)(() =>
{
	if (this._SearchTimer.Enabled)
		this._SearchTimer.Stop();
}));
mre.Reset();
mre.WaitOne();
this.Focus();
});

navigationThread.SetApartmentState(ApartmentState.STA);
this.Threads.Add(navigationThread);
navigationThread.Start();
}
*/

    private Boolean LoadSettingsFromDatabase(IListItemEx directory, out FolderSettings folderSettings) {
      var result = false;
      var folderSetting = new FolderSettings();
      if (directory.IsSearchFolder) {
        folderSettings = folderSetting;
        return false;
      }

      try {
        var mDBConnection = new SQLite.SQLiteConnection("Data Source=" + this._DBPath + ";Version=3;");
        mDBConnection.Open();

        var command1 = new SQLite.SQLiteCommand("SELECT * FROM foldersettings WHERE Path=@0", mDBConnection);
        command1.Parameters.AddWithValue("0", directory.ParsingName);

        var reader = command1.ExecuteReader();
        if (reader.Read()) {
          var values = reader.GetValues();
          if (values.Count > 0) {
            result = true;
            var view = values.GetValues("View").FirstOrDefault();
            var iconSize = values.GetValues("IconSize").FirstOrDefault();
            var lastSortedColumnIndex = values.GetValues("LastSortedColumn").FirstOrDefault();
            var lastSortOrder = values.GetValues("LastSortOrder").FirstOrDefault();
            var lastGroupedColumnId = values.GetValues("LastGroupCollumn").FirstOrDefault();
            var lastGroupoupOrder = values.GetValues("LastGroupOrder").FirstOrDefault();

            if (view != null)
              folderSetting.View = (ShellViewStyle)Enum.Parse(typeof(ShellViewStyle), view);

            if (lastSortedColumnIndex != null) {
              folderSetting.SortColumn = lastSortedColumnIndex;
              folderSetting.SortOrder = (SortOrder)Enum.Parse(typeof(SortOrder), lastSortOrder);
            }

            folderSetting.GroupCollumn = lastGroupedColumnId;
            folderSetting.GroupOrder = lastGroupoupOrder == SortOrder.Ascending.ToString() ? SortOrder.Ascending : SortOrder.Descending;

            var collumns = values.GetValues("Columns").FirstOrDefault();
            folderSetting.Columns = collumns != null ? XElement.Parse(collumns) : null;

            if (String.IsNullOrEmpty(iconSize))
              folderSetting.IconSize = 48;
            else
              folderSetting.IconSize = Int32.Parse(iconSize);
          }
        }

        reader.Close();
      } catch (Exception) {
      }

      folderSettings = folderSetting;
      return result;
    }