Beispiel #1
0
 /**
  * Get the string id for the storage
  *
  * @param int numericId
  * @return string|null either the storage id string or null if the numeric id is not known
  */
 public static string getStorageId(long numericId)
 {
     using (var context = new NCContext())
     {
         // TODO @focus
         var result = context.Storages.Where(o => o.numeric_id == numericId).ToList().FirstOrDefault();
         return(result?.id);
     }
 }
Beispiel #2
0
        /**
         * @param string internalPath
         * @param int time
         * @param int sizeDifference number of bytes the file has grown
         * @suppress SqlInjectionChecker
         */
        public void propagateChange(string internalPath, int time, int sizeDifference = 0)
        {
            // Do not propogate changes in ignored paths
            foreach (var ignore in this.ignores)
            {
                if (internalPath.IndexOf(ignore, StringComparison.Ordinal) == 0)
                {
                    return;
                }
//			if (strpos(internalPath, ignore) == 0) {
//				return;
//			}
            }

            var storageId = (int)this.storage.getStorageCache().getNumericId();

            var parents = this.getParents(internalPath);

            if (this.inBatch)
            {
                foreach (var parent in parents)
                {
                    this.addToBatch(parent, time, sizeDifference);
                }
                return;
            }

            var parentHashes = parents.Select(o => o.MD5ext());
            var etag         = Guid.NewGuid().ToString("N"); // since we give all folders the same etag we don't ask the storage for the etag

            using (var context = new NCContext())
            {
//			using (var transaction = context.Database.BeginTransaction())
//			{
//
//			}

                var record = context.FileCaches.Single(o => o.storage == storageId && parentHashes.Contains(o.path_hash));
                record.mtime = time;         // builder.createFunction('GREATEST(' . builder.getColumnName('mtime') . ', ' . builder.createNamedParameter((int)time, IQueryBuilder::PARAM_INT) . ')'))
                record.etag  = etag;
                context.Update(record);
            }

            if (sizeDifference != = 0)
            {
                // we need to do size separably so we can ignore entries with uncalculated size
                builder = this.connection.getQueryBuilder();
                builder.update('filecache')
                .set('size', builder.func().add('size', builder.createNamedParameter(sizeDifference)))
                .where (builder.expr().eq('storage', builder.createNamedParameter(storageId, IQueryBuilder::PARAM_INT)))
                .andWhere(builder.expr().in ('path_hash', hashParams))
                .andWhere(builder.expr().gt('size', builder.expr().literal(-1, IQueryBuilder::PARAM_INT)));

                builder.execute();
            }
        }
Beispiel #3
0
        /**
         * @param string[] storageIds
         */
        public void loadForStorageIds(IList <string> storageIds)
        {
            var result = new List <StoragesTable>();

            using (var context = new NCContext())
            {
                // TODO @focus
                result = context.Storages.Where((item, index) => storageIds.Contains(item.id)).ToList();
            }
            foreach (var storagesTable in result)
            {
                this.cache[storagesTable.id] = storagesTable;
            }
        }
        /**
         * delete user from accounts table
         *
         * @param IUser user
         */
        public void deleteUser(IUser user)
        {
            var          uid     = user.getUID();
            AccountTable account = null;

            using (var context = new NCContext())
            {
                account = context.Accounts.Find(uid);
                if (account != null)
                {
                    context.Accounts.Remove(account);
                    context.SaveChanges();
                }
            }
        }
Beispiel #5
0
        /**
         * @param bool isAvailable
         */
        public void setAvailability(bool isAvailable)
        {
            using (var context = new NCContext())
            {
                // TODO @focus
                var result = context.Storages.Where(o => o.id == this.storageId).ToList();
                foreach (var r in result)
                {
                    r.available    = isAvailable ? 1 : 0;
                    r.last_checked = TimeUtility.GetTimestampFormNow();
                }

                context.SaveChanges();
            }
//            sql = "UPDATE `*PREFIX*storages` SET `available` = ?, `last_checked` = ? WHERE `id` = ?";
//            available = isAvailable ? 1 : 0;
//                OC_DB::executeAudited(sql, array(available, time(), this.storageId));
        }
        /**
         * update existing user in accounts table
         *
         * @param IUser user
         * @param array data
         */
        protected void updateExistingUser(IUser user, JObject data)
        {
            var          uid     = user.getUID();
            AccountTable account = null;

            using (var context = new NCContext())
            {
                account = context.Accounts.Find(uid);
                if (account != null)
                {
                    account.data = data.ToString();
                    context.SaveChanges();
                }
            }
            //jsonEncodedData = json_encode(data);
            //query = this.connection.getQueryBuilder();
            //query.update(this.table)
            //    .set('data', query.createNamedParameter(jsonEncodedData))
            //    .where(query.expr().eq('uid', query.createNamedParameter(uid)))
            //    .execute();
        }
        /**
         * get stored data from a given user
         *
         * @param IUser user
         * @return array
         */
        public JObject getUser(IUser user)
        {
            var          uid     = user.getUID();
            AccountTable account = null;

            using (var context = new NCContext())
            {
                account = context.Accounts.Find(uid);
            }
            if (account == null)
            {
                var userData = this.buildDefaultUserRecord(user);
                this.insertNewUser(user, userData);
                return(userData);
            }

            //userDataArray = json_decode(result[0]['data'], true);

            //userDataArray = this.addMissingDefaultValues(userDataArray);

            return(JObject.Parse(account.data));
        }
Beispiel #8
0
 public DocumentInteractor(NCContext db)
 {
     this._db = db;
 }