Skip to content

Commit

Permalink
Initial
Browse files Browse the repository at this point in the history
  • Loading branch information
samuelclay committed Jun 16, 2009
1 parent 52ccda2 commit 48ba40e
Show file tree
Hide file tree
Showing 1,668 changed files with 46,719 additions and 0 deletions.
1 change: 1 addition & 0 deletions README
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
A News/RSS Reader that controls the amount, relevancy, and interestingness of news subscriptions.
Empty file added __init__.py
Empty file.
Empty file added apps/__init__.py
Empty file.
Empty file added apps/analyzer/__init__.py
Empty file.
6 changes: 6 additions & 0 deletions apps/analyzer/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.db import models
from django.contrib.auth.models import User
import datetime
from apps.rss_feeds.models import Feed, Story
from apps.reader.models import UserSubscription, ReadStories
from utils import feedparser, object_manager
1 change: 1 addition & 0 deletions apps/analyzer/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Create your views here.
Empty file added apps/opml_import/__init__.py
Empty file.
5 changes: 5 additions & 0 deletions apps/opml_import/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.db import models
from django.contrib.auth.models import User
from apps.rss_feeds.models import Feed, Story
import datetime

6 changes: 6 additions & 0 deletions apps/opml_import/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.conf.urls.defaults import *

urlpatterns = patterns('apps.opml_import.views',
(r'^$', 'opml_import'),
(r'^process', 'process'),
)
44 changes: 44 additions & 0 deletions apps/opml_import/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
from django.shortcuts import render_to_response, get_list_or_404, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.template import RequestContext
from apps.rss_feeds.models import Feed, Story
from apps.reader.models import UserSubscription, ReadStories, UserSubscriptionFolders
from utils.json import json_encode
import utils.opml as opml
from django.contrib.auth.models import User
from django.http import HttpResponse, HttpRequest
from django.core import serializers
from pprint import pprint
import datetime


def opml_import(request):
context = None
return render_to_response('opml_import/import.xhtml', context,
context_instance=RequestContext(request))

def process(request):
context = None
outline = opml.from_string(request.POST['opml'])
feeds = []
for folder in outline:
for feed in folder:
feed_data = dict(feed_address=feed.xmlUrl, feed_link=feed.htmlUrl, feed_title=feed.title)
feeds.append(feed_data)
new_feed = Feed(**feed_data)
try:
new_feed.save()
except:
new_feed = Feed.objects.get(**feed_data)
us = UserSubscription(feed=new_feed, user=request.user)
try:
us.save()
except:
us = UserSubscription.objects.get(feed=new_feed, user=request.user)
user_sub_folder = UserSubscriptionFolders(user=request.user, feed=new_feed, user_sub=us, folder=folder.text)
try:
user_sub_folder.save()
except:
pass
data = json_encode(feeds)
return HttpResponse(data, mimetype='application/json')
Empty file added apps/profile/__init__.py
Empty file.
5 changes: 5 additions & 0 deletions apps/profile/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
1 change: 1 addition & 0 deletions apps/profile/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Create your views here.
Empty file added apps/reader/__init__.py
Empty file.
6 changes: 6 additions & 0 deletions apps/reader/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from apps.reader.models import UserSubscription, ReadStories, UserSubscriptionFolders
from django.contrib import admin

admin.site.register(UserSubscription)
admin.site.register(ReadStories)
admin.site.register(UserSubscriptionFolders)
113 changes: 113 additions & 0 deletions apps/reader/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
from django.db import models
from django.contrib.auth.models import User
import datetime
from apps.rss_feeds.models import Feed, Story
from utils import feedparser, object_manager

class UserSubscription(models.Model):
user = models.ForeignKey(User)
feed = models.ForeignKey(Feed)
last_read_date = models.DateTimeField(default=datetime.datetime(2000,1,1))
mark_read_date = models.DateTimeField(default=datetime.datetime(2000,1,1))
unread_count = models.IntegerField(default=0)
unread_count_updated = models.DateTimeField(
default=datetime.datetime(2000,1,1)
)

def __unicode__(self):
return self.user.username + ': [' + self.feed.feed_title + '] '

def save(self, force_insert=False, force_update=False):
self.unread_count_updated = datetime.datetime.now()
super(UserSubscription, self).save(force_insert, force_update)

def get_user_feeds(self):
return Feed.objects.get(user=self.user, feed=feeds)

def count_unread(self):
if self.unread_count_updated > self.feed.last_update:
return self.unread_count

count = (self.stories_newer_lastread()
+ self.stories_between_lastread_allread())
if count == 0:
self.mark_read_date = datetime.datetime.now()
self.last_read_date = datetime.datetime.now()
self.unread_count_updated = datetime.datetime.now()
self.unread_count = 0
self.save()
else:
self.unread_count = count
self.unread_count_updated = datetime.datetime.now()
self.save()
return count

def mark_read(self):
self.last_read_date = datetime.datetime.now()
self.unread_count -= 1
self.unread_count_updated = datetime.datetime.now()
self.save()

def mark_feed_read(self):
self.last_read_date = datetime.datetime.now()
self.mark_read_date = datetime.datetime.now()
self.unread_count = 0
self.unread_count_updated = datetime.datetime.now()
self.save()
readstories = ReadStories.objects.filter(user=self.user, feed=self.feed)
readstories.delete()

def stories_newer_lastread(self):
return self.feed.new_stories_since_date(self.last_read_date)

def stories_between_lastread_allread(self):
story_count = Story.objects.filter(
story_date__gte=self.mark_read_date,
story_date__lte=self.last_read_date,
story_feed=self.feed
).count()
read_count = ReadStories.objects.filter(
feed=self.feed,
read_date__gte=self.mark_read_date,
read_date__lte=self.last_read_date
).count()
return story_count - read_count

def subscribe_to_feed(self, feed_id):
feed = Feed.objects.get(id=feed_id)
new_subscription = UserSubscription(user=self.user, feed=feed)
new_subscription.save()

class Meta:
unique_together = ("user", "feed")


class ReadStories(models.Model):
user = models.ForeignKey(User)
feed = models.ForeignKey(Feed)
story = models.ForeignKey(Story)
read_date = models.DateTimeField(auto_now=True)

def __unicode__(self):
return (self.user.username + ': [' + self.feed.feed_title + '] '
+ self.story.story_title)

class Meta:
verbose_name_plural = "read stories"
verbose_name = "read story"
unique_together = ("user", "story")

class UserSubscriptionFolders(models.Model):
user = models.ForeignKey(User)
user_sub = models.ForeignKey(UserSubscription)
feed = models.ForeignKey(Feed)
folder = models.CharField(max_length=255)

def __unicode__(self):
return (self.user.username + ': [' + self.feed.feed_title + '] '
+ self.folder)

class Meta:
verbose_name_plural = "folders"
verbose_name = "folder"
unique_together = ("user", "user_sub")
12 changes: 12 additions & 0 deletions apps/reader/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from django.conf.urls.defaults import *

urlpatterns = patterns('apps.reader.views',
(r'^$', 'index'),
(r'^load_single_feed', 'load_single_feed'),
(r'^load_feeds', 'load_feeds'),
(r'^refresh_all_feeds', 'refresh_all_feeds'),
(r'^refresh_feed', 'refresh_feed'),
(r'^mark_story_as_read', 'mark_story_as_read'),
(r'^mark_feed_as_read', 'mark_feed_as_read'),
(r'^get_read_feed_items', 'get_read_feed_items'),
)
Loading

0 comments on commit 48ba40e

Please sign in to comment.