[haiku-commits] Change in haiku[master]: HaikuDepot: Delayed Increment View Counter

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 6 Jun 2022 04:37:27 +0000

From Andrew Lindesay <apl@xxxxxxxxxxxxxx>:

Andrew Lindesay has uploaded this change for review. ( 
https://review.haiku-os.org/c/haiku/+/5356 ;)


Change subject: HaikuDepot: Delayed Increment View Counter
......................................................................

HaikuDepot: Delayed Increment View Counter

Performs the increment of the view counter
after a delay of three seconds; otherwise
a number of "false views" can be stored as
people use keyboard navigation.

Relates to #16879
---
M src/apps/haikudepot/ui/MainWindow.cpp
M src/apps/haikudepot/ui/MainWindow.h
2 files changed, 61 insertions(+), 5 deletions(-)



  git pull ssh://git.haiku-os.org:22/haiku refs/changes/56/5356/1

diff --git a/src/apps/haikudepot/ui/MainWindow.cpp 
b/src/apps/haikudepot/ui/MainWindow.cpp
index dae3f20..1d37c34 100644
--- a/src/apps/haikudepot/ui/MainWindow.cpp
+++ b/src/apps/haikudepot/ui/MainWindow.cpp
@@ -24,6 +24,7 @@
 #include <LayoutBuilder.h>
 #include <MenuBar.h>
 #include <MenuItem.h>
+#include <MessageRunner.h>
 #include <Messenger.h>
 #include <Roster.h>
 #include <Screen.h>
@@ -71,6 +72,7 @@
        MSG_PROCESS_COORDINATOR_CHANGED                 = 'pccd',
        MSG_WORK_STATUS_CHANGE                                  = 'wsch',
        MSG_WORK_STATUS_CLEAR                                   = 'wscl',
+       MSG_INCREMENT_VIEW_COUNTER                              = 'icrv',

        MSG_CHANGE_PACKAGE_LIST_VIEW_MODE               = 'cplm',
        MSG_SHOW_AVAILABLE_PACKAGES                             = 'savl',
@@ -81,6 +83,8 @@

 #define KEY_ERROR_STATUS                               "errorStatus"

+const bigtime_t kIncrementViewCounterDelayMicros = 3 * 1000 * 1000;
+
 #define TAB_PROMINENT_PACKAGES 0
 #define TAB_ALL_PACKAGES               1

@@ -167,7 +171,8 @@
        fModelListener(new MainWindowModelListener(BMessenger(this)), true),
        fCoordinator(NULL),
        fShouldCloseWhenNoProcessesToCoordinate(false),
-       fSinglePackageMode(false)
+       fSinglePackageMode(false),
+       fIncrementViewCounterDelayedRunner(NULL)
 {
        if ((fCoordinatorRunningSem = create_sem(1, "ProcessCoordinatorSem")) < 
B_OK)
                debugger("unable to create the process coordinator semaphore");
@@ -265,7 +270,8 @@
        fModelListener(new MainWindowModelListener(BMessenger(this)), true),
        fCoordinator(NULL),
        fShouldCloseWhenNoProcessesToCoordinate(false),
-       fSinglePackageMode(true)
+       fSinglePackageMode(true),
+       fIncrementViewCounterDelayedRunner(NULL)
 {
        if ((fCoordinatorRunningSem = create_sem(1, "ProcessCoordinatorSem")) < 
B_OK)
                debugger("unable to create the process coordinator semaphore");
@@ -499,8 +505,12 @@
                                                name.String());
                                }
                        }
-               break;
-        }
+                       break;
+               }
+
+               case MSG_INCREMENT_VIEW_COUNTER:
+                       _HandleIncrementViewCounter(message);
+                       break;

                case MSG_PACKAGE_SELECTED:
                {
@@ -515,7 +525,7 @@
                                        debugger("unable to find the named 
package");
                                else {
                                        _AdoptPackage(package);
-                                       _IncrementViewCounter(package);
+                                       
_SetupDelayedIncrementViewCounter(package);
                                }
                        } else {
                                _ClearPackage();
@@ -965,6 +975,46 @@


 void
+MainWindow::_SetupDelayedIncrementViewCounter(const PackageInfoRef package) {
+       if (fIncrementViewCounterDelayedRunner != NULL) {
+               fIncrementViewCounterDelayedRunner->SetCount(0);
+               delete fIncrementViewCounterDelayedRunner;
+       }
+       BMessage message(MSG_INCREMENT_VIEW_COUNTER);
+       message.SetString("name", package->Name());
+       fIncrementViewCounterDelayedRunner =
+               new BMessageRunner(BMessenger(this), &message,
+                       kIncrementViewCounterDelayMicros, 1);
+       if (fIncrementViewCounterDelayedRunner->InitCheck()
+                       != B_OK) {
+               HDERROR("unable to init the increment view counter");
+       }
+}
+
+
+void
+MainWindow::_HandleIncrementViewCounter(const BMessage* message)
+{
+       BString name;
+       if (message->FindString("name", &name) == B_OK) {
+               const PackageInfoRef& viewedPackage =
+                       fPackageInfoView->Package();
+               if (viewedPackage.IsSet()) {
+                       if (viewedPackage->Name() == name)
+                               _IncrementViewCounter(viewedPackage);
+                       else
+                               HDINFO("incr. view counter; name mismatch");
+               } else
+                       HDINFO("incr. view counter; no viewed pkg");
+       } else
+               HDERROR("incr. view counter; no name");
+       fIncrementViewCounterDelayedRunner->SetCount(0);
+       delete fIncrementViewCounterDelayedRunner;
+       fIncrementViewCounterDelayedRunner = NULL;
+}
+
+
+void
 MainWindow::_IncrementViewCounter(const PackageInfoRef package)
 {
        bool shouldIncrementViewCounter = false;
diff --git a/src/apps/haikudepot/ui/MainWindow.h 
b/src/apps/haikudepot/ui/MainWindow.h
index 874ec13..a59380b 100644
--- a/src/apps/haikudepot/ui/MainWindow.h
+++ b/src/apps/haikudepot/ui/MainWindow.h
@@ -98,6 +98,10 @@
                        void                            _AdoptPackage(const 
PackageInfoRef& package);
                        void                            _ClearPackage();

+                       void                            
_SetupDelayedIncrementViewCounter(
+                                                                       const 
PackageInfoRef package);
+                       void                            
_HandleIncrementViewCounter(
+                                                                       const 
BMessage* message);
                        void                            _IncrementViewCounter(
                                                                        const 
PackageInfoRef package);

@@ -185,6 +189,8 @@

                        PackageInfoListenerRef
                                                                
fPackageInfoListener;
+
+                       BMessageRunner*         
fIncrementViewCounterDelayedRunner;
 };



--
To view, visit https://review.haiku-os.org/c/haiku/+/5356
To unsubscribe, or for help writing mail filters, visit 
https://review.haiku-os.org/settings

Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I6f3440e1e3132c832cd807e48105022d22df9abf
Gerrit-Change-Number: 5356
Gerrit-PatchSet: 1
Gerrit-Owner: Andrew Lindesay <apl@xxxxxxxxxxxxxx>
Gerrit-MessageType: newchange

Other related posts:

  • » [haiku-commits] Change in haiku[master]: HaikuDepot: Delayed Increment View Counter - Gerrit