diff --git a/euscanwww/djeuscan/helpers.py b/euscanwww/djeuscan/helpers.py
index 3d3ff16..44f9b68 100644
--- a/euscanwww/djeuscan/helpers.py
+++ b/euscanwww/djeuscan/helpers.py
@@ -126,3 +126,31 @@ def get_account_versionlogs(profile):
return VersionLog.objects.filter(
Q(package__in=packages) | Q(overlay__in=overlays)
)
+
+def get_user_fav_infos(user):
+ upstream_k = lambda c: c["n_versions"] - c["n_packaged"] - c["n_overlay"]
+
+ categories = sorted(get_account_categories(user),
+ key=upstream_k, reverse=True)
+ c_upstream = sum([upstream_k(c) for c in categories])
+ herds = sorted(get_account_herds(user),
+ key=upstream_k, reverse=True)
+ h_upstream = sum([upstream_k(c) for c in herds])
+ maintainers = sorted(get_account_maintainers(user),
+ key=upstream_k, reverse=True)
+ m_upstream = sum([upstream_k(c) for c in maintainers])
+ packages = sorted(
+ get_profile(user).packages.all(),
+ key=lambda p: p.n_versions - p.n_packaged - p.n_overlay,
+ reverse=True
+ )
+ p_upstream = sum(
+ [c.n_versions - c.n_packaged - c.n_overlay for c in packages]
+ )
+
+ return {
+ "categories": categories, "categories_upstream": c_upstream,
+ "herds": herds, "herds_upstream": h_upstream,
+ "maintainers": maintainers, "maintainers_upstream": m_upstream,
+ "packages": packages, "packages_upstream": p_upstream,
+ }
diff --git a/euscanwww/djeuscan/tasks.py b/euscanwww/djeuscan/tasks.py
index c30c744..056f0ad 100644
--- a/euscanwww/djeuscan/tasks.py
+++ b/euscanwww/djeuscan/tasks.py
@@ -19,7 +19,7 @@ from euscan.version import gentoo_unstable
from djeuscan.models import Package, RefreshPackageQuery, UserProfile, \
VersionLog
from djeuscan.processing import scan, misc
-from djeuscan.helpers import get_account_versionlogs
+from djeuscan.helpers import get_account_versionlogs, get_user_fav_infos
class TaskFailedException(Exception):
@@ -272,18 +272,15 @@ def consume_refresh_queue(locked=False):
def send_user_email(address, subject, text):
try:
send_mail(
- subject, text, settings.EMAIL_FROM, [address], fail_silently=False
+ subject, text, settings.DEFAULT_FROM_EMAIL, [address], fail_silently=False
)
except Exception, exc:
raise send_user_email.retry(exc=exc)
@task
-def process_emails(profiles):
+def process_emails(profiles, only_if_vlogs=False):
for profile in profiles:
- if not profile.email_activated:
- continue
-
now = datetime.now()
user = profile.user
@@ -301,12 +298,16 @@ def process_emails(profiles):
vtype__in=gentoo_unstable
)
- if not vlogs.count():
+ if only_if_vlogs and not vlogs.count():
continue
+ infos = get_user_fav_infos(user)
+ infos["user"] = user
+ infos["vlogs"] = vlogs
+
mail_text = render_to_string(
"euscan/accounts/euscan_email.txt",
- {"user": user, "vlogs": vlogs}
+ infos
)
send_user_email.delay(
@@ -319,20 +320,32 @@ def process_emails(profiles):
@task
def send_update_email():
- profiles = UserProfile.objects.filter(email_every=UserProfile.EMAIL_SCAN)
- group_chunks(process_emails, profiles, settings.TASKS_EMAIL_GROUPS)()
+ profiles = UserProfile.objects.filter(
+ email_every=UserProfile.EMAIL_SCAN,
+ email_activated=True
+ )
+ group_chunks(
+ process_emails,
+ profiles,
+ settings.TASKS_EMAIL_GROUPS,
+ only_if_vlogs=True
+ )()
@task
def send_weekly_email():
- profiles = UserProfile.objects.filter(email_every=UserProfile.EMAIL_WEEKLY)
+ profiles = UserProfile.objects.filter(
+ email_every=UserProfile.EMAIL_WEEKLY,
+ email_activated=True
+ )
group_chunks(process_emails, profiles, settings.TASKS_EMAIL_GROUPS)()
@task
def send_monthly_email():
profiles = UserProfile.objects.filter(
- email_every=UserProfile.EMAIL_MONTHLY
+ email_every=UserProfile.EMAIL_MONTHLY,
+ email_activated=True
)
group_chunks(process_emails, profiles, settings.TASKS_EMAIL_GROUPS)()
diff --git a/euscanwww/djeuscan/templates/euscan/_package_details.html b/euscanwww/djeuscan/templates/euscan/_package_details.html
index 1e04911..6204e90 100644
--- a/euscanwww/djeuscan/templates/euscan/_package_details.html
+++ b/euscanwww/djeuscan/templates/euscan/_package_details.html
@@ -83,35 +83,7 @@
{% endif %}
- {% if vlog %}
-
Version history
-
-
- {% for version in vlog %}
- {% if version.action == version.VERSION_ADDED %}
- -
- {% else %}
-
-
- {% endif %}
- {% if version.overlay == "gentoo" %}
-
- {% elif version.overlay %}
-
- {% else %}
-
- {% endif %}
-
- {% if version.vtype and not version.vtype|is_stable %}
-
- {% endif %}
-
- {{ version }} - {{ version.datetime }}
-
-
- {% endfor %}
-
-
- {% endif %}
+ {% include "euscan/_package_vlogs.html" %}
{% if log %}
euscan log
diff --git a/euscanwww/djeuscan/templates/euscan/accounts/euscan_email.txt b/euscanwww/djeuscan/templates/euscan/accounts/euscan_email.txt
index 35dd6d3..fe609d2 100644
--- a/euscanwww/djeuscan/templates/euscan/accounts/euscan_email.txt
+++ b/euscanwww/djeuscan/templates/euscan/accounts/euscan_email.txt
@@ -1,6 +1,50 @@
+{% load djeuscan_helpers %}
+{% load sub %}
Hello {{ user }},
-euscan news:
+{% if vlogs %}euscan news:
+
{% for vlog in vlogs %}
- * {{ vlog.package.category }}/{{ vlog.package.name }}-{{ vlog.version }}-{{ vlog.revision }}:{{ vlog.slot }} [{{ vlog.vtype }}]
-{% endfor %}
+ * {{ vlog }} {% if vlog.vtype and not vlog.vtype|is_stable %}({{ vlog.vtype }}){% endif %} - {{ vlog.datetime }} {% endfor %}
+{% endif %}
+
+Summary:
+
+{% with categories|length as num_categories %}{% if num_categories %}
+Watching {{ num_categories }} categor{{ num_categories|pluralize:"y,ies"}}
+{{ categories_upstream }} new upstream version{{ categories_upstream|pluralize:"s"}}
+{% if categories_upstream %}
+Hot categories:
+{% for c in categories|slice:":3" %}
+ * {{ c.category }} ({{ c.n_versions|sub:c.n_packaged|sub:c.n_overlay }}){% endfor %}
+{% endif %}{% endif %}{% endwith %}
+
+{% with herds|length as num_herds %}{% if num_herds %}
+Watching {{ num_herds }} herd{{ num_herds|pluralize:"s"}}
+{{ herds_upstream }} new upstream version{{ herds_upstream|pluralize:"s"}}
+{% if herds_upstream %}
+Hot herds:
+{% for c in herds|slice:":3" %}
+ * {{ c.herds__herd }} ({{ c.n_versions|sub:c.n_packaged|sub:c.n_overlay }}){% endfor %}
+{% endif %}{% endif %}{% endwith %}
+
+{% with maintainers|length as num_maintainers %}{% if num_maintainers %}
+Watching {{ num_maintainers }} maintainer{{ num_maintainers|pluralize:"s"}}
+{{ maintainers_upstream }} new upstream version{{ maintainers_upstream|pluralize:"s"}}
+{% if maintainers_upstream %}
+Hot maintainers:
+{% for c in maintainers|slice:":3" %}
+* {{ c.maintainers__name }} ({{ c.n_versions|sub:c.n_packaged|sub:c.n_overlay }}){% endfor %}
+{% endif %}{% endif %}{% endwith %}
+
+{% with packages|length as num_packages %}{% if num_packages %}
+Watching {{ num_packages }} package{{ num_packages|pluralize:"s"}}
+{{ packages_upstream }} new upstream version{{ packages_upstream|pluralize:"s"}}
+{% if packages_upstream %}
+Hot packages:
+{% for c in packages|slice:":3" %}
+* {{ c }} ({{ c.n_versions|sub:c.n_packaged|sub:c.n_overlay }}){% endfor %}
+{% endif %}{% endif %}{% endwith %}
+
+--
+This email was sent by euscan
diff --git a/euscanwww/djeuscan/templates/euscan/accounts/index.html b/euscanwww/djeuscan/templates/euscan/accounts/index.html
index 7796f3e..51cbb0a 100644
--- a/euscanwww/djeuscan/templates/euscan/accounts/index.html
+++ b/euscanwww/djeuscan/templates/euscan/accounts/index.html
@@ -113,4 +113,8 @@
{% endwith %}
+
+
+{% include "euscan/_package_vlogs.html" %}
+
{% endblock %}
diff --git a/euscanwww/djeuscan/views.py b/euscanwww/djeuscan/views.py
index 2ec9153..2e21263 100644
--- a/euscanwww/djeuscan/views.py
+++ b/euscanwww/djeuscan/views.py
@@ -9,7 +9,9 @@ from django.contrib.auth.decorators import login_required
from django.views.decorators.http import require_POST
from djeuscan.helpers import version_key, packages_from_names, get_profile, \
- get_account_categories, get_account_herds, get_account_maintainers
+ get_account_categories, get_account_herds, get_account_maintainers, \
+ get_user_fav_infos
+from djeuscan.feeds import UserFeed
from djeuscan.models import Version, Package, Herd, Maintainer, EuscanResult, \
VersionLog, RefreshPackageQuery, ProblemReport, Category, Overlay
from djeuscan.forms import WorldForm, PackagesForm, ProblemReportForm, \
@@ -397,34 +399,12 @@ def refresh_package(request, category, package):
@login_required
@render_to('euscan/accounts/index.html')
def accounts_index(request):
-
user = request.user
- upstream_k = lambda c: c["n_versions"] - c["n_packaged"] - c["n_overlay"]
- categories = sorted(get_account_categories(user),
- key=upstream_k, reverse=True)
- c_upstream = sum([upstream_k(c) for c in categories])
- herds = sorted(get_account_herds(request.user),
- key=upstream_k, reverse=True)
- h_upstream = sum([upstream_k(c) for c in herds])
- maintainers = sorted(get_account_maintainers(request.user),
- key=upstream_k, reverse=True)
- m_upstream = sum([upstream_k(c) for c in maintainers])
- packages = sorted(
- get_profile(user).packages.all(),
- key=lambda p: p.n_versions - p.n_packaged - p.n_overlay,
- reverse=True
- )
- p_upstream = sum(
- [c.n_versions - c.n_packaged - c.n_overlay for c in packages]
- )
- return {
- "categories": categories, "categories_upstream": c_upstream,
- "herds": herds, "herds_upstream": h_upstream,
- "maintainers": maintainers, "maintainers_upstream": m_upstream,
- "packages": packages, "packages_upstream": p_upstream,
- }
+ infos = get_user_fav_infos(user)
+ infos['vlog'] = UserFeed().items({'user':user, 'options' : {}})
+ return infos
@login_required
@render_to('euscan/accounts/preferences.html')