Added support for database operations. Now when requesting a item, it is saved to a database and sends a email from pi.midboe account.
This commit is contained in:
		@@ -7,6 +7,8 @@ const tmdb = new TMDB(configuration.get('tmdb', 'apiKey'));
 | 
				
			|||||||
var Promise = require('bluebird');
 | 
					var Promise = require('bluebird');
 | 
				
			||||||
var rp = require('request-promise');
 | 
					var rp = require('request-promise');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const establishedDatabase = require('src/database/database');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const MailTemplate = require('src/plex/mailTemplate')
 | 
					const MailTemplate = require('src/plex/mailTemplate')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var pythonShell = require('python-shell');
 | 
					var pythonShell = require('python-shell');
 | 
				
			||||||
@@ -15,6 +17,13 @@ const nodemailer = require('nodemailer');
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class RequestRepository {
 | 
					class RequestRepository {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						constructor(database) {
 | 
				
			||||||
 | 
							this.database = database || establishedDatabase;
 | 
				
			||||||
 | 
							this.queries = {
 | 
				
			||||||
 | 
								'insertRequest': "INSERT INTO requests VALUES (?, ?, ?, ?, ?, ?, CURRENT_DATE)"
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	searchRequest(query, page, type) {
 | 
						searchRequest(query, page, type) {
 | 
				
			||||||
		// TODO get from cache
 | 
							// TODO get from cache
 | 
				
			||||||
		// STRIP METADATA THAT IS NOT ALLOWED
 | 
							// STRIP METADATA THAT IS NOT ALLOWED
 | 
				
			||||||
@@ -99,23 +108,31 @@ class RequestRepository {
 | 
				
			|||||||
	* @param {identifier, type} the id of the media object and type of media must be defined
 | 
						* @param {identifier, type} the id of the media object and type of media must be defined
 | 
				
			||||||
	* @returns {Promise} If nothing has gone wrong.
 | 
						* @returns {Promise} If nothing has gone wrong.
 | 
				
			||||||
	*/ 
 | 
						*/ 
 | 
				
			||||||
	sendRequest(identifier, type) {
 | 
						sendRequest(identifier, type, ip) {
 | 
				
			||||||
		// TODO add to DB so can have a admin page
 | 
							// TODO add to DB so can have a admin page
 | 
				
			||||||
		// TODO try a cache hit on the movie item
 | 
							// TODO try a cache hit on the movie item
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		tmdb.lookup(identifier, type).then(movie => {
 | 
							tmdb.lookup(identifier, type).then(movie => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Add request to database
 | 
				
			||||||
 | 
								this.database.run(this.queries.insertRequest, [movie.id, movie.title, movie.year, movie.poster, 'NULL', ip])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// create reusable transporter object using the default SMTP transport
 | 
								// create reusable transporter object using the default SMTP transport
 | 
				
			||||||
			let transporter = nodemailer.createTransport({
 | 
								let transporter = nodemailer.createTransport({
 | 
				
			||||||
			    host: configuration.get('mail', 'host'),
 | 
									service: 'gmail',
 | 
				
			||||||
			    port: 26,
 | 
					 | 
				
			||||||
			    ignoreTLS: true,
 | 
					 | 
				
			||||||
			    tls :{rejectUnauthorized: false},
 | 
					 | 
				
			||||||
			    secure: false, // secure:true for port 465, secure:false for port 587
 | 
					 | 
				
			||||||
			    auth: {
 | 
								    auth: {
 | 
				
			||||||
			        user: configuration.get('mail', 'user'),
 | 
								        user: configuration.get('mail', 'user_pi'),
 | 
				
			||||||
			        pass: configuration.get('mail', 'password')
 | 
								        pass: configuration.get('mail', 'password_pi')
 | 
				
			||||||
			    }
 | 
								    }
 | 
				
			||||||
 | 
								    // host: configuration.get('mail', 'host'),
 | 
				
			||||||
 | 
								    // port: 26,
 | 
				
			||||||
 | 
								    // ignoreTLS: true,
 | 
				
			||||||
 | 
								    // tls :{rejectUnauthorized: false},
 | 
				
			||||||
 | 
								    // secure: false, // secure:true for port 465, secure:false for port 587
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			const mailTemplate = new MailTemplate(movie)
 | 
								const mailTemplate = new MailTemplate(movie)
 | 
				
			||||||
@@ -123,7 +140,7 @@ class RequestRepository {
 | 
				
			|||||||
			// setup email data with unicode symbols
 | 
								// setup email data with unicode symbols
 | 
				
			||||||
			let mailOptions = {
 | 
								let mailOptions = {
 | 
				
			||||||
				// TODO get the mail adr from global location (easy to add)
 | 
									// TODO get the mail adr from global location (easy to add)
 | 
				
			||||||
			    from: 'MovieRequester <support@kevinmidboe.com>', // sender address
 | 
								    from: 'MovieRequester <pi.midboe@gmail.com>', // sender address
 | 
				
			||||||
			    to: 'kevin.midboe@gmail.com', // list of receivers
 | 
								    to: 'kevin.midboe@gmail.com', // list of receivers
 | 
				
			||||||
			    subject: 'Download request', // Subject line
 | 
								    subject: 'Download request', // Subject line
 | 
				
			||||||
			    text: mailTemplate.toText(),
 | 
								    text: mailTemplate.toText(),
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user