@@ -1,10 +1,12 @@
from django.db import models
from django.db.models import Q
from django.utils import timezone
from authentication.models import CustomUser
import math


class Category(models.Model):
owned_by = models.ForeignKey('authentication.CustomUser', default=None)
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=50)

@@ -15,13 +17,15 @@ class Meta:
ordering = ('created',)

class TimeActive(models.Model):
owned_by = models.ForeignKey('authentication.CustomUser', default=None)
start = models.DateTimeField(auto_now_add=True)
end = models.DateTimeField(blank=True, null=True)

class Meta:
ordering = ('start',)

class Tab(models.Model):
owned_by = models.ForeignKey('authentication.CustomUser', default=None)
created = models.DateTimeField(auto_now_add=True)
tab_id = models.IntegerField()
closed = models.DateTimeField(blank=True, null=True)
@@ -33,6 +37,7 @@ class Meta:
ordering = ('created',)

class Domain(models.Model):
owned_by = models.ForeignKey('authentication.CustomUser', default=None)
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=1000)
base_url = models.CharField(max_length=1000)
@@ -81,6 +86,7 @@ class Meta:
ordering = ('created',)

class Page(models.Model):
owned_by = models.ForeignKey('authentication.CustomUser', default=None)
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=100)
url = models.CharField(max_length=1000)
@@ -94,6 +100,7 @@ class Meta:
ordering = ('created',)

class PageVisit(models.Model):
owned_by = models.ForeignKey('authentication.CustomUser', default=None)
visited = models.DateTimeField(auto_now_add=True)
page = models.ForeignKey('Page')
domain = models.ForeignKey('Domain')
@@ -13,12 +13,13 @@ class CloseTab(APIView):
"""

def post(self, request, format=None):
customuser = request.user

t_id = request.data['tab']
time = timezone.now()

try:
t = Tab.objects.get(tab_id=t_id, closed__isnull=True)
t = Tab.objects.get(tab_id=t_id, closed__isnull=True, owned_by=customuser)
except Tab.DoesNotExist:
return Response(status=status.HTTP_200_OK)

@@ -38,6 +39,4 @@ def post(self, request, format=None):
t.closed = time
t.save()



return Response(status=status.HTTP_200_OK)
@@ -12,7 +12,7 @@ class NewPage(APIView):
Handle new page coming in
"""
def post(self, request, format=None):

user = request.user
t_id = request.data['tab']
page_title = request.data['title']
domain_title = request.data['domain']
@@ -31,10 +31,10 @@ def post(self, request, format=None):
base_url = urlparse(url).netloc

# Get the currently active TimeActive (can only be one if exists)
ta = TimeActive.objects.filter(end__isnull=True)
ta = TimeActive.objects.filter(end__isnull=True, owned_by=user)

# Check if a tab exists with this id that is open in this session
t = Tab.objects.filter(tab_id=t_id, closed__isnull=True)
t = Tab.objects.filter(tab_id=t_id, closed__isnull=True, owned_by=user)
if t.exists():
t=t[0]
else:
@@ -44,7 +44,7 @@ def post(self, request, format=None):
ta.save()

if 'chrome://' not in url and 'file:///' not in url and 'chrome-extension://' not in url:
t = Tab(tab_id=t_id)
t = Tab(tab_id=t_id, owned_by=user)
t.save()
else:
return Response(status=status.HTTP_200_OK)
@@ -71,7 +71,7 @@ def post(self, request, format=None):
if 'chrome://' not in url and 'file:///' not in url and 'chrome-extension://' not in url:
created = False
if t_id != prev_tab:
prev_t = Tab.objects.filter(tab_id=prev_tab, closed__isnull=True)
prev_t = Tab.objects.filter(tab_id=prev_tab, closed__isnull=True, owned_by=user)
if prev_t.exists():
prev_t = prev_t.first()
prev_d = prev_t.domain_set.filter(closed__isnull=True)
@@ -80,33 +80,33 @@ def post(self, request, format=None):
d = Domain(
title=domain_title, tab=t, base_url=base_url,
favicon=favicon, opened_from_domain=prev_d,
opened_from_tabid=prev_tab
opened_from_tabid=prev_tab, owned_by=user
)
d.save()
created = True

if not created:
d = Domain(title=domain_title, tab=t, base_url=base_url, favicon=favicon)
d = Domain(title=domain_title, tab=t, base_url=base_url, favicon=favicon, owned_by=user)
d.save()
if active:
new_ta = TimeActive()
new_ta = TimeActive(owned_by=user)
new_ta.save()
d.active_times.add(new_ta)
else:
return Response(status=status.HTTP_200_OK)

p = Page.objects.filter(url=url)
p = Page.objects.filter(url=url, owned_by=user)

if p.exists():
p = p[0]
if p.title != page_title:
p.title = page_title
p.save()
else:
p = Page(title=page_title, url=url)
p = Page(title=page_title, url=url, owned_by=user)
p.save()

pv = PageVisit(page=p, domain=d)
pv = PageVisit(page=p, domain=d, owned_by=user)
pv.save()
return Response(status=status.HTTP_201_CREATED)

@@ -120,13 +120,13 @@ def post(self, request, format=None):
t_id = request.data['tab']
closed = request.data['closed']

ta = TimeActive.objects.filter(end__isnull=True)
ta = TimeActive.objects.filter(end__isnull=True, owned_by=user)

if ta.exists():
ta = ta.first()

try:
t = Tab.objects.get(tab_id=t_id)
t = Tab.objects.get(tab_id=t_id, owned_by=user)
except Tab.DoesNotExist:
if ta and not closed:
ta.end = timezone.now()
@@ -150,7 +150,7 @@ def post(self, request, format=None):
ta.end = timezone.now()
ta.save()

new_ta = TimeActive()
new_ta = TimeActive(owned_by=user)
new_ta.save()

d.active_times.add(new_ta)
@@ -22,7 +22,8 @@ def post(self, request, format=None):
end = pytz.utc.localize(datetime.strptime(end, '%Y-%m-%dT%H:%M:%S.%fZ'))

#domains open during timeframe
domains = Domain.objects.filter(Q(created__range=[start, end]) |
domains = Domain.objects.filter(owned_by=request.user).filter(
Q(created__range=[start, end]) |
Q(closed__range=[start, end]) |
(Q(closed__gte=end) & Q(created__lte=start)) |
(Q(created__lte=start) & Q(closed__isnull=True))
@@ -69,7 +70,7 @@ def get(self, request, format=None):

holder['starred'] = starred

cats = Category.objects.all()
cats = Category.objects.filter(owned_by=request.user)

for c in cats:
pages = c.page_set.all()
@@ -89,7 +90,7 @@ class SendDomain(APIView):
def post(self, request, format=None):
pk = request.data['pk']

d = Domain.objects.get(pk=pk)
d = Domain.objects.get(pk=pk, owned_by=request.user)

pvs = d.pagevisit_set.all()

@@ -14,7 +14,7 @@ def post(self, request, format=None):
url = request.data['url']

try:
p = Page.objects.get(url=url)
p = Page.objects.get(url=url, owned_by=request.user)
except Page.DoesNotExist:
return Response(status=status.HTTP_200_OK)

@@ -31,13 +31,13 @@ def post(self, request, format=None):
cat = request.data['category']
url = request.data['url']

p = Page.objects.get(url=url)
c = Category.objects.filter(title=cat)
p = Page.objects.get(url=url, owned_by=request.user)
c = Category.objects.filter(title=cat, owned_by=request.user)

if c.exists():
p.categories.add(c.first())
else:
c = Category(title=cat)
c = Category(title=cat, owned_by=request.user)
c.save()
p.categories.add(c)

@@ -52,11 +52,11 @@ def post(self, request, format=None):
cat = request.data['category']
url = request.data['url']
try:
p = Page.objects.get(url=url)
p = Page.objects.get(url=url, owned_by=request.user)
except Page.DoesNotExist:
raise Http404

c = Category.objects.get(title=cat)
c = Category.objects.get(title=cat, owned_by=request.user)

p.categories.remove(c)

@@ -70,9 +70,9 @@ class AddCategory(APIView):
def post(self, request, format=None):
cat = request.data['category']
try:
c = Category.objects.get(title=cat)
c = Category.objects.get(title=cat, owned_by=request.user)
except Category.DoesNotExist:
c = Category(title=cat)
c = Category(title=cat, owned_by=request.user)
c.save()

serializer = CategorySerializer(c)
@@ -85,7 +85,7 @@ class DeleteCategory(APIView):
def post(self, request, format=None):
cat = request.data['category']
try:
c = Category.objects.get(title=cat)
c = Category.objects.get(title=cat, owned_by=request.user)
except Category.DoesNotExist:
raise Http404

@@ -101,7 +101,7 @@ def post(self, request, format=None):
star = request.data['star']

try:
p = Page.objects.get(url=url)
p = Page.objects.get(url=url, owned_by=request.user)
except Page.DoesNotExist:
raise Http404