summaryrefslogtreecommitdiffstats
path: root/bin
AgeCommit message (Expand)Author
2015-03-07try to fix git addBernhard Posselt
2015-03-07fix pathBernhard Posselt
2015-03-07testBernhard Posselt
2015-03-07add checksumBernhard Posselt
2014-12-26update rpm spec fileBernhard Posselt
2014-12-26remove unneeded built in libsBernhard Posselt
2014-12-26remove tmp fileBernhard Posselt
2014-12-26use python 3 depsBernhard Posselt
2014-12-26check for systemd on buildBernhard Posselt
2014-12-26use unit dir for systemd directoryBernhard Posselt
2014-12-26fix files directive and systemd unit directiveBernhard Posselt
2014-12-26first stab at rpm spec fileBernhard Posselt
2014-12-18Update README.rstBernhard Posselt
2014-12-05update readmeBernhard Posselt
2014-12-04fix #688Bernhard Posselt
2014-12-04dont use python but4.3.0Bernhard Posselt
2014-12-04define scripts installation directoryBernhard Posselt
2014-12-04use full path for executableBernhard Posselt
2014-12-04Update MakefileBernhard Posselt
2014-12-04Merge pull request #687 from bjoerns1983/patch-1Bernhard Posselt
2014-12-04Update owncloud-news-updaterBernhard Posselt
2014-12-04Update README.rstbjoerns1983
2014-12-04Update owncloud-news-updaterBernhard Posselt
2014-12-04Revert "Changed Script Location"Bernhard Posselt
2014-12-04Merge pull request #685 from bjoerns1983/updaterBernhard Posselt
2014-12-04Changed Script Locationdarkside40
2014-12-04beautificationBernhard Posselt
2014-12-04readme fixesBernhard Posselt
2014-12-04fix updating commandBernhard Posselt
2014-12-04add note about updatingBernhard Posselt
2014-12-04debugging sectionBernhard Posselt
2014-12-04makefile beautificationBernhard Posselt
2014-12-04update fixesBernhard Posselt
2014-12-04more infosBernhard Posselt
2014-12-04more on updatingBernhard Posselt
2014-12-04readme changesBernhard Posselt
2014-12-04add update commandBernhard Posselt
2014-12-04fix unit pathBernhard Posselt
2014-12-04Update README.rstBernhard Posselt
2014-12-04Update README.rstBernhard Posselt
2014-12-04Merge pull request #684 from bjoerns1983/updaterBernhard Posselt
2014-12-04Fixed DAEMON locationdarkside40
2014-12-04Update README.rstBernhard Posselt
2014-12-04Update MakefileBernhard Posselt
2014-12-04Update MakefileBernhard Posselt
2014-12-04Update README.rstBernhard Posselt
2014-12-04Fixed start command, script location etc.darkside40
2014-12-04Update README.rstBernhard Posselt
2014-12-04Update README.rstBernhard Posselt
2014-12-04Update MakefileBernhard Posselt
und-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
<?php
/**
 * ownCloud - News
 *
 * This file is licensed under the Affero General Public License version 3 or
 * later. See the COPYING file.
 *
 * @author Alessandro Cosentino <cosenal@gmail.com>
 * @author Bernhard Posselt <dev@bernhard-posselt.com>
 * @copyright Alessandro Cosentino 2012
 * @copyright Bernhard Posselt 2012, 2014
 */

namespace OCA\News\Controller;

use \OCP\IRequest;
use \OCP\ILogger;
use \OCP\AppFramework\ApiController;
use \OCP\AppFramework\Http;

use \OCA\News\Service\FeedService;
use \OCA\News\Service\ItemService;
use \OCA\News\Service\ServiceNotFoundException;
use \OCA\News\Service\ServiceConflictException;


class FeedApiController extends ApiController {

    use JSONHttpError;

    private $itemService;
    private $feedService;
    private $userId;
    private $logger;
    private $loggerParams;
    private $serializer;

    public function __construct($AppName,
                                IRequest $request,
                                FeedService $feedService,
                                ItemService $itemService,
                                ILogger $logger,
                                $UserId,
                                $LoggerParameters){
        parent::__construct($AppName, $request);
        $this->feedService = $feedService;
        $this->itemService = $itemService;
        $this->userId = $UserId;
        $this->logger = $logger;
        $this->loggerParams = $LoggerParameters;
        $this->serializer = new EntityApiSerializer('feeds');
    }


    /**
     * @NoAdminRequired
     * @NoCSRFRequired
     * @CORS
     */
    public function index() {

        $result = [
            'starredCount' => $this->itemService->starredCount($this->userId),
            'feeds' => $this->feedService->findAll($this->userId)
        ];


        try {
            $result['newestItemId'] =
                $this->itemService->getNewestItemId($this->userId);

        // in case there are no items, ignore
        } catch(ServiceNotFoundException $ex) {}

        return $this->serializer->serialize($result);
    }


    /**
     * @NoAdminRequired
     * @NoCSRFRequired
     * @CORS
     *
     * @param string $url
     * @param int $folderId
     * @return array|mixed|\OCP\AppFramework\Http\JSONResponse
     */
    public function create($url, $folderId=0) {
        try {
            $this->feedService->purgeDeleted($this->userId, false);

            $feed = $this->feedService->create($url, $folderId, $this->userId);
            $result = ['feeds' => [$feed]];

            try {
                $result['newestItemId'] =
                    $this->itemService->getNewestItemId($this->userId);

            // in case there are no items, ignore
            } catch(ServiceNotFoundException $ex) {}

            return $this->serializer->serialize($result);

        } catch(ServiceConflictException $ex) {
            return $this->error($ex, Http::STATUS_CONFLICT);
        } catch(ServiceNotFoundException $ex) {
            return $this->error($ex, Http::STATUS_NOT_FOUND);
        }
    }


    /**
     * @NoAdminRequired
     * @NoCSRFRequired
     * @CORS
     *
     * @param int $feedId
     * @return array|\OCP\AppFramework\Http\JSONResponse
     */
    public function delete($feedId) {
        try {
            $this->feedService->delete($feedId, $this->userId);
        } catch(ServiceNotFoundException $ex) {
            return $this->error($ex, Http::STATUS_NOT_FOUND);
        }

        return [];
    }


    /**
     * @NoAdminRequired
     * @NoCSRFRequired
     * @CORS
     *
     * @param int $feedId
     * @param int $newestItemId
     */
    public function read($feedId, $newestItemId) {
        $this->itemService->readFeed($feedId, $newestItemId, $this->userId);
    }


    /**
     * @NoAdminRequired
     * @NoCSRFRequired
     * @CORS
     *
     * @param int $feedId
     * @param int $folderId
     * @return array|\OCP\AppFramework\Http\JSONResponse
     */
    public function move($feedId, $folderId) {
        try {
            $this->feedService->patch(
                $feedId, $this->userId, ['folderId' => $folderId]
            );
        } catch(ServiceNotFoundException $ex) {
            return $this->error($ex, Http::STATUS_NOT_FOUND);
        }

        return [];
    }


    /**
     * @NoAdminRequired
     * @NoCSRFRequired
     * @CORS
     *
     * @param int $feedId
     * @param string $feedTitle
     * @return array|\OCP\AppFramework\Http\JSONResponse
     */
    public function rename($feedId, $feedTitle) {
        try {
            $this->feedService->patch(
                $feedId, $this->userId, ['title' => $feedTitle]
            );
        } catch(ServiceNotFoundException $ex) {
            return $this->error($ex, Http::STATUS_NOT_FOUND);
        }

        return [];
    }


    /**
     * @NoCSRFRequired
     * @CORS
     */
    public function fromAllUsers() {
        $feeds = $this->feedService->findAllFromAllUsers();
        $result = ['feeds' => []];

        foreach ($feeds as $feed) {
            $result['feeds'][] = [
                'id' => $feed->getId(),
                'userId' => $feed->getUserId()
            ];
        }

        return $result;
    }


    /**
     * @NoCSRFRequired
     *
     * @param string $userId
     * @param int $feedId
     */
    public function update($userId, $feedId) {
        try {
            $this->feedService->update($feedId, $userId);
        // ignore update failure
        } catch(\Exception $ex) {
            $this->logger->debug('Could not update feed ' . $ex->getMessage(),
                    $this->loggerParams);
        }
    }


}