2015-12-04 17:16:42 -05:00
// Copyright 2015 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
2015-12-17 02:28:47 -05:00
package convert
2015-12-04 17:16:42 -05:00
import (
"fmt"
"github.com/Unknwon/com"
2016-01-15 19:24:03 +01:00
"github.com/gogits/git-module"
2016-03-13 23:20:22 -04:00
api "github.com/gogits/go-gogs-client"
2015-12-04 17:16:42 -05:00
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/setting"
)
2016-03-13 23:20:22 -04:00
func ToUser ( u * models . User ) * api . User {
if u == nil {
return nil
}
2015-12-04 17:16:42 -05:00
return & api . User {
2016-07-24 01:08:22 +08:00
ID : u . ID ,
2015-12-04 17:16:42 -05:00
UserName : u . Name ,
FullName : u . FullName ,
Email : u . Email ,
AvatarUrl : u . AvatarLink ( ) ,
}
}
2016-03-13 23:20:22 -04:00
func ToEmail ( email * models . EmailAddress ) * api . Email {
2015-12-15 22:57:18 -05:00
return & api . Email {
Email : email . Email ,
Verified : email . IsActivated ,
Primary : email . IsPrimary ,
}
}
2016-03-13 23:20:22 -04:00
func ToRepository ( owner * models . User , repo * models . Repository , permission api . Permission ) * api . Repository {
2015-12-04 17:16:42 -05:00
cl := repo . CloneLink ( )
return & api . Repository {
2016-03-13 23:20:22 -04:00
ID : repo . ID ,
Owner : ToUser ( owner ) ,
2015-12-04 17:16:42 -05:00
FullName : owner . Name + "/" + repo . Name ,
2016-07-10 16:56:15 -07:00
Description : repo . Description ,
2015-12-04 17:16:42 -05:00
Private : repo . IsPrivate ,
Fork : repo . IsFork ,
2016-08-14 03:32:24 -07:00
HTMLURL : setting . AppUrl + owner . Name + "/" + repo . Name ,
CloneURL : cl . HTTPS ,
SSHURL : cl . SSH ,
2016-07-10 16:56:15 -07:00
OpenIssues : repo . NumOpenIssues ,
Stars : repo . NumStars ,
Forks : repo . NumForks ,
Watchers : repo . NumWatches ,
2016-07-11 15:28:51 -07:00
Created : repo . Created ,
Updated : repo . Updated ,
2016-08-14 03:32:24 -07:00
Permissions : & permission ,
2015-12-04 17:16:42 -05:00
}
}
2016-03-13 23:20:22 -04:00
func ToBranch ( b * models . Branch , c * git . Commit ) * api . Branch {
2016-01-28 20:49:05 +01:00
return & api . Branch {
2016-03-13 23:20:22 -04:00
Name : b . Name ,
Commit : ToCommit ( c ) ,
}
2016-01-28 20:49:05 +01:00
}
2016-03-13 23:20:22 -04:00
func ToCommit ( c * git . Commit ) * api . PayloadCommit {
2016-08-09 22:01:57 -07:00
authorUsername := ""
author , err := models . GetUserByEmail ( c . Author . Email )
if err == nil {
authorUsername = author . Name
}
committerUsername := ""
committer , err := models . GetUserByEmail ( c . Committer . Email )
if err == nil {
committerUsername = committer . Name
}
2016-01-28 20:49:05 +01:00
return & api . PayloadCommit {
2016-03-13 23:20:22 -04:00
ID : c . ID . String ( ) ,
2016-01-28 20:49:05 +01:00
Message : c . Message ( ) ,
2016-03-13 23:20:22 -04:00
URL : "Not implemented" ,
2016-01-28 20:49:05 +01:00
Author : & api . PayloadAuthor {
2016-08-09 22:01:57 -07:00
Name : c . Author . Name ,
Email : c . Author . Email ,
UserName : authorUsername ,
} ,
Committer : & api . PayloadCommitter {
Name : c . Committer . Name ,
Email : c . Committer . Email ,
UserName : committerUsername ,
2016-01-28 20:49:05 +01:00
} ,
2016-08-09 22:01:57 -07:00
Timestamp : c . Author . When ,
2016-01-28 20:49:05 +01:00
}
}
2016-03-13 23:20:22 -04:00
func ToPublicKey ( apiLink string , key * models . PublicKey ) * api . PublicKey {
2015-12-04 17:16:42 -05:00
return & api . PublicKey {
ID : key . ID ,
Key : key . Content ,
URL : apiLink + com . ToStr ( key . ID ) ,
Title : key . Name ,
Created : key . Created ,
}
}
2016-03-13 23:20:22 -04:00
func ToHook ( repoLink string , w * models . Webhook ) * api . Hook {
2015-12-04 17:16:42 -05:00
config := map [ string ] string {
"url" : w . URL ,
"content_type" : w . ContentType . Name ( ) ,
}
if w . HookTaskType == models . SLACK {
s := w . GetSlackHook ( )
config [ "channel" ] = s . Channel
config [ "username" ] = s . Username
config [ "icon_url" ] = s . IconURL
config [ "color" ] = s . Color
}
return & api . Hook {
ID : w . ID ,
Type : w . HookTaskType . Name ( ) ,
URL : fmt . Sprintf ( "%s/settings/hooks/%d" , repoLink , w . ID ) ,
Active : w . IsActive ,
Config : config ,
Events : w . EventsArray ( ) ,
Updated : w . Updated ,
Created : w . Created ,
}
}
2016-03-13 23:20:22 -04:00
func ToDeployKey ( apiLink string , key * models . DeployKey ) * api . DeployKey {
2015-12-04 17:16:42 -05:00
return & api . DeployKey {
ID : key . ID ,
Key : key . Content ,
URL : apiLink + com . ToStr ( key . ID ) ,
Title : key . Name ,
Created : key . Created ,
ReadOnly : true , // All deploy keys are read-only.
}
}
2015-12-17 02:28:47 -05:00
2016-03-13 23:20:22 -04:00
func ToLabel ( label * models . Label ) * api . Label {
return & api . Label {
2016-08-03 09:24:16 -07:00
ID : label . ID ,
2016-03-13 23:20:22 -04:00
Name : label . Name ,
Color : label . Color ,
}
}
func ToMilestone ( milestone * models . Milestone ) * api . Milestone {
if milestone == nil {
return nil
}
apiMilestone := & api . Milestone {
ID : milestone . ID ,
State : milestone . State ( ) ,
Title : milestone . Name ,
Description : milestone . Content ,
OpenIssues : milestone . NumOpenIssues ,
ClosedIssues : milestone . NumClosedIssues ,
}
if milestone . IsClosed {
apiMilestone . Closed = & milestone . ClosedDate
}
if milestone . Deadline . Year ( ) < 9999 {
apiMilestone . Deadline = & milestone . Deadline
}
return apiMilestone
}
func ToIssue ( issue * models . Issue ) * api . Issue {
apiLabels := make ( [ ] * api . Label , len ( issue . Labels ) )
for i := range issue . Labels {
apiLabels [ i ] = ToLabel ( issue . Labels [ i ] )
}
apiIssue := & api . Issue {
ID : issue . ID ,
Index : issue . Index ,
State : issue . State ( ) ,
2016-08-14 03:32:24 -07:00
Title : issue . Title ,
2016-03-13 23:20:22 -04:00
Body : issue . Content ,
User : ToUser ( issue . Poster ) ,
Labels : apiLabels ,
Assignee : ToUser ( issue . Assignee ) ,
Milestone : ToMilestone ( issue . Milestone ) ,
Comments : issue . NumComments ,
Created : issue . Created ,
Updated : issue . Updated ,
}
if issue . IsPull {
2016-08-14 03:32:24 -07:00
apiIssue . PullRequest = & api . PullRequestMeta {
HasMerged : issue . PullRequest . HasMerged ,
}
if issue . PullRequest . HasMerged {
apiIssue . PullRequest . Merged = & issue . PullRequest . Merged
2016-03-13 23:20:22 -04:00
}
}
return apiIssue
}
func ToOrganization ( org * models . User ) * api . Organization {
2015-12-17 02:28:47 -05:00
return & api . Organization {
2016-07-24 01:08:22 +08:00
ID : org . ID ,
2015-12-17 02:28:47 -05:00
AvatarUrl : org . AvatarLink ( ) ,
UserName : org . Name ,
FullName : org . FullName ,
Description : org . Description ,
Website : org . Website ,
Location : org . Location ,
}
}
2016-03-21 12:47:54 -04:00
func ToTeam ( team * models . Team ) * api . Team {
return & api . Team {
ID : team . ID ,
Name : team . Name ,
Description : team . Description ,
Permission : team . Authorize . String ( ) ,
}
}