History log of /haiku/src/apps/haikudepot/model/Model.h
Revision Date Author Comments
# d2d4866d 19-Sep-2019 Andrew Lindesay <apl@lindesay.co.nz>

HaikuDepot: Display User's Usage Conditions

A HaikuDepotServer may have previously agreed to
user usage conditions. If this is the case then
they are now able to view those conditions. There
were some problems with date formatting in this
change and so the date formatting logic has moved
into the HaikuDepot source code temporarily until
issues with the BDateTime class can be resolved;
most likely as a separate piece of work.

Relates to 15209

Change-Id: Ic3e5413d9139f410d7f7e8b566d4c56352dd2778
Reviewed-on: https://review.haiku-os.org/c/haiku/+/1870
Reviewed-by: Stephan Aßmus <superstippi@gmx.de>


# 89b16bb4 22-May-2019 Andrew Lindesay <apl@lindesay.co.nz>

HaikuDepot: Categories from Server

The list of categories for packages is currently
hard-coded into the HaikuDepot desktop
application. This change will change that so that
the list is obtained from the HaikuDepot Server
system and is always up to date with the server's
list of categories.

Change-Id: I757732f4d771e1599d6ad9c85cd65905640de928
Reviewed-on: https://review.haiku-os.org/c/1478
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>


# f85e0300 28-Apr-2019 Andrew Lindesay <apl@lindesay.co.nz>

HaikuDepot: Load Languages from HDS

The HaikuDepot application has, thus far had its
own hard-coded list of languages that the user is
able to choose when (a) creating a new account or
(b) creating a user-rating. This change will mean
that those languages are loaded from the HDS
server dynamically and in this way the user can
choose from the full list. There have also been
improvements to the way in which the languages are
displayed in the menu as well.

Change-Id: If7cb7b87f348ca59d503d276a22444e72d0e6168
Reviewed-on: https://review.haiku-os.org/c/1425
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>


# 3369e03d 15-Dec-2018 Andrew Lindesay <apl@lindesay.co.nz>

HaikuDepot: Process and Data-loading Improvements

This change is a reshuffle of the backend processing involved in the
aquisition of data from servers including the pull-down and load of
HPKR data as well as the pull-down and load of data from the
HaikuDepotServer (HDS) system. The driver for this change is to
implement an initial implementation of a progress bar for the
loading of data as the application starts.

The following are notable changes;

* Removed some previously attempted 'functional style' logic in the
model which didn't fit well with C++
* Use of the base-url in the logical mapping from HDS and HD data is no
longer required and has been removed
* Some logging has been improved making it clearer which part of HD
is producing the logging which in turn helps with debugging issues
* List class has been modified to more cleanly support sorted lists
and binary searches; tests have also be updated accordingly
* Reorganise and tidy-up of the data-loading processes' structures
* The local repository update (HPKR) and data-load occur in background
processes now in the same system as the HDS data-load - this has been
crudely shifted from the MainWindow to new Processes and incorporated
into the background processing system
* The 'state-machine' background process runner is now replaced with a
'coordinator' style approach that can more easily handle the new
processes related to HPKR loading.
* Progress for loading processes is shown in the main window in the
WorkStatusView - this is flickering a bit, but basically works
* Added some documentation regarding how Processes work in the system
* The "Refresh Repositories" menu item now also updates data from HDS
* The "Refresh Repositories" menu item is disabled when the background
processes are running that update the repository data

Some further refinement would be good, but this change is large enough
for one round of improvements. There is an issue that the status bar
is used for screenshot display as well as this data-loading, but that
was the case before so it is something that can be dealt with later if
it is a problem.

Change-Id: I7668307645e3aabaf7e4a6e37e2cca80cc0f489e
Reviewed-on: https://review.haiku-os.org/770
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# 3b17d8dd 27-Jun-2018 Andrew Lindesay <apl@lindesay.co.nz>

HaikuDepot / PackageKit: Repositories 'Identifier' URL

Repositories are identified with a 'url' in the
remote 'repo.info' file. There is also a
'base url' which is the URL locally with which
the system is able to access the repository
data on. There is some confusion between these
two terms in the source. This change aims to
separate the two out and consistently name them.
The settings for the repository locally also was
not storing these values and that has been fixed.
Debug info about the repositories also did not
display the two urls consistently and will now
also do so. Finally, HaikuDepot now correlates
locally configured repositories with the data in
HaikuDepotServer using the identifier URL; this
makes the use of mirrors with HaikuDepot possible.

Fixes #13888
Change-Id: I66dfe589b05c24e1ab123a6945352e0f24b60bf1


# 80a272ee 27-Jan-2018 Andrew Lindesay <apl@lindesay.co.nz>

HaikuDepot : Changelog, Remove old API and Version Bump

This change re-instates the change-log function (TRAC#13827) that was
dropped in earlier changes. Also now-disused API handling logic is
removed. A small code-style fix is made and the version of the
application has been incremented so that this version's logic can later
be detected by the HDS application server.


# 39f49f70 26-Dec-2017 Julian Harnath <julian.harnath@rwth-aachen.de>

HaikuDepot: speed up package change handling

* During package population, when the repository is being
refreshed, thousands of package change messages arrive
in MainWindow while the PackageInfo fields are filled with
data.

Every such message caused a full generation of a package
list (including applying filters to all known packages),
which is quite slow, and caused the freezing from bug
#13823. The list was only used temporarily to figure out
if the package should be visible now or not.

* Instead of generating a new package list, we now only
match the single updated PackageInfo against the current
filters.

* Fixes #13823

* To reduce CPU usage even more, it would be better to not
generate at all, or not subscribe to, package changes while the
list is being initially populated, and/or to coalesce all the
changes to each package info into one update message (instead
of one for title, one for prominence, etc).
Deferring subscription requires some additional thought on when
to subscribe then, and how to avoid leaving a "hole" where
changes would go unnoticed.


# 3094fef3 19-Dec-2017 Andrew Lindesay <apl@lindesay.co.nz>

HaikuDepot : More Backend Communications Improvements

* Further improves the logging and provides some
basic performance numbers.
* Moves the bulk-load logic out of the data-model
class.
* Introduces a state-machine for the bulk-load
process so that it will be more easily able to be
shifted to non-blocking IO when the HTTP libraries
can do that.
* Implements concurrent loading of the bulk-data to
hopefully improve lead time for icons and meta-data.
* Loads data to a temporary file and then moves to the
final location in order to avoid partially written
data in the cache.
* Handles situations where no network is available;
prevents attempt to access the network.
* Allows bulk-load processes to be cancelled when the
application quits.
* Introduces command-line arguments to help simulate
scenarios to help with testing performance and
network absence.
* Implements ordered insert and binary search in the
'List' class + basic unit test.


# c23b641c 11-Nov-2017 Andrew Lindesay <apl@lindesay.co.nz>

HaikuDepot: New Mechanic for Package Data Download

The application was previously making a number of different
requests to the application server in order to pull-down
meta-data (ratings, localization etc...) for packages. This
will now happen in one request per repo. The data is
also cached locally and freshness of the data is checked
back with the server before new data is pulled down.


# 3d528c4a 03-Nov-2017 Andrew Lindesay <apl@lindesay.co.nz>

HaikuDepot: Change communication mechanism with server for repos

(last commit with same title only included new files - added those now)

Previously the desktop application would make a number of JSON-RPC calls
over HTTP to get the repositories. Now it will make a single call to get
the repositories and cache the result. This uses standard HTTP cache
signalling techniques and allows the server-side the ability to cache
the generated data as well. Note that the model classes and parse-
related classes are generated and may not be code-style compliant. They
are generated from JSON schema files in the server-side project.
Information about this as well as the python files used to generate the
C++ classes and headers are included in the server-side project.


# 19c15fec 27-Jan-2017 Andrew Lindesay <apl@lindesay.co.nz>

HaikuDepot: Improve icon download handling performance

Previously each icon would launch an independent HTTP request to
pull down the HVIF icon data. This change means that the data
will be pulled down in bulk across all packages as a .tgz and
will then be kept in a cache locally. The client-server logic
will use standard "If-Modified-Since" headers to check for
updates each time the HaikuDepot desktop application starts up.
This arrangement will bring down the HVIF as well as bitmap
icons and use the best representation it can.

Additionally, it is possible from a command-line option to log
HTTP traffic verbosely and it is also possible to use an "-h"
flag to display help on command-line arguments.

The code-structure around this change also anticipates some
future extensions to handle other client-server improvements.

Fixes #11804


# ebb1a01c 20-Oct-2016 Andrew Lindesay <apl@lindesay.co.nz>

HaikuDepot: Handling for communications with application server over multiple repositories

This change allows for the HaikuDepot desktop application to query the server application
over HTTP for data regarding packages across the various repositories that the have been
configured on the desktop environment. Previously it was 'hard-coded' to only
communicate about the HaikuPorts repository.


# 7b2c59b9 25-Jan-2015 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Implemented light-weight package manager update

No, not updating packages via HaikuDepot, but a light-weight synchronization
between the system package manager list and the HaikuDepot model. After
installing or removing a package, HaikuDepot performed a very costly update
of all information by basically throwing everything away and reloading it.
Implements #11786.


# 89e4ba17 28-Dec-2014 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Update package info after rating package

Let Model::PopulatePackage() have a mode where it forces the update on a
package that has already been populated. Trigger populating from success
code path in RatePackageWindow. Fixes #11638.


# 12107be2 27-Dec-2014 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Search all packages when showing featured

The intention was that typing search terms searches all packages, not only
the featured ones. This didn't actually work in Model::CreatePackageList().


# 4fade61f 26-Dec-2014 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Change when featured packages are shown

* Renamed the "Option" menu to "Show", removed the now redundant "Show" from
the items in that menu.
* Add an "Only featured packages" item in the Show menu. This item is disabled
as soon as the user types something in the search terms field. Othetwise,
this setting is respected, i.e. one can combine the featured setting with
other settings, i.e. show all featured packages of a certain depot and in a
certain category.
* Added PackageInfo::IsProminent() and removed the respective method from
the MainWindow (which only considered a package prominent if it was not
yet installed).
* "Show -> Installed packages" now defaults to on. There have been complaints
on Trac and I guess rightfully so. The use-cases in which one starts
HaikuDepot and wants to know about installed packages are just as likely
as the use-case where one wants to install new software.


# 0c169ace 01-Nov-2014 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Add some getters to Model.

For category, depot and search terms filter.


# a3dfc57d 07-Oct-2014 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Enable caching of info retrieved from web-app


# 24cde1e4 29-Sep-2014 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Added WebAppInterface getter to Model


# 8f03a0f9 27-Sep-2014 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Restore logged in user across sessions.

* Store the username in the app settings. The password was already stored
in the keyring. Restore the username upon next launch.
* Display the logged in user in the main window.
* Added "Log out" menu entry.
* When the password could not be retrieved from the keyring (also because
the user rejects the keyring dialog), unset the username.
* Allow unsetting the username by passing an empty name.


# 4ff3d17a 27-Sep-2014 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Put supported languages into a StringList

* Added TODO to retrieve the list from the web-app, there is already an
API for it. For now, the hard-coded list matches the web-app's and the
next change in this regard will be to support any known language.
* Make the list accessible.


# 04c9d578 27-Sep-2014 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Organized source into sub-folders


# 7b2c59b9b848f467d2229dedf91ca19899b8ed13 25-Jan-2015 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Implemented light-weight package manager update

No, not updating packages via HaikuDepot, but a light-weight synchronization
between the system package manager list and the HaikuDepot model. After
installing or removing a package, HaikuDepot performed a very costly update
of all information by basically throwing everything away and reloading it.
Implements #11786.


# 89e4ba17d0ae033b2a4896bfabfbde9cd4da5ed7 28-Dec-2014 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Update package info after rating package

Let Model::PopulatePackage() have a mode where it forces the update on a
package that has already been populated. Trigger populating from success
code path in RatePackageWindow. Fixes #11638.


# 12107be2ec53a0f63edeba707ff7194027db9ef6 27-Dec-2014 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Search all packages when showing featured

The intention was that typing search terms searches all packages, not only
the featured ones. This didn't actually work in Model::CreatePackageList().


# 4fade61ff862bff75a0e5d13fe949b7b4234a91d 26-Dec-2014 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Change when featured packages are shown

* Renamed the "Option" menu to "Show", removed the now redundant "Show" from
the items in that menu.
* Add an "Only featured packages" item in the Show menu. This item is disabled
as soon as the user types something in the search terms field. Othetwise,
this setting is respected, i.e. one can combine the featured setting with
other settings, i.e. show all featured packages of a certain depot and in a
certain category.
* Added PackageInfo::IsProminent() and removed the respective method from
the MainWindow (which only considered a package prominent if it was not
yet installed).
* "Show -> Installed packages" now defaults to on. There have been complaints
on Trac and I guess rightfully so. The use-cases in which one starts
HaikuDepot and wants to know about installed packages are just as likely
as the use-case where one wants to install new software.


# 0c169ace2edb1bbaffbbce243d56e72cc25b7123 01-Nov-2014 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Add some getters to Model.

For category, depot and search terms filter.


# a3dfc57d0494c8286d645e0ef478a1d5bdd920b9 07-Oct-2014 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Enable caching of info retrieved from web-app


# 24cde1e4ef8e15853e51429a1ecf925d944a94ab 29-Sep-2014 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Added WebAppInterface getter to Model


# 8f03a0f9f2645bc296173abce96cc8547a977b6e 27-Sep-2014 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Restore logged in user across sessions.

* Store the username in the app settings. The password was already stored
in the keyring. Restore the username upon next launch.
* Display the logged in user in the main window.
* Added "Log out" menu entry.
* When the password could not be retrieved from the keyring (also because
the user rejects the keyring dialog), unset the username.
* Allow unsetting the username by passing an empty name.


# 4ff3d17ae8f8185c3a94fe35035a0fdacc582881 27-Sep-2014 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Put supported languages into a StringList

* Added TODO to retrieve the list from the web-app, there is already an
API for it. For now, the hard-coded list matches the web-app's and the
next change in this regard will be to support any known language.
* Make the list accessible.


# 04c9d578d85baa79584c1c40c61cc73ca58d527b 27-Sep-2014 Stephan Aßmus <superstippi@gmx.de>

HaikuDepot: Organized source into sub-folders