Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 45 additions & 1 deletion nextcloudappstore/core/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@
from django.conf import settings # type: ignore
from django.contrib.auth.models import User # type: ignore
from django.db.models import FloatField # type: ignore
from django.db.models import (
from django.db.models import ( # type: ignore
CASCADE,
BooleanField,
Case,
CharField,
DateTimeField,
EmailField,
Expand All @@ -19,6 +20,7 @@
Q,
TextField,
URLField,
When,
)
from django.db.models.signals import post_delete
from django.dispatch import receiver
Expand Down Expand Up @@ -54,6 +56,48 @@ def search(self, terms, lang):
query = reduce(lambda x, y: x & y, predicates, Q())
return queryset.filter(query)

def search_relevant(self, terms, lang):
queryset = self.get_queryset().active_translations(lang).language(lang).distinct()

if not terms:
return queryset.order_by("-is_featured", "-rating_num_recent", "-last_release")

# Format ordered list of app IDs for order_by method
# https://stackoverflow.com/a/73473882
def generate_sorting(ordered_list, field_name):
conditions_list = []
for index, field_value in enumerate(ordered_list):
condition = {field_name: field_value}
conditions_list.append(When(**condition, then=index))

return Case(*conditions_list, default=len(conditions_list))

predicates_name = map(lambda t: Q(translations__name__icontains=t), terms)
predicates_summary = map(lambda t: Q(translations__summary__icontains=t), terms)
predicates_description = map(lambda t: Q(translations__description__icontains=t), terms)

query_name_exact = Q(translations__name__iexact=" ".join(terms))
query_name = reduce(lambda x, y: x & y, predicates_name, Q())
query_summary = reduce(lambda x, y: x & y, predicates_summary, Q())
query_description = reduce(lambda x, y: x & y, predicates_description, Q())

ids_name_exact = list(
queryset.filter(query_name_exact).order_by("-rating_overall", "-last_release").values_list("id", flat=True)
)
ids_name = list(
queryset.filter(query_name).order_by("-rating_overall", "-last_release").values_list("id", flat=True)
)
ids_summary = list(
queryset.filter(query_summary).order_by("-rating_overall", "-last_release").values_list("id", flat=True)
)
ids_description = list(
queryset.filter(query_description).order_by("-rating_overall", "-last_release").values_list("id", flat=True)
)

ids = list(dict.fromkeys(ids_name_exact + ids_name + ids_summary + ids_description))
id_sort = generate_sorting(ids, "id")
return queryset.filter(id__in=ids).order_by(id_sort)

def get_compatible(self, platform_version, inclusive=False, prefetch=None, select=None):
qs = App.objects
if select is not None and len(select) > 0:
Expand Down
12 changes: 12 additions & 0 deletions nextcloudappstore/core/static/assets/css/icons.css
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@
--original-icon-comment-question-white: url('../img/icons/detail/comment-question-white.svg');
--original-icon-feature-search-dark: url('../img/icons/detail/feature-search.svg');
--original-icon-feature-search-white: url('../img/icons/detail/feature-search-white.svg');
--original-icon-relevance-dark: url('../img/icons/list/relevance.svg');
--original-icon-relevance-white: url('../img/icons/list/relevance-white.svg');
--original-icon-rocket-launch-dark: url('../img/icons/list/rocket-launch.svg');
--original-icon-rocket-launch-white: url('../img/icons/list/rocket-launch-white.svg');
--original-icon-sort-alphabetical-variant-dark: url('../img/icons/list/sort-alphabetical-variant.svg');
Expand Down Expand Up @@ -103,6 +105,8 @@ body {
--icon-comment-question-white: var(--original-icon-comment-question-white);
--icon-feature-search-dark: var(--original-icon-feature-search-dark);
--icon-feature-search-white: var(--original-icon-feature-search-white);
--icon-relevance-dark: var(--original-icon-relevance-dark);
--icon-relevance-white: var(--original-icon-relevance-white);
--icon-rocket-launch-dark: var(--original-icon-rocket-launch-dark);
--icon-rocket-launch-white: var(--original-icon-rocket-launch-white);
--icon-sort-alphabetical-variant-dark: var(--original-icon-sort-alphabetical-variant-dark);
Expand Down Expand Up @@ -300,6 +304,14 @@ body .icon-feature-search.icon-white {
background-image: var(--icon-feature-search-white);
}

body .icon-relevance,
body .icon-relevance-dark {
background-image: var(--icon-relevance-dark);
}
body .icon-relevance-white,
body .icon-relevance.icon-white {
background-image: var(--icon-relevance-white);
}
body .icon-rocket-launch,
body .icon-rocket-launch-dark {
background-image: var(--icon-rocket-launch-dark);
Expand Down
Binary file modified nextcloudappstore/core/static/assets/img/banner.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified nextcloudappstore/core/static/assets/img/favicon-180.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified nextcloudappstore/core/static/assets/img/favicon-highres.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion nextcloudappstore/core/static/assets/img/icons/categories/account-network.svg
100755 → 100644
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion nextcloudappstore/core/static/assets/img/icons/categories/all-apps.svg
100755 → 100644
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion nextcloudappstore/core/static/assets/img/icons/categories/clipboard-flow.svg
100755 → 100644
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion nextcloudappstore/core/static/assets/img/icons/categories/featured.svg
100755 → 100644
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading