Coder Social home page Coder Social logo

batter's People

Contributors

actown avatar audion1nja avatar derekleverenz avatar edgewyn avatar galador avatar jzelinskie avatar senturio avatar superbobry avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

batter's Issues

Torrent data constraint validation

We need an extensible validation system for torrent data constraints that allows administrators of Batter installations to declaratively express what uploads should and should not be allowed on their site.

For example, a hypothetical Music data constraint could require that all torrents be multi-file torrents. It could further require that if format is "flac", all files should end in ".flac" or be an album art file . It should NOT require that (e.g.) the album release year must be correct, because that is validating metadata.

As a general rule, the torrent data constraint validation should only operate on data encoded within the torrent, or collected about that data. This includes all information in the Torrent File Structure specification, as well as information collected about the files (e.g., bitrate, format, ripping program, originating media, etc).

Content filtering

There should be a way for a user to not encounter any NSFW content at all, should they choose it.

User profile options to hide, or allow, NSFW content (default hide).
Separate NSFW flags to be set for user avatar and user signature.

Option for video media content to be flagged as NSFW on upload.
Option for printed media content to be flagged as NSFW on upload.
Option for related images for torrent listing to be flagged as NSFW on upload (i.e. album art / dvd cover).

Option to omit NSFW results from search and hide NSFW tags from tag-cloud.

BBCode wrapper to hide NSFW material in forums.

Rules / Site Docs

There should be a "wiki" system that could serve as both the rules section, and the "site docs" section (for example, how to get on IRC, advanced search operators, and more).

The admins should be able to set up special routes for certain pages (e.g., site.com/rules would redirect to site.com/docs or something like that)

Pages would be assigned a specific permission level to view / edit, etc.

I think Gazelle actually has a pretty nice system for this.

Pub/sub for the tracker

Whenever changes are made to certain things, the tracker needs to be notified as per chihaya/chihaya#2. This includes:

  • Torrent creation/deletion/stats coefficient modification
  • User creation/deletion/tracker permission modification
  • Whitelist modification
  • Settings modification (e.g. global freeleech)

Unless anyone is opposed, I suggest we use redis for this as it will be in the tech stack already.

"Front Page" New / Articles

There should be a system that allows staff or other groups to post news articles to the main page. This will cover site news/announcements, maybe some sort of blog (AB does a "Dev Blog"), or other content (Waffles has "Official Releases" and "Waffles Guild of Writers" articles, AB has "Anime of the Fortnight" and "Album of the Week", as examples).

It should be made where certain groups can post to certain categories (for example, on Waffles, we would want to have a group that can post WGW Articles themselves). It could perhaps be flexible enough so that the last X posts from a certain category go to a particular div (we would want this for WGW and Official Releases, AB probably wants this for AotF/AotW)

Core model design

We need a sane way to associate torrents with upload categories and additional metadata.

The way I envisage this now is (version 3):

Diagram

Site Log

There should be a system to log various information to a centralized logging system, and based on permission levels, view that information later.

Some examples of things that should be logged:

  • Torrents Uploaded / Deleted (showing reason)
  • New requests / requests filled
  • User permissions changes (banned from posting / IRC / etc, class changes)
  • Invites sent / redeemed
  • Passwords reset
  • Show when a user made a donation
  • Mod comments on a user's profile

Custom BBCode

We discussed it a little bit in IRC and continuing to use BBCode is probably the best for comments/forum posts, but the quality in BBCode libraries is pretty low and we need support for our own custom types like the spoiler tag. Ideas welcome.

Rejection validation

Sometimes it's beneficial for administrators to assert that all uploads matching a certain pattern should be rejected, even if they are otherwise valid. This is also called a Do Not Upload (or DNU) list.

Awards / Achievements

There should be a way for staff to set up automatic, or "one-time" special awards or achievements to promote involvement with the community. On Waffles, this shows up as small icon-sized images in the user's profile and forum postbit.

Some examples:

  • Post count
  • upload count
  • Top up/down stats users
  • Contest Awards winners
  • Special awards that are given at the discretion of staff (perhaps an "inside joke" or other reasons)

Implement a full API

Implement a full site API, probably using tasty-pie which would allow someone to use the whole site without logging in past registering onsite.
http://tastypieapi.org/

Allow people to

  • upload/download torrents
  • edit their profile
  • redeem invites
  • read the forums ( if integrated)
  • read the wiki ( if integrated)
  • anything else that would enable many alternate front end's to batter

Keep deleted torrent stats

Currently when a torrent is deleted, it disappears entirely from the snatches page. This makes it harder when trying to determine if a person has been cheating, as their history is only partial.

It'd be great if items could remain in snatches even if the torrent were deleted from the site. Obviously there'd be no link, but it would be good if there were also some noticeable visual indication. A symbol, or the torrent title in a distinct colour, something like that.

Image Upload & CDN Support

There should be support for storing images either in a local directory, or use any number of CDN's through their APIs.

It would probably be a good idea to think about this in terms of certain staff being able to upload images at any time, without sysadmin intervention. Some examples would be award images, and images for newsposts / articles, etc.

Polls

Staff should be able to post polls to the front page, and users can pick an answer. People seem to like them?

I definitely wouldn't consider this a very pressing issue, but it's not very hard, either. Maybe a good project for someone who is just getting familiar with the code base.

Discogs API Validation

All music uploads should be validated as much as possible against discogs. we should also implement adding stuff not on the discogs website too

Celery - Long Running Jobs & Scheduled Tasks

There should be some support for performing "batch" or long-running jobs. We should be able to use Celery for this.

Some examples of things that would need a long-running task for:

  • User promotion / demotion.
  • Sending out invites (at least, we don't send out invites immediately, they get queued up and a batch gets sent out at once on a pseudo-random schedule)
  • Giving out invites to User Classes that have earned them
  • Purge old uploads
  • Disable old user accounts
  • Expire warning / bans

User notifications system

Users should be notified when events occur. Key to this is a centralised notifications system which can store and display notifications.

It'd be cool if this was real-time or pseudo-realtime, too.

Permissions System

The permissions system in batter should be very flexible. Some situations I can think of:

Main "community involvement" class - this could be based on upload / downlaod, forum participation, any number of metrics depending on the site.

Staff / VIP classes - pretty self-explanatory. These would bypass the classes above, and get a specific list of permissions.

Add-on classes - for example, a site might have a group of people who work on News Stories, or articles, or "special release" write-ups. We might want to give these users access to a specific forum, or the ability to do "something" (e.g. post a news story)

Others I probably can't think of right now.

undefined method `configure' for Vagrant:Module (NoMethodError)

I'm getting this error on the current develop branch (19d9260). Vagrant is installed properly and works on vagrantfiles from other projects.

โžœ vagrant git:(develop) vagrant up
/home/user/projects/batter/vagrant/Vagrantfile:4:in <top (required)>': undefined methodconfigure' for Vagrant:Module (NoMethodError)
from /home/user/.rbenv/versions/1.9.3-p385/lib/ruby/gems/1.9.1/gems/vagrant-1.0.6/lib/vagrant/config/loader.rb:115:in load' from /home/user/.rbenv/versions/1.9.3-p385/lib/ruby/gems/1.9.1/gems/vagrant-1.0.6/lib/vagrant/config/loader.rb:115:inblock in procs_for_source'
from /home/user/.rbenv/versions/1.9.3-p385/lib/ruby/gems/1.9.1/gems/vagrant-1.0.6/lib/vagrant/config.rb:41:in block in capture_configures' from <internal:prelude>:10:insynchronize'
from /home/user/.rbenv/versions/1.9.3-p385/lib/ruby/gems/1.9.1/gems/vagrant-1.0.6/lib/vagrant/config.rb:36:in capture_configures' from /home/user/.rbenv/versions/1.9.3-p385/lib/ruby/gems/1.9.1/gems/vagrant-1.0.6/lib/vagrant/config/loader.rb:114:inprocs_for_source'
from /home/user/.rbenv/versions/1.9.3-p385/lib/ruby/gems/1.9.1/gems/vagrant-1.0.6/lib/vagrant/config/loader.rb:51:in block in set' from /home/user/.rbenv/versions/1.9.3-p385/lib/ruby/gems/1.9.1/gems/vagrant-1.0.6/lib/vagrant/config/loader.rb:45:ineach'
from /home/user/.rbenv/versions/1.9.3-p385/lib/ruby/gems/1.9.1/gems/vagrant-1.0.6/lib/vagrant/config/loader.rb:45:in set' from /home/user/.rbenv/versions/1.9.3-p385/lib/ruby/gems/1.9.1/gems/vagrant-1.0.6/lib/vagrant/environment.rb:377:inblock in load_config!'
from /home/user/.rbenv/versions/1.9.3-p385/lib/ruby/gems/1.9.1/gems/vagrant-1.0.6/lib/vagrant/environment.rb:392:in call' from /home/user/.rbenv/versions/1.9.3-p385/lib/ruby/gems/1.9.1/gems/vagrant-1.0.6/lib/vagrant/environment.rb:392:inload_config!'
from /home/user/.rbenv/versions/1.9.3-p385/lib/ruby/gems/1.9.1/gems/vagrant-1.0.6/lib/vagrant/environment.rb:327:in load!' from /home/user/.rbenv/versions/1.9.3-p385/lib/ruby/gems/1.9.1/gems/vagrant-1.0.6/bin/vagrant:40:in<top (required)>'
from /home/user/.rbenv/versions/1.9.3-p385/bin/vagrant:23:in load' from /home/user/.rbenv/versions/1.9.3-p385/bin/vagrant:23:in

'

Discographies (aka Artist/Label pages)

It's an obvious & mandatory feature. But it needs to be done right. A major problem I see with other sites is too much clutter/scrolling etc. Some artist pages are massive. I'd like to see something more akin to how Discogs does it.

See for an example: http://www.discogs.com/artist/Flaming+Lips%2C+The

Rather than showing all the different album versions, they are collapsed under a "master release", which, when clicked on, expands to show the different versions. (ajaxing, is it?) Keep in mind Discogs goes be every single different Catalogue #; Waffles only sees a difference if the mastering and/or tracklist is different. (or media: CD cassette vinyl)

Something else I'd love to see: have the page list the complete discog, regardless of something being on-site or not. Albums missing from the site could be denoted somehow. (diff font, an icon, even a friggin' asterisk) I really believe this would be a big incentive for the users to upload more content, in an effort to complete a discog. It would also make it an easier task for users to check for dupes, before uploading.

I would even like to carry the idea one step further, and list the main formats as well, regardless. Again, incentive to have an album up in every format. (flac, 320, V0, V2, perhaps "Other" [multichannel, DVD-A...]) Again, if the album isn't available in a certain format, the row/column would still show the missing format, just that it would be represented differently, to show it's not on site yet. Also, say there's a 192 rip up. Still show the V2 row/column, denoted as not being available, but add, say, (192CBR available) beside it, which would show that there is something there, but also that it can (and should) be upgraded/replaced. (And perhaps request votes could be shown/voted on here as well.)

All of this should be built & modifiable by the userbase & API (Discogs, by the looks of it at this point)

link to album directly from anime series instead of just to artist page

I don't know anything about coding, and especially don't know anything about building a tracker. Apologies if I'm screwing you around.

On Animebytes when clicking on an anime series it has the OP and ED. Hyperlinks are there for the artist, but then the user has to search through the artist to find the album in question.

e.g.http://mei.animebytes.tv/images/efd9c7daef815d7568ae30ea2aefb9a5.png
It'd be good if it'd directly link to Giniro Hikousan, as well as having the link to Supercell available

Musicbrainz validation

When users upload a torrent, we prompt them for the artist, release, release year, and so on. We should validate their inputted data against MusicBrainz.

i18n

I think we should use Django's i18n support right from the start, especially since it's not hard at all โ€“ just wrap all the string in ugettext.

What do you think?

Forums

Batter should have forums, or some equivalent method of community discussion.

Some things I can think of that will need to be provided:

  • different areas of discussion categorized by topic ("forums")
  • flexible permissions system to allow certain user groups to see / post / moderate certain forums
  • potential to have forums that do not contribute to awards (#40)
  • list to see unread messages
  • ability to mark forums as read (either a single forum, or all forums)
  • "Lazy" load posts, only one page per topic. No "pages". If you haven't yet, take a look at Discourse, it's a new open-source forum project from the guys who worked on StackOverflow, and it's looking really nice.
  • Probably tons more stuff I'm not thinking of.

Torrent pieces should be stored as binary

In https://github.com/wafflesfm/batter/blob/develop/batter/torrents/views/upload.py#L68

t['info']['pieces'] = binascii.hexlify(t['info']['pieces'])

It would be much more efficient to just store this as binary, and if a textual representation is needed later just to convert it on the fly. I know that Django doesn't have a built-in thing for this, but IMO it's worth having to specialize some of the DB stuff to reduce the size by half. Comments regarding this @Ell?

If for some reason this isn't possible, at least base64 or better should be used.

Request System

Users should be able to make requests for specific uploads.

We need to have some brainstorming on how we might improve user engagement when dealing with requests (e.g., allow users to add some of their buffer to the request that the uploader would receive, or other ideas).

Update "music" app models

Music app needs to have its models updated.

I'm thinking along the lines of:
MusicUpload (extends Upload) - all the encoding specific metadata - has as its parent:
Release (is a thing like InbetweenersTweener) - all the release specific metadata like date, etc.
Master (extends TorrentGroup) - all the album/EP specific metadata.

This structure is similar to discogs, I believe, for consistency. It'd be a good idea to look at what metadata they can provide when considering model design.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.