| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 | using System;using System.Collections.Generic;using System.IO;using System.Threading;using System.Threading.Tasks;using Emby.Server.Implementations.Data;using MediaBrowser.Common.Configuration;using MediaBrowser.Model.Logging;using MediaBrowser.Model.Social;using SQLitePCL.pretty;namespace Emby.Server.Implementations.Social{    public class SharingRepository : BaseSqliteRepository, ISharingRepository    {        public SharingRepository(ILogger logger, IApplicationPaths appPaths)            : base(logger)        {            DbFilePath = Path.Combine(appPaths.DataPath, "shares.db");        }        /// <summary>        /// Opens the connection to the database        /// </summary>        /// <returns>Task.</returns>        public void Initialize()        {            using (var connection = CreateConnection())            {                RunDefaultInitialization(connection);                string[] queries = {                                "create table if not exists Shares (Id GUID, ItemId TEXT, UserId TEXT, ExpirationDate DateTime, PRIMARY KEY (Id))",                                "create index if not exists idx_Shares on Shares(Id)",                                "pragma shrink_memory"                               };                connection.RunQueries(queries);            }        }        public async Task CreateShare(SocialShareInfo info)        {            if (info == null)            {                throw new ArgumentNullException("info");            }            if (string.IsNullOrWhiteSpace(info.Id))            {                throw new ArgumentNullException("info.Id");            }            using (WriteLock.Write())            {                using (var connection = CreateConnection())                {                    connection.RunInTransaction(db =>                    {                        var commandText = "replace into Shares (Id, ItemId, UserId, ExpirationDate) values (?, ?, ?, ?)";                        db.Execute(commandText,                            info.Id.ToGuidParamValue(),                            info.ItemId,                            info.UserId,                            info.ExpirationDate.ToDateTimeParamValue());                    }, TransactionMode);                }            }        }        public SocialShareInfo GetShareInfo(string id)        {            if (string.IsNullOrWhiteSpace(id))            {                throw new ArgumentNullException("id");            }            using (WriteLock.Read())            {                using (var connection = CreateConnection(true))                {                    var commandText = "select Id, ItemId, UserId, ExpirationDate from Shares where id = ?";                    var paramList = new List<object>();                    paramList.Add(id.ToGuidParamValue());                    foreach (var row in connection.Query(commandText, paramList.ToArray()))                    {                        return GetSocialShareInfo(row);                    }                }            }            return null;        }        private SocialShareInfo GetSocialShareInfo(IReadOnlyList<IResultSetValue> reader)        {            var info = new SocialShareInfo();            info.Id = reader[0].ReadGuid().ToString("N");            info.ItemId = reader[1].ToString();            info.UserId = reader[2].ToString();            info.ExpirationDate = reader[3].ReadDateTime();            return info;        }        public async Task DeleteShare(string id)        {        }    }}
 |