利用IPFS构建短视频应用开发经历(四)

本系列文章是针对 https://blog.csdn.net/weixin_43668031/article/details/83962959 内容的实现所编写的。开发经历包括思考过程、重构和推翻重来。

继续智能合约的编写:

  function createAlbum (string memory _title, string memory _cover, string memory _info) public returns (uint albumnum) {
        albums[albumNum++] = Album(_title, _cover, _info, msg.sender, 0);
        return albumNum - 1;
    }
    function editAlbum (uint _albumId, string memory _title, string memory _cover, string memory _info) public {
        if (msg.sender != albums[_albumId].author) return;
        albums[_albumId].title = _title;
        albums[_albumId].cover = _cover;
        albums[_albumId].info = _info;
    }
    function createAlbumVideo (uint _albumId, uint _videoId) public returns (uint videonum) {
        if (msg.sender != albums[_albumId].author) return (0);
        albums[_albumId].videos[albums[_albumId].videoNum++] = _videoId;
        return albums[_albumId].videoNum - 1;
    }
    function updateAlbumVideo (uint _albumId, uint _albumvideoId, uint _videoId) public {
        if (msg.sender != albums[_albumId].author || albums[_albumId].videoNum <= _albumvideoId) return;
        albums[_albumId].videos[_albumvideoId] = _videoId;
    }
    function getAlbum (uint _albumId) view public returns (string memory title, string memory cover, string memory info, address author, uint videonum, uint durationSum) {
        Album storage _album = albums[_albumId];
        for (uint i = 0; 0 < _album.videoNum; i++) {
            if (videos[_album.videos[i]].permission == 0) {
                durationSum += videos[_album.videos[i]].duration;
            }
        }
        return (_album.title, _album.cover, _album.info, _album.author, _album.videoNum, durationSum);
    }
    function getAlbumVideo (uint _albumId, uint _videoId) view public returns (uint videoId, string memory title, string memory cover, string memory videoinfo, string memory info, uint duration, uint timestamp, address author, uint commentsNum, uint gratuityNum, uint gratuitySum) {
        videoId = albums[_albumId].videos[_videoId];
        if (videos[videoId].permission == 0 || msg.sender == videos[videoId].author) {
            Video storage _video = videos[videoId];
            for (uint i = 0; i < _video.gratuityNum; i++) gratuitySum += _video.gratuitys[i].gratuity;
            return (videoId, _video.title, _video.cover, _video.videoinfo, _video.info, _video.duration, _video.timestamp, _video.author, _video.commentsNum, _video.gratuityNum, gratuitySum);
        }
    }

这里完成了几个操作专辑的方法,其中getAlbum 获取专辑数据,并能够实时计算出这个专辑中允许访问的视频的总长度。视频如果不是公开权限的将不计入内,但如果这个视频又是自己上传的也是可以通过getAlbumVideo 方法来获取到内容,这和getVideo方法基本一致。

到这里合约编写基本就告一段落了,接下去会着重开始编写前端和中间件。

https://github.com/bill080307/douyinWithEth/blob/2a51da9119265c3665b03832dfd346befa4152fc/VideoShare.sol
这是合约现在的版本,除了在本文中提到的部分代码,会对上节的代码就行修正错误和概念,因此以目前的这个版本为准,如果你通过本系列文章中的代码片段就行组合,可以得到完整,但存在错误的代码。

原创文章 29 获赞 21 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43668031/article/details/85332777